CGI、FastCGI、PHP-CGI、PHP-FPM、Spawn-FCGI


このいくつかの違いを簡単に紹介します
CGIとは
CGIは「共通ゲートウェイインタフェース」(Common Gateway Interface)と呼ばれ、HTTPサーバはあなたのまたは他のマシン上のプログラムと「会話」するツールで、そのプログラムはネットワークサーバ上で実行する必要があります.
CGIは、標準入力、出力、および環境変数がある限り、任意の言語で記述できます.例えばphp,perl,tclなど
FastCGIとは
FastCGIは常駐(long-live)型のCGIのようで、ずっと実行していて、アクティブになったら、毎回forkに1回時間を費やすことはありません(これはCGIが最も非難されているfork-and-executeモードです).また、FastCGIプログラムは、Webサーバ以外のホスト上で実行され、他のWebサーバからのリクエストを受け入れることができる分散演算もサポートされています.
FastCGIは、言語に依存しないスケーラブルアーキテクチャのCGIオープン拡張であり、CGIインタプリタプロセスをメモリに保持し、パフォーマンスを向上させることが主な動作です.CGIインタプリタの反復ロードがCGI性能低下の主な原因として知られており、CGIインタプリタがメモリに保持され、FastCGIプロセスマネージャのスケジューリングを受けると、良好な性能、伸縮性、Fail-Over特性などを提供することができる.
FastCGIの仕組み
1.Webサーバ起動時にFastCGIプロセスマネージャ(IIS ISAPIまたはApache Module)にロードする
2、FastCGIプロセスマネージャ自身が初期化し、複数のCGIインタプリタプロセス(複数のphp-cgiが表示される)を開始し、Webサーバからの接続を待つ.
3.クライアント要求がWebサーバに到達すると、FastCGIプロセスマネージャはCGI解釈器を選択して接続する.Web serverはCGI環境変数と標準入力をFastCGIサブプロセスphp-cgiに送信する.
4、FastCGIサブプロセスが処理を完了した後、標準出力とエラー情報を同じ接続からWebサーバに戻す.FastCGIサブプロセスが接続を閉じると、要求は処理完了を告げる.FastCGIサブプロセスは、FastCGIプロセスマネージャ(Webサーバで実行)からの次の接続を待機して処理する.CGIモードでphp-cgiはここで終了する.
上記の場合、CGIは通常どれほど遅いか想像できます.各WebリクエストPHPはphp.iniを再解析し、すべての拡張子を再ロードし、すべてのデータ構造を再初期化する必要があります.FastCGIを使用すると、これらはすべてプロセスの開始時に一度しか発生しません.追加の良い点は、データベース接続(Persistent database connection)が継続的に動作することです.
FastCGIの不足
マルチプロセスであるため、CGIマルチスレッドよりも多くのサーバメモリを消費し、PHP-CGI解釈器はプロセスごとに7~25メガメモリを消費し、この数字に50または100を乗じると大きなメモリ数となる.
Nginx 0.8.46+PHP 5.2.14(FastCGI)サーバは3万同時接続で、オープンした10個のNginxプロセスは150 Mメモリ(15 M*10=150 M)、オープンした64個のphp-cgiプロセスは1280 Mメモリ(20 M*64=1280 M)を消費するシステム自体が消費するメモリを加えると、合計2 GBのメモリが消費されません.サーバーのメモリが小さい場合は、php-cgiプロセスを25個しか開くことができません.php-cgiが消費する総メモリ数は500 Mです.
PHP-CGIとは
PHP-CGIは、PHPが持参したFastCGIマネージャです.
PHP-CGIの不足
1、php-cgiはphp.iniの構成を変更した後、php-cgiを再起動しなければ新しいphp-iniを有効にできない.スムーズに再起動できない
2、php-cgiプロセスを直接殺すと、phpは実行できなくなります.(PHP-FPMとSpawn-FCCIはこの問題がなく、デーモンプロセスはスムーズに新しいサブプロセスを再生成します.)
PHP-FPMとは
PHP-FPMはPHP FastCGIマネージャであり、PHPにのみ使用され、http://php-fpm.org/downloadダウンロードできます.
PHP-FPMはPHPソースコードのパッチで、FastCGIプロセス管理をPHPパッケージに統合することを目的としています.PHPソースコードにパッチを適用し、PHPをコンパイルしてインストールしてから使用する必要があります.
現在、最新のPHP 5.3.2のソースツリーから直接PHP-FPMを統合したブランチをダウンロードすることができ、次のバージョンではPHPのメインブランチに融合すると言われています.Spawn-FCPIに比べて、PHP-FPMはCPUやメモリのコントロールが優れており、前者はクラッシュしやすく、crontabで監視しなければなりませんが、PHP-FPMはこのような悩みはありません.
PHP 5.3.3は既にphp-fpmを集積しており、もはや第三者のパッケージではない.PHP-FPMはより良いPHPプロセス管理方式を提供しており、メモリとプロセスを効果的に制御でき、PHP配置をスムーズに再ロードでき、spawn-fcgiよりも多くの点を持っているので、PHP公式に収録されている../configureの時に–enable-fpmパラメータを持ってPHP-FPMを開くことができる.
PHP-FPMを使用してPHP-CGIのFastCGIプロセスを制御する
/usr/local/php/sbin/php-fpm{start|stop|quit|restart|reload|logrotate}   --start   php fastcgi  
--stop     php fastcgi  
--quit     php fastcgi  
--restart   php fastcgi  
--reload       php php.ini
--logrotate     log  
   Spawn-FCGI 
Spawn-FCGI      FastCGI     ,  lighttpd     ,     Lighttpd Spawn-FCGI  FastCGI        ,       。 PHP-FPM            , PHP-FPM           ,                    (refer), php 5.3.3       PHP-FPM 。
Spawn-FCGI           ,      ,    Web          。          nginx         。
   lighttpd         (http://www.lighttpd.net/search?q=Spawn-FCGI),            。 lighttpd-1.4.15       (http://www.lighttpd.net/download/lighttpd-1.4.15.tar.gz)
  Spawn-FCGI      http://redmine.lighttpd.net/projects/spawn-fcgi,     http://www.lighttpd.net/download/spawn-fcgi-1.6.3.tar.gz
 :   Spawn-FCGI   lighttpd.net    “Spawn-FCGI”            
PHP-FPM spawn-CGI    
PHP-FPM       ,     PHP-FPM.ini    ,   、      php/sbin/PHP-FPM   。       php.ini       PHP-FPM reload    ,           php.ini           PHP-FPM   php        。PHP-FPM     cpu        ,        。
Spawn-FCGI     CPU     ,           。           ,          。                  .               。 PHP-FPM     ,                。
PHP-FPM Spawn-FCGI    http://php-fpm.org/about/
PHP-FPM、Spawn-FCGI    php-cgi      。