ugrás a tartalomhoz

Robusztus és nagyteljesítményű PHP IIS alatt: FastCGI

Granc Róbert · 2003. Május. 13. (K), 17.37
[ PHP Everywhere ] A PHP fejlesztők jól tudják, hogy az ügyfél milyen gyakran erőlteti a Windows kiszolgáló (és mellette gyakran az IIS az Apache helyett) alkalmazását webszerverként.
Az IIS esetén (az Apache-tól eltérően) a PHP ajánlott stabil futtatási módja a CGI - ám mivel minden lekérdezéskor létrejön, majd a szkript futása végén megszűnik egy processz, a CGI teljesítménye nem igazán kiemelkedő. A PHP isapi kiegészítő viszont egyrészt nem teljesen stabil, másrészt viszont szálbiztos (thread-safe) módot követelne, ennek viszont számos PHP kiegészítő még nem felel meg.
Szerencsére van egy alternatív nyílt módszer, a FastCGI.

A FastCGI processzek több kérést is kiszolgálnak (perzisztens processzek) - ez jórészt megoldja a teljesítményproblémát. A tesztek alapján 4-8-szoros teljesítménynövekedés várható a hagyományos CGI változattal szemben! A FastCGI IIS felületének szerzője az ActiveState munkatársa, Shane Caraveo.

Hogyan működik a FastCGI?

1. Az IIS indulásakor betölti a FastCGI processzkezelőt (az isapi_fcgi.dll-t).
2. A FastCGI processzkezelő inicializálja önmagát, több FastCGI processzt indítva (a Task Managerben php.exé-kként jelennek meg), és a kiszolgálótól érkező új kapcsolatra várakozik.
3. Amikor beérkezik egy kliens kérése, a processzkezelő kiválaszt és megnyit egy kapcsolatot egy FastCGI processz felé. A kiszolgáló ennek a processznek küldi át a környezeti változók és a standard bemenet értékeit.
4. Amikor a processz befejezi a feldolgozást, ugyanezen a kapcsolaton keresztül küldi vissza a standard kimeneti adatokat és hibaüzeneteket a kiszolgálónak.
5. A kérés akkor fejeződik be sikeresen, amikor a FastCGI processz bezárja a kapcsolatot. Ekkortól a processz új kapcsolatra vár az IIS alatt futó FastCGI processzkezelőtől. A normális CGI esetén a php.exe futása itt megszakadna.

A fenti példa alapján is látható, mennyivel lassabb lehet a standard CGI: minden egyes lekérés esetén a PHP-nek újra kell olvasnia a php.ini-t, be kell töltenie a kiegészítőket, újra kell inicializálnia az adatstruktúrákat. A FastCGI esetén mindezeket csak egyszer kell megtenni a processz indításakor. Extra bónuszként a perzisztens adatbáziskapcsolatok is működnek.

Részletes leírás, tesztek: http://php.weblogs.com/fastcgi_with_php_and_iis
 
1

Re: Robusztus és nagyteljesítményű PHP IIS alatt: FastCGI

Hojtsy Gábor · 2003. Május. 14. (Sze), 21.45
Hozzátenném, hogy ezt a módszert használják nagymegbízhatóságú beágyazott szerver környezetben, ahol szintén nem Apache szerverről van szó, hanem valamilyen egyszerűbb kiszolgálóról például lighttpdről, ami éppen annyit tud, ami. a PHPs oldalak kiszolgálásához kell, de azt villám sebességgel