Už slyším všechny ASP webmastery jak hučí, že PHP je pomalé. Mýlí se. Pravděpodobně totiž byly srovnávány spíše webové servery (Apache 1.X ještě stále neběží na nativních vláknech z důvodů stability) nebo dokonce SQL servery, protože dle výzkumu (třídění, Mandelbrotovy fraktály, smyčky, ‚dolování‘ z databáze…) WebMonkey vyplynulo, že jsou na tom oba jazyky (ASP versus PHP 4.0) zhruba stejně. Po použití optimalizátoru však ASP rychle ztrácí dech a ani se mu nedivím, protože nárůst výkonu PHP je markantní (v průměru více než stoprocentní). PHP4 s optimizerem vyhrálo ve všech disciplínách.
Podle mě je problém v tom, že na NT server potřebujete minimálně procesor Pentium (nejlépe dva nebo čyři) stovky megabajtů paměti a veliký disk. Naproti tomu Linux mi dlouhou dobu doma jel na 386 s 8MB paměti. Linux je zkrátka častěji nasazovány na stroje, na kterých by NT ani nejely. Proto to může vypadat, že je PHP pomalé. Dle mého názoru má PHP oproti ASP řadu výhod:
- podobnost jazykům C či Perl chcete-li
- třídy (objekty), možnost jednoduchého zapouzdření (ovšem bez kontroly bezpečnosti)
- obrovské množství funkcí již v základní výbavě (komprimace, hashování, kódování, šifrování, spelling, posílání pošty, kalendářní funkce, file system, sessions, parsování IP adres či URL…)
- rychlost (Zend Optimizer)
- možnost kompilace do binárního kódu a znemožnění tak zákazníkovi modifikovat skripty (Zend Compiler – ještě není dostupný veřejnosti)
- nativní support mnoha databází, namátkou vybírám: InterBase, Solid, mSQL, MySQL, MSSQL, Sybase, Oracle, Oracle8, PostgreSQL, Informix a jiné včetně ODBC
- podpora protokolů NIS, IMAP, SNMP, NNTP, POP3, LDAP, FTP a HTTP, otevírání socketů
- regulární výrazy (!)
- tvorba obrázků GIF, JPEG a PNG jakožto i PDF souborů za běhu
- úplná podpora WDDX a XML
- dokumentace a API, pomocí kterého si můžete vytvářet vlastní knihovny funkcí (třeba ve svém oblíbeném C++ Builderu)
- dynamické dohrávání knihoven (so nebo DLL)
- mnoho pluginů, např. konektivita na Javu (vytváření instancí tříd, tvorba servletů…) nebo možnost vytvářet Macromedia Flash přímo ze skriptu
- vývojové prostředí pro Linux
- nepřeberné množství již hotových knihoven, tříd, funkcí a projektů, které jsou většinou open source a ze kterých se můžete lecčemu naučit (např. PHPslash)
- skript asp2php, který zcela jistě pomůže při přechodu
Ale také několik nevýhod:
- absence jakéhokoliv aktivního debbugeru (pouze požnost logování volání funkcí) avšak i na něm se u Zendu pracuje
- zatím žádné slušné IDE ve stylu InterDev pro Windows (pouze editory, které zvýrazňují syntaxi a umí FTP)
- ve většině případů nutná relativně složitá konfigurace a následná kompilace
Jeden příklad za všechny
www.freshmeat.net – server Freshmeat funguje už od roku 1997 a již od počátku byl psán v PHP. Hardware musel být samozřejmě několikrát upgradován. Dnes vás obslouží farma serverů VALinux FullOn s operačním systémem Linux (s velkou pravděpodobností Red Hat). K uložení více než 50000 uživatelských účtů a vlastních dat posloužila databáze MySQL. Servery stihnou obsloužit téměř jeden a půl milionu požadavků denně (ze 75000 jedinečných IP adres). Momentálně je na serveru PHP verze 4.0 a šušká se, že se bude doinstalovávat ještě Zend Optimizer.
Rozhovor
Dovolil jsem si obtěžovat pana Michala Vitečka, jednoho z hlavních administrátorů sítě serverů MOBIL.CZ (např. mobil.cz, iport.cz, audionet.cz, wapserver.cz nebo třeba pandora.cz) a pana Tomáše Holušu, administrátora jednoho z nejrychleji se rozvíjejícího portálů v Čechách (možná i v zahraničí) www.centrum.cz. Oběma tímto děkuji za ochotu odpovídat na mé dotěrné otázky:
root.cz: Na jakém běžíte hardwaru? Jedná se o jeden stroj nebo nějakou farmu?
MV (mobil.cz):
Na primárním serveru (diana.mobil.cz) byste našli dva procesory Intel Celeron 450MHz, 1GB RAM a tři SCSI disky. Databázový server obsahuje čtyři jednotky Pentium II Xeon 400MHz, také 1GB RAM a diskové SCSI pole RAID. V reklamnim serveru (xenie.mobil.cz) máme dva Celerony 500MHz, 256MB RAM a dva SCSI disky. Nesmím zapomenout na server pandora.cz (sarah.mobil.cz), kde sídlí jeden Celeron 400MHz, půl giga paměti a dva IDE disky.TH (centrum.cz):
No tak u nás je to farma devíti počítačů, ale s dost nesouměrně rozdělenou zátěží – přes 50% zátěže dělá mail.centrum.cz (2 stroje): 2×PII (400 MHz, os Linux 2.2.13 Debian), Apache/1.3.6 Ben-SSL/1.34 (Unix) s PHP/3.0.12 mod_czech/3.1.0b2. O většinu dat se stará db.centrum.cz: 1×PII (450 MHz, os Linux 2.2.13 Debian) s MySQL SQL serverem. Ostatní stroje (moje.centrum, 24.centrum, www.centrum… jsou spíše slabší).
root.cz: Jaký na nich běží systém a proč jste ho zvolili?
MV (mobil.cz):
Všude jede Slackware 7. Důvodem je jeho největší vhodnost na servery ze všech dostupných linuxových distribucí, zejména je to jednoduchost konfigurace (žádný /etc/rc.d ve stylu SysV), základní bezpečnost (vyšší než např. u RH apod.), dobrá vyladěnost, spolehlivost a stabilita. Kernely jsou z řady 2.2.x, poměrně hodně modifikované pro naše potřeby. Jako web server slouží Apache 1.3.x s PHP.TH (centrum.cz):
Je to Debian Linux 2.1 Slink. A proč Linux? Shrnu to ve čtyřech slovech: bezpečnější, méně náročný na hardware, stabilnější a levnější. Proč Debian? Je to dobrá distribuce a osobně s ní mám největší zkušenosti (už aby byla stable 2.2 Potato ;-).
root.cz: Museli jste zasahovat do kódu kernelu? Proč?
MV (mobil.cz):
Především z důvodů bezpečnosti – využíváme vlastní modifikace a samozřejmě také modifikace od jiných autorů.TH (centrum.cz):
Kernely jsme si kompilovali sami (hlavně kvůli driverům a kvůli bezpečnosti, např. loadable_modules disabled apod.).
root.cz: Jaká verze PHP na serverech běží?
MV (mobil.cz):
Všude zatím používáme PHP 3.0.X, protože PHP4 má některé funkce/chování nekompatibilní (zavedli v něm typ boolean do více funkcí a ty tak změnily své chovaní, namátkou (!1) vrací false v PHP4, ale 0 v PHP3 nebo třeba (2 == true) je false v PHP4, ale true v PHP3 apod.). Přechod na PHP4 samozřejmě plánujeme, ale bude chvíli trvat, protože musíme změnit příslušné PHP skripty, které jsou nekompatibilitou obou verzí zasaženy.TH (centrum.cz):
3.0.12. Zkoušeli jsme PHP4, ale dělalo to ještě drobné problémy ve spolupráci s MySQL, takže zatím PHP3.
root.cz: A co SQL server?
MV (mobil.cz):
MySQL 3.22.23 pro pandora.cz a Sybase 11.x pro redakční systém Genesis II.TH (centrum.cz):
Všechna data z centra jsou na databázi MySQL. Zatím (z historických důvodů ;-)) 3.21.xx, ale v blízké době plánujeme přechod na 3.22.xx. Musím ale podotknout, že MySQL server neběží jen na db.centrum.cz, ale i na jednotlivých strojích daných služeb.
root.cz: Nepřemýšlíte o nahrazení MySQL jiným databázovým strojem? Přece jenom MySQL není transakční databází a vaše servery mají čím dál tím víc uživatelů.
MV (mobil.cz):
Ano, v MySQL chybí nejen transakce, ale např. vnořené selecty a proto se pracuje na nové verzi Pandory, která poběží na jiném databázovém serveru.TH (centrum.cz):
Výkon je zatím v pohodě. Hodně záleží na správně vytvořených indexech. Je to celkem velká věda. Zatím jsme s jinou databází neexperimentovali. Možná se budeme poohlížet po jiné databázi, ale nejprve vyzkoušíme novou 3.22.32.
root.cz: Proč jste dali PHP přednost před ASP?
MV (mobil.cz):
:-))) Protože naše servery jedou na Linuxu, PHP je podobné C, je praktické pro psaní skriptů a rychlé.TH (centrum.cz):
ASP se nám nepodařilo pod Linux sehnat ;-)) Prý něco existuje, ale nemáme s tím zkušenosti. (OpenASP – pozn. lzap). PHP nás zatím nezklamalo, takže neplánujeme změnu. Taky je skvělé, že je to de facto „C“ syntaxe.
root.cz: Vidím Michale, že jste Linux používali již předtím. Dobře, představte si nyní, že (linuxový) server ještě nemáte a musíte vytvořit velký dynamický web. Rozhodl byste se pro: a) NT+ASP; b) NT+PHP; c) Linux+PHP.
MV (mobil.cz):
Podle mého názoru NT nejsou dostatečně stabilní a potřebují mnohem výkonnější hardware, jejich bezpečnost je zoufalá (viz. bugtraq) a v neposlední řadě jsou produkty MS u všech našich administrátorů velmi neoblíbené. Ještě jsme brali v potaz FreeBSD a OpenBSD – obojí jsme pak ale z různých důvodů zavrhli (problémy s kompilacemi, horší podpora hardware atd.). Odpověď je C – Linux prostě vyhrál :)root.cz: Vzkázali byste něco webmasterům, kteří se bojí, že PHP není vhodný na velkou zatěž?
MV (mobil.cz):
Jejich obavy jsou neoprávněné a neopodstatněné – redakční systém Genesis II je téměř celý napsán v PHP a dnes na něm jede více než 40 serverů různého zaměření (např. mobil.cz, iport.cz, bonusweb.cz apod.). Pandora.cz jede taktéž velmi spolehlivě i na slabém „železe“. PHP jako takové je velmi rychlé – problémy jsou vždy s databázemi.TH (centrum.cz):
Tady to je relativní: Co je to velká zátěž? Dá se mail.centrum.cz se stovkami tisíc přístupů za měsíc považovat za velmi zatížený server? Pokud ano, tak mohu říct, že dvouprocesorová PII (2×400MHz) stíhá HTTP/PHP hravě. Plus na tom samém stroji běží mail server (Zmailer). A PII dneska není nedostupný hardware.Za root.cz Vám děkuji za rozhovor a přeji mnoho úspěchů.
Závěr
Co dodat? Snad jen vzkaz mému příteli: PHP není jen pro amatéry! ;-)
Reference
www.php.net
www.php.cz
www.php.cz/projects.php
www.zend.com
phplib.netuse.de
phpclub.unet.ru
www.phpwizard.net
www.freshmeat.net
www.mobil.cz
www.centrum.cz