Jak przyśpieszyć PHP...

Kategorie: Administracja, High Availability, Informatyczne, Techblog| 10 komentarzy 

Nie oszukujmy się... PHP jest wolne...

Powiedziałbym nawet, że w domyślnej konfiguracji jest bardzo wolne. W sumie nie jest to nic odkrywczego, prawda? W sumie nie wynika to z tego, że PHP jest kiepskim językiem programowania, po prostu jest to cecha języków interpretowanych. Każde wywołanie skryptu, powoduje jego załadowanie do pamięci, analizę, TYMCZASOWE skompilowanie do postaci bytecode'u, które musi być powtórzone przy każdym wywołaniu skryptu, wykonanie i zwolnienie pamięci, co w przeciwieństwie do języków kompilowanych, w których kod źródłowy tłumaczony jest jednorazowo na język maszynowy, który jest zapisywany i potem wykonywany, co znacząco przyśpiesza jego działanie.

Inna rzecz, że pisanie aplikacji web w C/C++/C#, czy innych językach kompilowanych nie jest zbyt wygodnym rozwiązaniem (chociaż w niektórych sytuacjach mogłoby być optymalne). PHP jest powolne, ale jest też wyjątkowo proste, z bogatym wyborem bibliotek i gotowych rozwiązań, a co za tym idzie łatwe w implementacji. Jest też BARDZO przenośne, co oznacza, że ten sam kod z reguły bez większych trudności da się uruchomić na innym serwerze (chociaż są tu wyjątki), a jeśli się nie uruchamia, to przeciętny programista szybko go naprawi. Rozwiązaniem problemu, jest uruchomienie na serwerze tzw. opcode cache, który optymalizuje skompilowany bytecode, po czym zapisuje go do pamięci i dodatkowo na dysk. Każde następne wykonanie skryptu, powoduje odwołanie się do zapisanego, skompilowanego już kodu, co pozwala przyśpieszyć działanie do 10 razy.

Instalacja
Proces instalacji przedstawię na przykładzie Debiana, natomiast przeciętny administrator będzie w stanie powtórzyć go na swojej ulubionej dystrybucji :-)

Przed instalacją eacceleratora, potrzebujemy zainstalować odpowiednie paczki:
apt-get install build-essential php5-dev

Potem ściągamy najnowszą (na dzień 11.04.2011) wersję eacceleratora, rozpakowujemy ją i wchodzimy do katalogu z kodem źródłowym:
wget http://bart.eaccelerator.net/source/0.9.6.1/eaccelerator-0.9.6.1.tar.bz2
tar xvfj eaccelerator-0.9.6.1.tar.bz2
cd eaccelerator-0.9.6.1


Następnie wykonujemy: phpize
./configure
make
make install


W tej chwili mamy już zainstalowanego go na dysku, a jedyne co nam pozostaje, to skonfigurować PHP, by z niego korzystało. Domyślnie w Debianie konfiguracja przechowywana jest w katalogu /etc/php5/conf.d i tam też tworzymy plik eaccelerator.ini, do którego,naszym ulubionym edytorem (ja wiem, że miłośnicy wielkiej wojny między vimem a emacsem mnie zjedzą, ale ja używam w tym celu nano) wklejamy co następuje:
extension="eaccelerator.so"
eaccelerator.shm_size="32"
eaccelerator.cache_dir="/var/cache/eaccelerator"
eaccelerator.enable="1"
eaccelerator.optimizer="1"
eaccelerator.check_mtime="1"
eaccelerator.debug="0"
eaccelerator.filter=""
eaccelerator.shm_max="0"
eaccelerator.shm_ttl="0"
eaccelerator.shm_prune_period="0"
eaccelerator.shm_only="0"
eaccelerator.compress="1"
eaccelerator.compress_level="9"


Najważniejsze dla nas są:
eaccelerator.shm_size="32" - która ustawia wielkość cache na 32MB (wystarczające dla mało obciążonych maszyn, jednakże można sobie spokojnie podnieść do 128-256MB), można też ustawić wartość "0", wtedy wielkość ta będzie ustalana automatycznie.
eaccelerator.cache_dir="/var/cache/eaccelerator - Katalog, w którym przechowywany na dysku jest opcode cache. Można sobie ustawić dowolny katalog, jednakże co najważniejsze, należy mu nadać odpowiednie uprawnienia:
mkdir /var/cache/eaccelerator
chown -R www-data:www-data /var/cache/eaccelerator
chmod 0770 /var/cache/eaccelerator


Tradycyjnie restart serwera WWW:
/etc/init.d/apache2 restart

Lub, jeśli używacie Nginxa z FPM-CGI (idealne rozwiązanie na małe maszyny, być może opiszę następnym razem, jeśli ktoś będzie reflektował):
/etc/init.d/php5-fpm restart

Sprawdzić czy działa możemy tworząc na serwerze plik test.php, wywołujący funkcję:
phpinfo();

Jeśli jest w nim info o eacceleratorze, oznacza to, że nasz opcode cache działa :-)

W razie pytań, chętnie pomogę :-)
Strona domowa eacceleratora: http://eaccelerator.net/



Open Compute, czyli Facebook udostępnia specyfikację swojego Datacenter :-)

Kategorie: Informatyczne, Ogólne, Techblog| 14 komentarzy 

Facebook tym razem zaskoczył sporą część świata IT, udostępniając na stronie http://opencompute.org kompletną specyfikację rozwiązań, na których opiera swoje Datacenter.
Serwery Open Compute nie są piękne. Nie mają plastikowych guziczków, pięknych kolorowych lampek, ani obudów lśniących tak jak te w Apple Xserve. W zasadzie, obudowa to tylko kawałek metalu. Ale działają i to wg inżynierów FB o 38% bardziej wydajnie i są przy tym o 24% tańsze, w porównaniu z tradycyjnymi serwerami. Ogólnie serwery te są bardzo ascetyczne - wyłącznik i przycisk RESET są umieszczone z przodu obudowy wraz z 2 portami Ethernet, dwoma portami USB, oraz gniazdami zasilania. Specyficznego zasilania, gdyż zasilacze pracują przy napięciu znamionowym 277V, co pozwala ograniczyć straty energii związane z konwersją napięć. Dzięki wyeliminowaniu przedniej części obudowy są bardzo "przewiewne", co pozwala na lepsze chłodzenie. Oryginalnie zaimplementowano też funkcję Wake-On-LAN, która w zależności od trybu działania serwera działa różnie - gdy serwer jest w trybie uśpienia, tradycyjnie go budzi, natomiast w przeciwnym wypadku, sprzętowy watchdog resetuje maszynę. Sprytne i skuteczne, jednakże, WOL puszczony przypadkowo na broadcast może położyć całe datacenter ;-) Poza tym, będą tańsze od tradycyjnych. Dell już widzi tutaj swój kawałek tortu i szykuje się do sprzedaży serwerów zgodnych ze specyfikacją Open Compute.

Bardziej imponujące od serwerów, są jednak specyfikacje samego datacenter. Zamiast tradycyjnych UPSów, szafy rackowe wypełnione akumulatorami, dostarczającymi 48V do odpowiednich gniazdek w zasilaczach. Udało się też usunąć dodatkowe systemy chłodzenia wewnątrz serwerowni, a jednak temperatura utrzymuje się tam na poziomie 30 stopni Celsjusza.

Zastanawia mnie teraz, jaka będzie odpowiedź Google, które swój sprzęt serwerowy udoskonalają od kilku ładnych lat...