<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>InnerVision TechBlog</title>
	<atom:link href="http://techblog.innervision.pl/feed/" rel="self" type="application/rss+xml" />
	<link>http://techblog.innervision.pl</link>
	<description>Technologie informacyjne po naszemu</description>
	<lastBuildDate>Tue, 19 Apr 2011 14:03:25 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>revProxy, czyli jak zoptymalizować serwis WWW</title>
		<link>http://techblog.innervision.pl/2011/04/19/revproxy-czyli-jak-zoptymalizowac-serwis-www/</link>
		<comments>http://techblog.innervision.pl/2011/04/19/revproxy-czyli-jak-zoptymalizowac-serwis-www/#comments</comments>
		<pubDate>Tue, 19 Apr 2011 14:03:25 +0000</pubDate>
		<dc:creator>Piotr Rybicki</dc:creator>
				<category><![CDATA[Technikalia]]></category>
		<category><![CDATA[hosting]]></category>
		<category><![CDATA[http]]></category>
		<category><![CDATA[internet]]></category>
		<category><![CDATA[network]]></category>
		<category><![CDATA[optymalizacja]]></category>
		<category><![CDATA[porady]]></category>
		<category><![CDATA[revProxy]]></category>
		<category><![CDATA[tuning]]></category>
		<category><![CDATA[www]]></category>
		<category><![CDATA[wydajność]]></category>

		<guid isPermaLink="false">http://techblog.innervision.pl/?p=179</guid>
		<description><![CDATA[Profesjonalny serwis WWW, aby ładował się błyskawicznie, używa różnych mechanizmów do zapamiętania całej strony lub jej elementów. Niektórzy wykorzystują do tego tzw. serwer STATIC, czyli osobny serwer WWW zoptymalizowany do obsługi dużej ilości statycznych plików. To podejście jest słuszne, natomiast bardziej elastycznym rozwiązaniem jest zastosowanie serwera Reverse Proxy u dostawcy usług hostingowych. Czym jest revProxy? [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://techblog.innervision.pl/wp-content/uploads/2011/04/revproxy1.jpg"><img class="alignleft size-thumbnail wp-image-246" title="revproxy" src="http://techblog.innervision.pl/wp-content/uploads/2011/04/revproxy1-150x150.jpg" alt="" width="150" height="150" /></a>Profesjonalny serwis WWW, aby ładował się błyskawicznie, używa różnych mechanizmów do zapamiętania całej strony lub jej elementów. Niektórzy wykorzystują do tego tzw. serwer STATIC, czyli osobny serwer WWW zoptymalizowany do obsługi dużej ilości statycznych plików. To podejście jest słuszne, natomiast bardziej elastycznym rozwiązaniem jest zastosowanie serwera Reverse Proxy u dostawcy usług hostingowych.</p>
<p><strong>Czym jest revProxy?</strong></p>
<p>Serwer revProxy znajduje się pomiędzy jednym lub kilkoma serwerami WWW a klientem przeglądającym stronę. Żądania wyświetlenia strony trafiają najpierw do revProxy, który (o ile już nie posiada ważnej kopii) pobiera element z serwera WWW (jak np. strona HTML, obrazek czy CSS) i zapisuje go w swojej pamięci.  Jeśli pojawia się żądanie o ten sam element, do klienta zostaje wysłana kopia zamiast oryginalnego elementu z serwera WWW. Główną zaletą takiego scenariusza jest zmniejszenie obciążenia na serwerach WWW, a tym samym szybsze ładowanie stron.</p>
<p><strong>Czy revProxy jest rozwiązaniem dla mnie?</strong></p>
<p>Opisywana technologia jest niestety mało popularna, a szkoda.  Poza koniecznością zaznajomienia się z mechanizmami sterującymi działaniem revProxy, występuje obawa, że straci się informacje na temat statystyk serwisu. W praktyce jednak, sterowanie revProxy jest proste, a statystyki można generować na podstawie np. kodu JavaScript zamiast logu serwera WWW.</p>
<p>Istnieje również niebezpieczeństwo, że w przypadku awarii serwera revProxy, strona przestanie się wyświetlać. Przy zastosowaniu odpowiednich rozwiązań load-balancer, infrastruktura może być odporna na taką awarię i w przypadku problemów z funkcjonowaniem revProxy,  cały ruch automatycznie zostanie przekierowany bezpośrednio na serwery WWW, lub na inny serwer revProxy.</p>
<p>Ekonomiczna zaleta tej technologii jest dość oczywista. Zmniejszenie obciążenia serwerów WWW, oznacza mniejszą ilość serwerów WWW, co prowadzi do mniejszych kosztów utrzymania.</p>
<p><strong>Jak działa procedura korzystania z cache w revProxy?</strong></p>
<p>W dużym uproszczeniu, wymieniamy poniżej kilka głównych zasad, którymi należy się kierować:</p>
<ul>
<li>Jeśli nagłówki odpowiedzi HTTP zawierają instrukcje aby nie cache-ować obiektu, nie będzie on cache-owany.</li>
<li>Jeśli obiekt jest autoryzowany, bądź bezpieczny (HTTPS), nie będzie cache-owany.</li>
<li>Obiektu w cache jest uznawany za świeży, jeśli posiada informacje o okresie świeżości i ten okres nie minął.</li>
<li>Jeśli obiekt nie jest uznany za świeży,  revProxy odwoła się do serwera WWW i pobierze nową wersję obiektu, lub oznaczy obiekt jako niezmieniony i nadal świeży.</li>
</ul>
<p>W przypadku, gdy obiekt nie zawiera informacji o walidacji (nagłówek ETag lub Last-Modified) oraz nie posiada dokładnego określenia co do swojego okresu ważności, w większości przypadków taki obiekt zostanie uznany za nie cache-owalny. Określenie świeżości obiektu oraz informacji o jego walidacji stanowią podstawę przy wdrażaniu revProxy do serwisu WWW.</p>
<p><strong>Jak sterować revProxy z poziomu serwisu WWW?</strong></p>
<ul>
<li><strong>Meta tag w HTML</strong></li>
</ul>
<p>Informacje zawarte w treści obiektu HTTP z pewnością nie wpłyną na działanie revProxy, ponieważ tylko nagłówki są brane pod uwagę. Meta tagi mogą być przydatne do kontroli cache w przeglądarce, ale to też nie we wszystkich przeglądarkach. <em>Nie należy stosować tej metody do sterowania działaniem revProxy</em></p>
<ul>
<li><strong>Nagłówek odpowiedzi &#8216;Pragma&#8217; dla HTTP 1.0<br />
</strong></li>
</ul>
<p>W sieci można znaleźć porady, aby stosować nagłówek HTTP &#8216;Pragma: no-cache&#8217;, aby zabezpieczyć obiekt przed cache-owaniem.  Ta metoda kontroli nad cache była stosowana za czasów protokołu HTTP 1.0 . Można oczywiście używać tego nagłówka jako dodatkowego, ale dobrze administrowany serwer revProxy będzie używał protokołu HTTP 1.1 i ten nagłówek będzie zbędny, oraz może prowadzić do problemów w przypadku rozbieżności w ustawieniach pozostałych nagłówków. <em>Nie zalecamy stosowania nagłówków Pragma.</em></p>
<ul>
<li><strong>Nagłówek odpowiedzi &#8216;Expires&#8217; dla HTTP 1.0<br />
</strong></li>
</ul>
<p>Nagłówek ten wysłany z serwera WWW jest jednym ze sposobów na sterowaniem walidacją obiektów w revProxy. Przykład nagłówka:</p>
<blockquote><p>Expires: Fri, 30 Oct 2011 14:19:41 GMT</p></blockquote>
<p>Jak widać, nagłówek przyjmuje wartość daty (koniecznie w formacie GMT), zatem idealnie nadaje się do ustalenia ważności obiektu jako konkretny moment w czasie. Ponieważ nagłówek pochodzi z czasów HTTP 1.0, <em>nie zalecamy stosowania tego nagłówka.</em></p>
<ul>
<li><strong>Nagłówek odpowiedzi &#8216;Cache-Control&#8217; dla HTTP 1.1<br />
</strong></li>
</ul>
<p>Od momentu pojawienia się standardu HTTP 1.1, pojawiła się o wiele bardziej elastyczna metoda na kontrolę revProxy, w postaci tego nagłówka. Przykład:</p>
<blockquote><p>Cache-Control: max-age=3600, must-revalidate</p></blockquote>
<p>Poniżej kilka przydatnych opcji wartości nagłówka:</p>
<ul>
<li style="text-align: left;"><strong>max-age=</strong>(sekundy). Określa maksymalną ilość czasu, dla którego dany obiekt będzie świeży. Funkcjonalność podobna do nagłówka &#8216;Expires&#8217;, z tą jednak różnicą, że tu podajemy ilość sekund a nie moment w czasie.</li>
<li style="text-align: left;"><strong>s-max-age=</strong>(sekundy). Opcja podobna do max-age, jednak odnosi się wyłącznie do wspólnych (shared) cache, jak np revProxy, ale już nie do prywatnych (private) jak np. cache przeglądarki konkretnego użytkownika.</li>
<li style="text-align: left;"><strong>public</strong>. Użycie tej opcji informuje revProxy o tym, że może cache-ować dany obiekt, nawet jeśli klient został zautoryzowany. Jeśli np. mamy do czynienia ze stroną, do której należy się zalogować, revProxy standardowo nie zachowa tej strony. Przy użyciu tej opcji, revProxy zachowa taką stronę w cache.</li>
<li style="text-align: left;"><strong>private</strong>. Ta opcja powoduje, iż obiekt jest przeznaczony wyłącznie dla danego użytkownika i będzie mógł zostać zapisany w cache przeglądarki danego użytkownika, natomiast nie może on zostać zapamiętany w revProxy i dostępny dla wszystkich.</li>
<li style="text-align: left;"><strong>no-cache</strong>. Użycie tej opcji powoduje wymuszenie w revProxy sprawdzenia obiektu na serwerze revProxy, za każdym razem. Jeśli obiekt przechodzi walidację (pobrany z serwera WWW jest taki sam jak w cache), to klient otrzymuje kopię bez pobierania z revProxy, a w przeciwnym razie obiekt zostanie w całości pobrany z serwera WWW.</li>
<li style="text-align: left;"><strong>no-store</strong>. Ta opcja wyłącza całkowicie jakiekolwiek przechowywanie obiektu w cache i powoduje za każdym razem pobranie obiektu od serwera WWW przez revProxy do klienta.</li>
<li style="text-align: left;"><strong>must-revalidate</strong>. Dzięki tej opcji, można wymusić, aby obiekt który stracił ważność, bezwzględnie został odświeżony z serwera WWW. Serwer revProxy może w szczególnych przypadkach przesłać obiekt, który stracił ważność (np w przypadku problemu ze skontaktowaniem się z serwerem WWW).</li>
</ul>
<p>Zbiór wszystkich nagłówków i opcji jest określony <a title="HTTP 1.1 Specification" href="http://www.ietf.org/rfc/rfc2616.txt" target="_blank">w dokumencie RFC</a> na temat specyfikacji protokołu HTTP 1.1</p>
<ul>
<li><strong>Nagłówek odpowiedzi &#8216;Vary&#8217; dla HTTP 1.1<br />
</strong></li>
</ul>
<p>Nagłówek ten jest wymagany do poprawnego funkcjonowania mechanizmów revProxy. Określa on inne nagłówki, których wartości stanowią kryteria dla wyboru wersji obiektu. Minimalną wartością dla nagłówka &#8216;Vary&#8217; jest : Accept-Encoding, aby rozróżnić wersję obiektu, który jest np. skompresowany i nie skompresowany. Nie należy podawać nadmiernej ilości nagłówków, ponieważ prowadzi to do przeciążenia revProxy identycznymi obiektami w wielu instancjach (np. ten sam obrazek, ale przechowywany w cache dla każdej wartości nagłówka User-Agent).</p>
<ul>
<li><strong>Walidacja obiektów</strong></li>
</ul>
<p>Proces, podczas którego revProxy sprawdza, czy obiekt w jego cache jest taki sam jak na serwerze WWW, nazywa się właśnie walidacją. Jeśli walidacja się powiedzie, revProxy nie musi pobierać całego obiektu od serwera WWW. Zapewnienie możliwości walidacji jest niezmiernie ważnym elementem podczas dostosowywania serwisu WWW do możliwości skorzystania z revProxy. Popularnym walidatorem jest nagłówek odpowiedzi HTTP &#8216;Last-Modified&#8217;.  Podobnie jak &#8216;Expires&#8217;, określa moment w czasie, gdy obiekt został zmodyfikowany. Jeśli data &#8216;Last-Modified&#8217; jest późniejsza niż data w której obiekt został pobrany z serwera WWW, obiekt nie przechodzi walidacji i jest pobierany w całości ze źródłowego serwera WWW.</p>
<p>Protokół HTTP 1.1 zdefiniował nowy nagłówek odpowiedzi &#8211; &#8216;ETag&#8217;. Wartość tego nagłówka jest identyfikatorem jednoznacznie określającym wersję obiektu (zawartość obiektu, czas modyfikacji, etc).</p>
<p><strong>Jak sprawdzić nagłówki z mojej strony WWW?</strong></p>
<p>Doskonałym serwisem, który umożliwia sprawdzenie nagłówki oraz ich interpretację jest <a title="REDbot" href="http://redbot.org/" target="_blank">REDbot.org</a>.</p>
<p>Powodzenia przy dostosowywaniu swojej strony WWW <img src='http://techblog.innervision.pl/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://techblog.innervision.pl/2011/04/19/revproxy-czyli-jak-zoptymalizowac-serwis-www/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MySQL vs PostgreSQL vs SQLite</title>
		<link>http://techblog.innervision.pl/2010/08/29/mysql-vs-postgresql-vs-sqlite/</link>
		<comments>http://techblog.innervision.pl/2010/08/29/mysql-vs-postgresql-vs-sqlite/#comments</comments>
		<pubDate>Sun, 29 Aug 2010 14:49:47 +0000</pubDate>
		<dc:creator>Piotr Rybicki</dc:creator>
				<category><![CDATA[Technikalia]]></category>
		<category><![CDATA[bazy danych]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[porady]]></category>
		<category><![CDATA[postgresql]]></category>
		<category><![CDATA[RDBMS]]></category>
		<category><![CDATA[sqlite]]></category>

		<guid isPermaLink="false">http://techblog.innervision.pl/?p=151</guid>
		<description><![CDATA[Na rynku darmowych, SQL-owych  systemów bazodanowych, mamy trzech głównych graczy (firebird-a pomijamy): MySQL, PostgreSQL oraz SQLite. Co je charakteryzuje i czym się różnią? Który z nich wybrać? W sieci można znaleźć dużo testów porównujących wydajność, które swoją drogą, są już nieaktualne lub mierzą jeden konkretny przypadek mający się nijak do środowiska pracy rzeczywistej. Nie będziemy [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://techblog.innervision.pl/wp-content/uploads/2010/03/bmw_competition.jpg"><img class="alignleft size-thumbnail wp-image-153" title="bmw_competition" src="http://techblog.innervision.pl/wp-content/uploads/2010/03/bmw_competition-150x150.jpg" alt="Competition" width="150" height="150" /></a> Na rynku darmowych, SQL-owych  systemów bazodanowych, mamy trzech głównych graczy (firebird-a pomijamy): <a href="http://www.mysql.com" target="_blank">MySQL</a>, <a href="http://www.postgresql.org" target="_blank">PostgreSQL</a> oraz <a href="http://www.sqlite.org" target="_blank">SQLite</a>. Co je charakteryzuje i czym się różnią? Który z nich wybrać? W sieci można znaleźć dużo testów porównujących wydajność, które swoją drogą, są już nieaktualne lub mierzą jeden konkretny przypadek mający się nijak do środowiska pracy rzeczywistej.</p>
<p>Nie będziemy skupiać się na przykładach i testach syntetycznych prowadzących do wniosków, że baza X jest lepsza, bo zapytanie Y działa tam najszybciej, gdyż takie podejście jest mylne. Naszą intencją jest przedstawienie systemów bazodanowych w szerszej  perspektywie.</p>
<h2><strong>MySQL</strong></h2>
<p>Pierwsza wersja tego systemu została wydana 23 maja 1995 roku przez zespół fińskich i szwedzkich programistów.  Została powołana firma MYSQL AB, gdzie rozwijano projekt. Przedsiębiorstwo było jednym z największych przedsięwzięć w sektorze rozwiązań typu open-source na skalę światową. W lutym 2008 roku firma zostaje kupiona przez Sun Microsystems, a w styczniu 2010 roku firma Oracle wykupiła Sun. Przyszłość MySQL wydaje się być niejasna, jednak warto mieć na uwadze projekty poboczne: <a href="http://drizzle.org/" target="_blank">Drizzle</a> oraz <a href="http://askmonty.org/wiki/MariaDB" target="_blank">MariaDB</a>.</p>
<p>MySQL obsługuje indeksy typu przestrzennego, widoki, triggery, procedury, tabele w pamięci. Ma replikację na poziomie zapytań  i wierszy. Posiada interfejs plugin-ów umożliwiający  podłączanie dowolnych funkcjonalności.</p>
<p>Istotną cechą wyróżniającą ten system, jest bogaty wybór tzw. <em>storage engine</em> nawet na poziomie konkretnej tabeli, co pozwala na szczegółowe dostosowanie systemu do konkretnych pożądanych cech środowiska bazodanowego. Poniżej krótka charakterystyka:</p>
<p>Memory:</p>
<ul>
<li>Brak transakcji</li>
<li>Indeksy: Hash, BTree</li>
<li>Przechowywanie w pamięci RAM</li>
<li>Buforowanie: nie dotyczy</li>
<li>Blokady na poziomie tabeli</li>
<li>Brak kluczy obcych</li>
<li>Uwagi: zawartość jest ulotna.</li>
</ul>
<p>MyISAM:</p>
<ul>
<li>Brak transakcji</li>
<li>Indeksy: BTree, RTree, FullText (możliwość spakowania poszczególnych indeksów w celu zmniejszenia zajmowanego miejsca, często prowadzi do przyspieszenia odczytu, ale spowalnia zapis)</li>
<li>Przechowywanie w plikach (osobno dane, osobno indeksy dla każdej tabeli)</li>
<li>Buforowanie: cache dla indeksów, dane poprzez cache systemu plików, istnieje możliwość wykorzystania indeksów pokrywających.</li>
<li>Blokady na poziomie tabeli, ale umożliwia współbieżne dopisywanie nowych rekordów (concurent Insert).</li>
<li>Brak kluczy obcych</li>
<li>Uwagi: możliwość spakowania całej tabeli w celu zmniejszenia zajmowanego miejsca (tabela tylko do odczytu).</li>
</ul>
<p>InnoDB:</p>
<ul>
<li>Obsługa transakcji (wiele poziomów izolacji), MVCC, ACID</li>
<li>Indeksy: BTree + Adaptive Hash Index</li>
<li>Przechowywanie, dane razem z indeksami, w plikach osobno dla każdej tabeli, wiele tabel w pliku (tzw. tablespace), bezpośrednio na urządzeniu blokowym (także jako table space).</li>
<li>Buforowanie: ujednolicony bufor stron dla danych, indeksów, metadanych oraz różnych wersji rekordów (MVCC).</li>
<li>Blokady na poziomie rekordu</li>
<li>Obsługa kluczy obcych</li>
<li>Uwagi: Dane i indeksy przechowywane są w postaci B-Drzewa, przez co zawsze musi istnieć klucz główny, jeśli nie jest stworzony jawnie InnoDB automatycznie utworzy ukryty. Pozostałe indeksy nie wskazują bezpośrednio na rekordy danych, ale na indeks główny.</li>
</ul>
<p>Archive:</p>
<ul>
<li>Brak transakcji</li>
<li>Brak indeksów (Zoptymalizowana pod kątem pełnego skanowania tabeli)</li>
<li>Przechowywanie: w postaci skompresowanego pliku</li>
<li>Buforowanie: cache systemu plików</li>
<li>Blokady na poziomie rekordu</li>
<li>Brak kluczy obcych</li>
<li>Uwagi: Umożliwia tylko wykonywanie operacji Insert i Select. Świetnie nadaje się do przechowywania danych statystycznych tam gdzie zwykle/zawsze operuje się na pełnym zbiorze.</li>
</ul>
<p>CSV:</p>
<ul>
<li>Brak transakcji</li>
<li>Brak indeksów</li>
<li>Przechowywanie: w postaci pliku CSV</li>
<li>Buforowanie: cache systemu plików</li>
<li>Brak blokad</li>
<li>Brak kluczy obcych</li>
<li>Uwagi:  Umożliwia użycie pliku z danymi w formacie CSV jako tabeli tylko do odczytu (select only) i wykonywanie na danych zapytań w języku SQL.</li>
</ul>
<p>Merge:</p>
<ul>
<li>Uwagi: Mechanizm umożliwiający połączenie kilku tabel MyISAM i traktowanie ich jako jednej. Ma wszystkie cechy MyISAM poza obsługą indeksów pełnotekstowych.</li>
</ul>
<p>Federated:</p>
<ul>
<li>Brak transakcji</li>
<li>Przechowywanie: zdalny serwer MySQL</li>
<li>Uwagi: umożliwia użycie tabel przechowywanych na zdalnych serwerach MySQL. Pozostałe cechy zależą od mechanizmu przechowywania tabel na zdalnym serwerze.</li>
</ul>
<p>NDB (cluster):</p>
<ul>
<li>Obsługa transakcji</li>
<li>Indeksy: Hash, BTree</li>
<li>Przechowywanie: zdalne i lokalne węzły klastra przechowują dane w RAM i okresowo zrzucają je na dysk</li>
<li>Buforowanie: pamięć podręczna kluczy i danych</li>
<li>Blokada na poziomie wiersza</li>
<li>Brak kluczy obcych</li>
<li>Uwagi: To bardzo zaawansowane rozwiązanie do specyficznych zastosowań. Obsługuje wewnętrzną synchroniczną replikację z dwufazowym zatwierdzaniem oraz partycjonowanie danych na bazie klucza podstawowego.</li>
</ul>
<p>Blackhole:</p>
<ul>
<li>Uwagi: Ten mechanizm nie przechowuje żadnych danych, jest użyteczny w niektórych scenariuszach replikacji.</li>
</ul>
<p>Istnieje również stworzony przez firmę Percona ulepszony engine na bazie InnoDB o nazwie XtraDB. Nie różni się on jednak podstawowymi funkcjonalnościami od pierwowzoru. Od wersji 5.1.33 dostępny jest także mechanizm IBMDB2I firmy IBM.</p>
<p>Do obsługi wielu połączeń, wykorzystywany jest mechanizm wątków.</p>
<p>MySQL&#8217;a można używać korzystając jednej z <a href="http://www.mysql.com/about/legal/licensing/oem/" target="_blank">licencji</a>: GPL lub komercyjnej.</p>
<h2><strong>PostgreSQL</strong></h2>
<p>Produkt ten wywodzi się z bazy Ingres &#8217;82, poprzez Postgres (nazwa pochodzi od Post-Ingres) &#8217;89, dalej Postgres95 posiadający język SQL zamiast QUEL, aby ostatecznie nazwać się PostgreSQL dla zaakcentowania zastosowania języka SQL &#8217;96.</p>
<p>System określany jest jako jeden z najbardziej zaawansowanych systemów bazodanowych i ciężko się z tym stwierdzeniem nie zgodzić. Oczywiście oprócz pełnej kompatybilności z ACID, oferuje szereg ogromnie rozbudowanych funkcjonalności:</p>
<ul>
<li><em>Typy danych</em>: oprócz popularnych, możemy operować na danych przestrzennych (spatial), a nawet definiować własne typy danych.</li>
<li><em>Indeksy</em>: możliwe są wszelkie kombinacje indeksów częściowych, funkcyjnych, wielokolumnowych czy pełnotekstowych.</li>
<li><em>Transakcje</em>: są integralną częścią systemu i pozwalają na zdefiniowanie różnych poziomów izolacji.</li>
<li><em>Język proceduralny</em>: mocno rozbudowany PL/pgSQL pozwala na oprogramowanie praktycznie każdej złożonej operacji na danych. Ponadto, możliwe jest tworzenie kodu w innym języku proceduralnym, jak np: PL/Perl czy PL/Python</li>
<li><em>Inne</em>: wielce funkcjonalne widoki (views), wyzwalacze (triggers), sekwencje</li>
</ul>
<p>Jedynie brak spójnego i zintegrowanego systemu wysokiej dostępności, rozłożenia obciążenia i replikacji nie pozwala zaliczyć tego systemu do rozwiązania klasy enterprise. Należy zaznaczyć, iż takie funkcjonalności istnieją, jednak za pośrednictwem rozwiązań zewnętrznych jak np. Slony-II, a natywna replikacja planowana jest na następne wydanie systemu.</p>
<p>Do obsługi wielu połączeń, wykorzystywany jest mechanizm rozwidlania procesów.</p>
<p>PostgreSQL używamy na podstawie własnej <a href="http://www.opensource.org/licenses/postgresql" target="_blank">licencji</a> tożsamej z licencją BSD czy MIT.</p>
<h2><strong>SQLite</strong></h2>
<p>System powstał w 2000 roku za sprawą  pracownika General Dynamics na zlecenie US Navy jako projekt mający zastąpić ówczesny system wykorzystywany na niszczycielach rakietowych. Nowy system był projektowany z myślą o braku konieczności skomplikowanej instalacji i zarządzania nim. Ponadto, zrezygnowano z architektury klient-serwer na rzecz biblioteki dołączanej do aplikacji, która dzięki swojemu API operuje na bazie na zasadzie dostępu do lokalnego pliku (podobnie jak np. <a href="http://en.wikipedia.org/wiki/Dbm" target="_blank">DBM</a>). W tym miejscu należy zaznaczyć, że baza spełnia warunki określane jako <a href="http://pl.wikipedia.org/wiki/ACID">ACID</a>.</p>
<p>Funkcjonalności bazy, jak na rozmiar jej biblioteki, jest bardzo duża: bogaty dialekt SQL, indeksy, transakcje.  Z racji prostej architektury i braku narzutu zdalnej komunikacji, jest również bardzo szybka. Nie nadaje się jednak jako główny system bazodanowy w środowiskach kilku serwerów. Doskonale się natomiast sprawdza w systemach typu embedded (np. <a href="http://pl.wikipedia.org/wiki/Android_%28platforma%29" target="_blank">Android</a>), czy jako rozwiązania wspomagające (np <a href="http://pl.wikipedia.org/wiki/Portage_%28program%29" target="_blank">portage</a>). Niewiele osób ma świadomość,  że  SQLite wykorzystywany jest przez Firefox-a i Thunderbird-a.</p>
<p>Do obsługi wielu połączeń, wykorzystywany jest mechanizm blokady dostępu do lokalnego pliku &#8211; bazy danych.</p>
<p>z SQLite korzystamy na podstawie licencji <a href="http://pl.wikipedia.org/wiki/Domena_publiczna" target="_blank">Public Domain</a></p>
<h2><strong>Podsumowanie</strong></h2>
<p>Wybór SQLite nad pozostałymi systemami jest dość prosty, gdy mamy bardzo konkretne zastosowanie. Z pozostałymi systemami wybór nie jest już tak oczywisty. Należy wziąć pod uwagę kwestie licencji, jakich funkcjonalności będziemy potrzebowali i z jakim systemem czujemy się najbardziej komfortowo pod względem obsługi. Nie należy natomiast ślepo kierować się opiniami o lepszej wydajności, gdyż te opinie prawie zawsze odnoszą się do konkretnych przypadków &#8211; niekoniecznie naszych. Miejmy również na uwadze fakt, iż wymienione projekty są aktywnie rozwijane, zatem lista funkcjonalności dla każdego z nich stale się powiększa.</p>
]]></content:encoded>
			<wfw:commentRss>http://techblog.innervision.pl/2010/08/29/mysql-vs-postgresql-vs-sqlite/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Internet &#8211; jak to działa</title>
		<link>http://techblog.innervision.pl/2010/02/13/internet-jak-to-dziala/</link>
		<comments>http://techblog.innervision.pl/2010/02/13/internet-jak-to-dziala/#comments</comments>
		<pubDate>Fri, 12 Feb 2010 23:00:29 +0000</pubDate>
		<dc:creator>Piotr Rybicki</dc:creator>
				<category><![CDATA[Technikalia]]></category>
		<category><![CDATA[domeny]]></category>
		<category><![CDATA[internet]]></category>
		<category><![CDATA[ip]]></category>
		<category><![CDATA[network]]></category>
		<category><![CDATA[ripe]]></category>
		<category><![CDATA[routing]]></category>

		<guid isPermaLink="false">http://techblog.innervision.pl/?p=113</guid>
		<description><![CDATA[Każdy na pewno zastanawiał się jak działa Internet. Z grubsza wiadomo że są: routery, adresy IP, nazwy domenowe, ale jak to jest że Internet działa na skalę światową? Poniższy wpis ma charakter opisowo-poglądowy, gdyż dokładne opisanie tego zjawiska to temat na co najmniej rozprawę doktorską, a nie oto nam chodzi. Geneza: W roku 1967,  Amerykańska [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://techblog.innervision.pl/wp-content/uploads/2010/02/telia01_eu.gif"><img class="alignleft size-thumbnail wp-image-118" title="Internet" src="http://techblog.innervision.pl/wp-content/uploads/2010/02/telia01_eu-150x150.gif" alt="" width="150" height="150" /></a>Każdy na pewno zastanawiał się jak działa Internet. Z grubsza wiadomo że są: routery, adresy IP, nazwy domenowe, ale jak to jest że Internet działa na skalę światową? Poniższy wpis ma charakter opisowo-poglądowy, gdyż dokładne opisanie tego zjawiska to temat na co najmniej rozprawę doktorską, a nie oto nam chodzi.</p>
<p><strong>Geneza:</strong></p>
<p>W roku 1967,  Amerykańska agencja militarna <a href="http://pl.wikipedia.org/wiki/Defense_Advanced_Research_Projects_Agency" target="_blank">DARPA</a> tworzy/finansuje powstanie sieci rozległej nazwanej <a href="http://pl.wikipedia.org/wiki/Advanced_Research_Projects_Agency_Network" target="_blank">ARPANET</a>. Środek okresu zimnej wojny i wielkiej rywalizacji technologicznej USA &#8211; ZSRR. Początkowo sieć ma charakter rządowo-militarno-naukowy, po czym w roku 1980 zostaje odseparowana część sieci, którą obecnie nazywamy Internetem. Warto zaznaczyć, iż nawet w czasach obecnych wiele kluczowych dla funkcjonowania sieci elementów działa pod kontrolą DARPA.</p>
<p><strong>Rozwój:</strong></p>
<p>Za rozwój technologii internetowej odpowiada powołana przez DARPA grupa naukowo badawcza <a href="http://en.wikipedia.org/wiki/Internet_Engineering_Task_Force" target="_blank">IETF</a>, która w obecnych czasach ma charakter nieformalny, otwarty dla każdego i ogólnoświatowy. Celem grupy jest opracowywanie standardów i wytycznych w postaci dokumentów <a href="http://pl.wikipedia.org/wiki/RFC" target="_blank">RFC</a>. Oficjalnie zatwierdzone RFC staje się wyznacznikiem dla producentów sprzętu i oprogramowania wykorzystujących sieć Internet.</p>
<p><strong>Adresy IP:</strong></p>
<p>Za adresy IP na samej górze odpowiada organizacja non-profit <a href="http://pl.wikipedia.org/wiki/ICANN" target="_blank">ICANN</a> (z siedzibą w Kalifornii), a właściwie jej autonomiczna część IANA, której  rząd Stanów Zjednoczonych przekazał czasowo prawo nadzoru nad  przydziałem adresów IP.  Świat zostaje podzielony na 5 regionów i odpowiadającym im organizacjom drugiego poziomu: <a href="http://en.wikipedia.org/wiki/AFRINIC" target="_blank">AfriNIC</a> (Afryka), <a href="http://en.wikipedia.org/wiki/APNIC" target="_blank">APNIC</a> (Azja-Pacyfik), <a href="http://en.wikipedia.org/wiki/American_Registry_for_Internet_Numbers" target="_blank">ARIN</a> (Ameryka  Północna), <a href="http://en.wikipedia.org/wiki/LACNIC" target="_blank">LACNIC</a> (Ameryka Południowa, Środkowa i Kariby), oraz <a href="http://pl.wikipedia.org/wiki/RIPE_NCC" target="_blank">RIPE NCC</a> (Europa, Bliski Wschód i Azja Środkowa) z siedzibą w Amsterdamie. Organizacje te bezpośrednio lub co jest częściej spotykane za  pośrednictwem dostawców internetu posiadających status <a href="http://en.wikipedia.org/wiki/Local_Internet_registry" target="_blank">LIR</a> (np. TP SA,  ATM, GTS), przydzielają adresy IP odbiorcom końcowym.</p>
<p>Odpowiedź na pytanie nie-do-końca pozbawione sensu &#8222;kto jest     właścicielem internetu&#8221;, powinna być teraz łatwiejsza <img src='http://techblog.innervision.pl/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p><strong>Trasowanie:</strong></p>
<p>Aby możliwa była komunikacja w Internecie, samo istnienie unikalnych adresów IP nie wystarczy &#8211; potrzebny jest jakiś mechanizm przekazujący informacje jak dotrzeć od jednego adresu IP do drugiego. Mechanizmem tym jest protokół routingu (w internecie &#8211; <a href="http://pl.wikipedia.org/wiki/BGP" target="_blank">BGP</a>), przekazujący informacje pomiędzy urządzeniami zwanymi routerami (w wielkim uproszczeniu np. aby dostać się z adresu A do B, należy przejść przez routery A-&gt;X1-&gt;X2-&gt;X3-&gt;B).  Dostawcy internetu tworzą lub podłączają się do różnych punktów wymiany ruchu sobą, zwanych <a href="http://pl.wikipedia.org/wiki/Internet_Exchange_Point" target="_blank">IXP</a> (pomieszczenie techniczne z dużą ilością kabli i routerów).</p>
<p>Warto mieć na uwadze fakt, iż połączenie pomiędzy dwoma punktami (w uproszczeniu adresami IP) w tym samym mieście, może odbywać się przez IXP  w bardzo odległej lokacji geograficznej. Pomimo iż nie ma to uzasadnienia technicznego, to takie połączenie może być tańsze dla dostawców internetowych.</p>
<p><strong>Nazwy domenowe:</strong></p>
<p>Dla przeciętnego człowieka, używanie adresów IP w praktyce jest nieakceptowalne: wyobraźmy sobie np zamiast wpisywania http://www.allegro.pl -  http://193.23.48.134/ <img src='http://techblog.innervision.pl/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> .  Dlatego właśnie wymyślono domeny i system zamiany adresów domenowych na adresy IP (<a href="http://pl.wikipedia.org/wiki/DNS" target="_blank">DNS</a>).  Nazwy domenowe zostały sklasyfikowane na różne poziomy: najwyższy  (np .pl &#8211; Polska) i niższe (np edu.pl &#8211; edukacyjna,  gov.pl &#8211; rządowa, waw.pl &#8211; regionalna). Na samej górze serwerów nazw są tzw. <a href="http://en.wikipedia.org/wiki/Root_nameserver" target="_blank">root nameservers</a> (w większości znajdują się w Stanach Zjednoczonych), które przechowują między innymi (na obecną chwilę) 248 dwuliterowych <a href="http://pl.wikipedia.org/wiki/Krajowa_domena_najwy%C5%BCszego_poziomu" target="_blank">domen najwyższego poziomu</a>.</p>
<p>Jako że nie ma przymusu stosowania zaproponowanej klasyfikacji, można sobie zarejestrować domenę np moje<a href="http://pl.wikipedia.org/wiki/.tv" target="_blank">.tv</a> co tak naprawdę technicznie jest domeną regionalną wysp Tuvalu <img src='http://techblog.innervision.pl/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  .</p>
<p>W Polsce głównym rejestratorem nazw domenowych jest <a href="http://pl.wikipedia.org/wiki/NASK" target="_blank">NASK</a>, a inne podmioty działają na mocy porozumienia z NASK.</p>
<p><strong>Filtrowanie/cenzura internetu:</strong></p>
<p>Firmy często decydują się na ograniczanie dostępu do internetu ze względu na swoją politykę bezpieczeństwa. Oprócz blokowania, często zbiera się informacje kto i kiedy przegląda jakie strony itp. O ile przedsiębiorstwo samo decyduje o swojej polityce, to 100% cenzura na skalę krajową jest <span style="text-decoration: underline;">TECHNICZNIE NIEMOŻLIWA!</span> Istnieje szereg mechanizmów szyfrujących transmisję lub tunelujących połączenia, które skutecznie obejdą wszelkie zabezpieczenia. Z technicznego punktu widzenia, aby skutecznie kontrolować przepływ informacji w Internecie, należałoby odciąć wszystkie połączenia ze światem w Polsce (wliczając np. połączenia satelitarne), co wydaje się również NIEMOŻLIWE!</p>
<p>Możliwe jednak jest wprowadzenie przepisów prawnych np. ograniczających siłę szyfrowania (jak np w <a href="http://en.wikipedia.org/wiki/Export_of_cryptography_in_the_United_States" target="_blank">USA</a>) i wtedy oczywiście obejście zabezpieczeń będzie technicznie nadal możliwe, jednak obwarowane sankcjami prawnymi.</p>
]]></content:encoded>
			<wfw:commentRss>http://techblog.innervision.pl/2010/02/13/internet-jak-to-dziala/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Optymalizacja aplikacji PHP pod kątem środowiska klastrowego i wydajności</title>
		<link>http://techblog.innervision.pl/2010/01/13/optymalizacja-aplikacji-php-pod-katem-srodowiska-klastrowego/</link>
		<comments>http://techblog.innervision.pl/2010/01/13/optymalizacja-aplikacji-php-pod-katem-srodowiska-klastrowego/#comments</comments>
		<pubDate>Tue, 12 Jan 2010 23:00:50 +0000</pubDate>
		<dc:creator>Piotr Rybicki</dc:creator>
				<category><![CDATA[Technikalia]]></category>
		<category><![CDATA[hosting]]></category>
		<category><![CDATA[klastry]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[porady]]></category>

		<guid isPermaLink="false">http://techblog.innervision.pl/?p=95</guid>
		<description><![CDATA[Aplikacje, aby mogły funkcjonować w środowisku klastrowym, muszą spełniać pewne warunki. Mając świadomość jak funkcjonuje klaster serwerów, warto również stosować tzw. dobre praktyki, aby uzyskać najlepsze efekty i uniknąć błędów podczas użytkowania. W tym wpisie postaramy się przybliżyć temat w oparciu o aplikacje napisane w PHP. Przez klaster rozumiemy infrastrukturę, która umożliwia jednoczesne działanie aplikacji [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://techblog.innervision.pl/wp-content/uploads/2010/01/transam_burnout.jpg"><img class="alignleft size-thumbnail wp-image-99" title="transam_burnout" src="http://techblog.innervision.pl/wp-content/uploads/2010/01/transam_burnout-150x150.jpg" alt="" width="150" height="150" /></a>Aplikacje, aby mogły funkcjonować w środowisku klastrowym, muszą spełniać pewne warunki. Mając świadomość jak funkcjonuje klaster serwerów, warto również stosować tzw. dobre praktyki, aby uzyskać najlepsze efekty i uniknąć błędów podczas użytkowania. W tym wpisie postaramy się przybliżyć temat w oparciu o aplikacje napisane w <a href="http://www.php.net" target="_blank">PHP</a>.</p>
<p>Przez klaster rozumiemy infrastrukturę, która umożliwia jednoczesne działanie aplikacji z kilku serwerów, przy czym awaria któregokolwiek z nich nie powoduje awarii całej infrastruktury.</p>
<p>Podstawowym warunkiem takiej infrastruktury jest wspólna przestrzeń dyskowa dla każdego serwera. Fakt ten prowadzi do wniosku, że należy oszczędzać operacje wejścia/wyjścia na takiej przestrzeni. Operacje odczytu przeważnie są buforowane i nie wpływają tak znacząco jak operacje zapisu. Należy zatem ograniczyć wszystkie możliwe operacje zapisu do minimum. Tymczasowe pliki być może lepiej przechowywać na lokalnym serwerze klastra, lub jeszcze lepiej na ramdysku serwera. To pozwoli nam na uniknięcie problemu &#8216;wąskiego gardła&#8217; w obszarze wydajności wspólnej przestrzeni dyskowej.</p>
<p>Pliki sesji można przechowywać na wiele sposobów: na lokalnym systemie plików, w bazie danych, w serwerze cache<a href="http://memcached.org/" target="_blank"></a>. Lokalny czy też wspólny system plików odpada ze względu na wydajność. Baza danych jest już lepszym rozwiązaniem, lecz najlepsze efekty uzyskamy stosując serwer cache. Wdrażając to ostatnie, uzyskujemy wspólną usługę do przechowywania sesji, która jest najbardziej wydajna i w dodatku posiada mechanizmy do automatycznego zarządzania przeterminowanymi sesjami.</p>
<p>Dobrą praktyką jest wydzielenie treści statycznej od dynamicznej. To pozwala nam na zastosowanie odrębnych serwerów WWW, przystosowanych do odpowiedniej treści. Mając do dyspozycji skalowalny klaster, możemy spokojnie przerzucić funkcjonalność kompresji dynamicznej zawartości z PHP na odpowiedni serwer WWW, który zrobi to &#8216;w locie&#8217;, a treść statyczna może zostać skompresowana automatycznie i jednorazowo. Użycie kompresji pozwala nam zaoszczędzić na przepustowości internetowej i sprawia, że końcowy użytkownik wyraźnie odczuwa krótsze ładowanie stron i szybszą responsywność na kliknięcia.</p>
<p>Dla uniknięcia przeciążenia serwerów baz danych, stosuje się mechanizm buforowania wyników zapytania, które nie zmieniają się często. Klasyfikacja takich zapytań jest ściśle związana z budową aplikacji. Dodatkowo dla usprawnienia wyszukiwarek zaimplementowanych w aplikacji, stosuje się specjalne serwery indeksacji danych. Zastosowanie tych technologii w odczuwalny sposób poprawiają wydajność baz danych i tym samym aplikacji.</p>
<p>Stosując powyższe praktyki, nasza aplikacja będzie przygotowana na naprawdę duże obciążenie i unikniemy efektu &#8216;pana gąbki&#8217; z serwisu nasza-klasa.pl</p>
]]></content:encoded>
			<wfw:commentRss>http://techblog.innervision.pl/2010/01/13/optymalizacja-aplikacji-php-pod-katem-srodowiska-klastrowego/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Infrastruktura informatyczna &#8211; na co się zdecydować?</title>
		<link>http://techblog.innervision.pl/2009/12/13/infrastruktura-informatyczna-na-co-sie-zdecydowac/</link>
		<comments>http://techblog.innervision.pl/2009/12/13/infrastruktura-informatyczna-na-co-sie-zdecydowac/#comments</comments>
		<pubDate>Sat, 12 Dec 2009 23:00:03 +0000</pubDate>
		<dc:creator>Piotr Rybicki</dc:creator>
				<category><![CDATA[Technikalia]]></category>
		<category><![CDATA[hosting]]></category>
		<category><![CDATA[klastry]]></category>
		<category><![CDATA[kolokacja]]></category>
		<category><![CDATA[porady]]></category>
		<category><![CDATA[serwer wirtualny]]></category>
		<category><![CDATA[VPS]]></category>

		<guid isPermaLink="false">http://techblog.innervision.pl/?p=67</guid>
		<description><![CDATA[Na rynku dostępny jest szeroki wachlarz usług zapewniających infrastrukturę pod projekty informatyczne. Hosting współdzielony, VPS, RPS, kolokacja własnego serwera, klastry różnego typu. Jakiej infrastruktury potrzebuję? Na co zwrócić uwagę? Poniżej postaramy się odpowiedzieć na te pytania. Hosting współdzielony jest doskonałą infrastrukturą, jeśli chcemy mieć stronę np. o unikatowych znaczkach wujka, albo o naszym ukochanym kocie [...]]]></description>
			<content:encoded><![CDATA[<p><img class="size-thumbnail wp-image-69 alignleft" title="data_center" src="http://techblog.innervision.pl/wp-content/uploads/2009/11/data_center-150x150.jpg" alt="data_center" width="150" height="150" /></p>
<p>Na rynku dostępny jest szeroki wachlarz usług zapewniających infrastrukturę pod projekty informatyczne. Hosting współdzielony, <a title="Virtual Private Server" href="http://pl.wikipedia.org/wiki/Virtual_Private_Server" target="_blank">VPS</a>, <a href="http://www.ovh.pl/produkty/dzialanie_rps.xml" target="_blank">RPS</a>, kolokacja własnego serwera, klastry różnego typu. Jakiej infrastruktury potrzebuję? Na co zwrócić uwagę? Poniżej postaramy się odpowiedzieć na te pytania.</p>
<p><strong>Hosting współdzielony</strong> jest doskonałą infrastrukturą, jeśli chcemy mieć stronę np. o unikatowych znaczkach wujka, albo o naszym ukochanym kocie Filemonie. Nie mamy zapewnionej żadnej gwarancji oraz redundancji usługi, a na dodatek, jeśli któryś z naszych współ-hostingowych sąsiadów na serwerze zaszaleje z jakimś skryptem PHP (np. postanowi za każdym odwołaniem indeksować cały internet), to cały serwer ma problem &#8211; a my z nim. Warto mieć tego świadomość, aby się nie rozczarować.</p>
<p><strong>Serwer wirtualny</strong> jest idealnym rozwiązaniem na utrzymywanie serwisów, przy których wolelibyśmy aby nikt inny nie mógł wpłynąć na wydajność naszej infrastruktury. Istnieją firmy, które oferują taką usługę z <span style="text-decoration: underline;">gwarantowanymi</span> parametrami CPU, RAM i HDD &#8211; należy na to zwrócić szczególną uwagę, aby nie mieć problemu jak przy hostingu współdzielonym. Aby mieć pewność co do parametrów, warto przeprowadzić kilka testów, które wykażą faktyczną wydajność. Taka usługa jest również doskonałą platformą <span style="text-decoration: underline;">startową</span> dla serwisów przy których zależy nam na gwarancji. Ponosimy niskie koszty utrzymania w porównaniu z infrastrukturą bardziej zaawansowaną, a w przypadku sukcesu, można zwiększyć gwarantowaną wydajność.  Nawet jeśli okaże się, że serwis nagle zyskał wysoką popularność, można szybko zwiększyć wydajność poprzez przydzielenie dodatkowej pamięci RAM czy dodatkowe CPU, co daje nam spokój na czas trwania kampanii, a jeśli popularność ciągle rośnie, mamy czas na przesiadkę na odpowiednią infrastrukturę. W konfrontacji z Hostingiem Współdzielonym, tutaj mamy jeszcze tą zaletę, że możemy mieć zainstalowane dowolne oprogramowanie które jest nam potrzebne, oraz konto <em>root</em> (Administratora).</p>
<p><strong>Kolokacja własnego serwera</strong> jest w zasadzie na podobnym poziomie jakości jak Serwer Wirtualny, jednak jest rozwiązaniem droższym i trudniejszym w utrzymaniu. Jeśli np. zdarzy się awaria dysku na naszym serwerze &#8211; musimy się tym zając, a w przypadku Serwera Wirtualnego &#8211; zajmuje się już tym firma hostingowa. Tak samo jest ze zwiększaniem wydajności: jeśli będzie potrzeba dołożenia pamięci, czy wymiana procesora na wydajniejszy/dołożenie kolejnego procesora (o ile istnieją takie możliwości techniczne), musimy się tym zająć.</p>
<p><strong>Rozwiązanie klastrowe</strong> jest rozwiązaniem najwyższej klasy jeśli chodzi o infrastrukturę. Posiadamy własne, dedykowane rozwiązanie, a w dodatku odporne na awarię pojedynczego serwera. Istnieją różne rodzaje klastrów pod aplikacje internetowe: od prostych klastrów z 2 serwerów, po potężne systemy w pełni skalowalne. Typ klastra w dużej mierze zależy od naszych oczekiwań co do skalowalności.</p>
<p>Podczas rozważania ofert firm, warto zwrócić uwagę na tzw. usługi dodatkowe, jak np:</p>
<ul>
<li>backup (czy automatyczny, jaka retencja danych)</li>
<li>monitoring (podłączenie do systemu analizowania i powiadamiania w razie awarii usługi lub serwera)</li>
<li>analiza wydajności (wykresy z pracy różnych obszarów systemu operacyjnego oraz usług &#8211; bez tego analiza problemu często przypomina bardziej  zgadywankę)</li>
<li>zakres prac administratorskich  (czy administrator maksymalnie zrestartuje nam serwer, czy np będzie w stanie analizować problemy i instalować/konfigurować dla nas oprogramowanie</li>
</ul>
<p>Istotne również jest umiejscowienie centrum danych dla naszej infrastruktury. Zagraniczne oferty kuszą swoją ceną, jednak jakość połączenia internetowego z takimi serwerami często pozostawia wiele do życzenia. Wystarczy sprawdzić czasy odpowiedzi z polecenia &#8216;ping&#8217; i obejrzeć trasę poleceniem np. &#8216;mtr&#8217; aby się przekonać. Firmy hostingowe często chwalą się wysoką wydajnością, bezpieczeństwem i fachową opieką. Warto sprawdzić, czy nie są to tylko puste &#8216;marketingowe&#8217; hasła reklamowe i zapytać co w przypadku np awarii jednego switcha, routera, oraz jak zostałby rozwiązany problem nagłego zapotrzebowania na wydajność przekraczającą możliwości obecnej platformy.</p>
<p>Mamy nadzieję, iż dzięki tej publikacji, wybór infrastruktury stanie się bardziej świadomy.</p>
]]></content:encoded>
			<wfw:commentRss>http://techblog.innervision.pl/2009/12/13/infrastruktura-informatyczna-na-co-sie-zdecydowac/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Load Average &#8211; o co chodzi?</title>
		<link>http://techblog.innervision.pl/2009/11/13/load-average-o-co-chodzi/</link>
		<comments>http://techblog.innervision.pl/2009/11/13/load-average-o-co-chodzi/#comments</comments>
		<pubDate>Thu, 12 Nov 2009 23:00:47 +0000</pubDate>
		<dc:creator>Piotr Rybicki</dc:creator>
				<category><![CDATA[Technikalia]]></category>
		<category><![CDATA[freebsd]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[system operacyjny]]></category>
		<category><![CDATA[tuning]]></category>

		<guid isPermaLink="false">http://techblog.innervision.pl/?p=39</guid>
		<description><![CDATA[W mojej karierze zdarzyło mi się kilkakrotnie rozmawiać z kandydatami na stanowisko Linux/Unix admina. Szybko odkryłem, że odpowiedzi na pytanie &#8216;Co to jest Load Average&#8217; zaczynają być nie tyle nie trafione, co zabawne. Mało kto potrafił odpowiedzieć w taki sposób, żeby dało się wyczuć, że wie o czym mówi. Spróbuję więc wyjaśnić pokrótce co to [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-thumbnail wp-image-41" title="putty" src="http://techblog.innervision.pl/wp-content/uploads/2009/10/putty-150x150.PNG" alt="putty" width="150" height="150" />W mojej karierze zdarzyło mi się kilkakrotnie rozmawiać z kandydatami na stanowisko Linux/Unix admina. Szybko odkryłem, że odpowiedzi na pytanie &#8216;Co to jest Load Average&#8217; zaczynają być nie tyle nie trafione, co zabawne. Mało kto potrafił odpowiedzieć w taki sposób, żeby dało się wyczuć, że wie o czym mówi. Spróbuję więc wyjaśnić pokrótce co to jest.</p>
<p>Moja definicja tego parametru to: Średnia ilość procesów w kolejce do wykonania w okresie, odpowiednio 1, 5 i 15 minut. Innymi słowy, jest to miara obciążenia systemu procesami. Anglojęzyczni czytelnicy mogą również przeczytać definicję na <a href="http://en.wikipedia.org/wiki/Load_%28computing%29" target="_blank">wikipedii</a>.</p>
<p>Jak wiadomo, Unix jest systemem wielozadaniowym, czyli np. jest w stanie niby &#8216;jednocześnie&#8217; wykonywać kilka procesów. Jeśli tych procesów mamy kilka, to trafiają one do odpowiedniej kolejki (we FreeBSD nazywa się ona <em>runnable</em>) i stamtąd mechanizm zarządzania dostępem do zasobów (<em>sheduler</em>), decyduje który proces ma otrzymać czas procesora, a który ma czekać. Ilość procesów w tej kolejce mierzona jako średnia, w trzech wspomnianych okresach, jest właśnie wartością Load Average.</p>
<p>A co się dzieje w przypadku, gdy np. mamy kilka procesów, które chcą działać jednocześnie? To mi przypomina moje pytanie &#8216;pomocnicze&#8217; zadane jednemu z kandydatów:</p>
<ul>
<li>Ile procesów może działać jednocześnie na jednym procesorze, i do tego (jakby to miało jakiekolwiek znaczenie) 64 bitowym?</li>
<li>(chwila zastanowienia i pada odpowiedź) 1024!</li>
<li>Taaak? A dlaczego?</li>
<li>A nie, &#8230; (znów chwila zastanowienia): 4096!</li>
<li>Ok, przejdźmy do następnego pytania&#8230;</li>
</ul>
<p>Oczywiście nie da się na jednym procesorze (1 rdzeń, bez obsługi wielowątkowości i zakładamy że jest to &#8221;zwykły&#8217; procesor dla jasności) wykonywać jednocześnie kilku procesów. W danej chwili może działać co najwyżej jeden proces, a reszta czeka na swoją kolej.</p>
<p>Warto zdać sobie sprawę z faktu, że to, że proces istnieje w systemie, nie musi koniecznie oznaczać że ma on dostęp do zasobów (CPU). Weźmy np. uruchomiony proces serwera apache, wraz z procesami potomnymi. Jeśli nikt z niego nie korzysta, po prostu sobie jest, ale nic nie robi poza oczekiwaniem na żądania. Przykładowe procesy serwera nie znajdują się więc w kolejce do wykonania.</p>
<p>No dobrze, to teraz jaka wartość Load Averago to dużo? To oczywiście zależy ile mamy procesorów. Jeśli mamy 2 CPU a każdy po 4 rdzenie, to mamy w sumie tych rdzeni 8. W takim przypadku jeśli parametr LA dochodzi do wartości 8, to jest to wartość graniczna po której procesy nie będą działać optymalnie, ponieważ w danym przedziale czasu jest więcej procesów oczekujących na wykonanie niż dostępnych procesorów. Skutkiem tego będzie odbieranie dostępu do procesorów obecnie działającym procesom i przekazanie tego dostępu innym znajdującym się w kolejce do wykonania. Tak naprawdę, to trzeba jeszcze odliczyć trochę mocy na pracę samego systemu.</p>
<p>Na koniec ciekawostka: W Linuxie sprawa wygląda trochę inaczej niż we FreeBSD, a mianowicie proces który czeka na dane z podsystemu I/O też jest wliczany do  LA.  Z punktu widzenia procesu w Linuxie jest tak, że to przecież nie jego, tylko sytemu, wina że potrzebne do działania dane nie znajdują się jeszcze w pamięci i że gdyby nie to, to on już dawno jest gotowy do wykonania. Możemy zatem zaobserwować zjawisko, gdy procesor(y) będą nieobciążone, za to dyski będą skrzeczeć jak szalone i LA będzie wynosić 100, 200 a nawet więcej.</p>
]]></content:encoded>
			<wfw:commentRss>http://techblog.innervision.pl/2009/11/13/load-average-o-co-chodzi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Klaster wysokiej niezawodności i awarie</title>
		<link>http://techblog.innervision.pl/2009/10/13/klaster-ha-a-awarie/</link>
		<comments>http://techblog.innervision.pl/2009/10/13/klaster-ha-a-awarie/#comments</comments>
		<pubDate>Tue, 13 Oct 2009 12:04:42 +0000</pubDate>
		<dc:creator>Piotr Rybicki</dc:creator>
				<category><![CDATA[Z życia spółki]]></category>
		<category><![CDATA[klastry]]></category>
		<category><![CDATA[na wesoło]]></category>
		<category><![CDATA[seagate]]></category>

		<guid isPermaLink="false">http://techblog.innervision.pl/?p=7</guid>
		<description><![CDATA[Dzień w pracy jak co dzień. Poranna kawa, lektura wybranych kolumn rzepy, wymiana poglądów techniczno-politycznych z kolegami. Nagle na monitorze dostępności systemów pojawiają się informacje w kolorze czerwonym. Chwilę później SMS&#8217;y sypią się jednocześnie, chyba z 10 sztuk. Przestał odpowiadać serwer klienta. Ale chwila, czy teraz przypadkiem nie idzie kampania? Zaczyna być coraz ciekawiej. Jeszcze [...]]]></description>
			<content:encoded><![CDATA[<p><img class="size-thumbnail wp-image-6 alignleft" title="awaria klastra" src="http://techblog.innervision.pl/wp-content/uploads/2009/10/awaria_klaster-150x150.png" alt="Awaria klastra" width="150" height="150" /></p>
<div id="NewsPostDetailContent">
<p>Dzień w pracy jak co dzień. Poranna kawa, lektura wybranych kolumn rzepy, wymiana poglądów techniczno-politycznych z kolegami.</p>
<p>Nagle na monitorze dostępności systemów pojawiają się informacje w kolorze czerwonym. Chwilę później SMS&#8217;y sypią się jednocześnie, chyba z 10 sztuk. Przestał odpowiadać serwer klienta. Ale chwila, czy teraz przypadkiem nie idzie kampania? Zaczyna być coraz ciekawiej.</p>
<p>Jeszcze chwila i wszyscy wpadną w panikę. Jednak tak się nie dzieje &#8211; w systemie widać, że klient ma przecież klaster wysokiej dostępności. Sprawdzamy na monitorze stan usług &#8211; wszystkie funkcjonują nadal, tylko że teraz z jednego serwera a nie z obu. Ciągłość świadczenia usług jest zachowana.</p>
<p>Podłączamy się do zdalnej konsoli, aby zobaczyć na ekranie ostatnie komunikaty z systemu operacyjnego na uszkodzonym serwerze. System uznał, że wszystkie dyski zniknęły. Wszystkie 4 jednocześnie? Co tam się dzieje?</p>
<p>Restart maszyny, teraz już system nie widzi dysków. Nie ma rady, jedna grupa techników idzie zobaczyć co się dzieje. Okazuje się, iż faktycznie wszystkie dyski padły. Wydaje się to nieprawdopodobne, jednak jak się jeszcze później okazuje, firma Seagate zrobiła <a href="http://www.wykop.pl/link/131089/uwaga-masz-dysk-seagate-7200-11-masz-problem" target="_blank">psikusa</a> wypuszczając serię dysków z uszkodzonym firmware. Objawy, modele i wersje firmware dysków &#8211; wszystko niestety się zgadza.</p>
<p>Management bogatszy o tą wiedzę, powiadamia klienta o sytuacji. &#8222;Szanowni Państwo, macie teraz awarię jednego ze swoich serwerów&#8221;. Daje się wyczuć niepokój w rozmówcy. &#8222;Tak, wiem, że idzie teraz kampania &#8211; dzięki klastrowi, wszystko nadal działa&#8221; &#8211; uspokajamy, po czym wyjaśniamy co się stało z dyskami. Po wysłaniu mailem parametrów dysków, nie mijają 2 godziny jak otrzymujemy nowe dyski, już od innego producenta.</p>
<p>Pod koniec dnia roboczego, serwer jest już wyposażony w nowe dyski, dane są odzyskane z backupu, a klastrowe urządzenia blokowe &#8211; zsynchronizowane. Podejmujemy decyzję o rozłożeniu usług w klastrze na 2 serwery &#8211; tak jak miało to miejsce przed awarią.</p>
<p>Lepiej nie myśleć co byłoby, gdyby nie klaster&#8230;</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://techblog.innervision.pl/2009/10/13/klaster-ha-a-awarie/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

