php環境配置のCGI、FastCGI、PHP-FPM、Spawn-FGI比較?


CGIとは何ですか
CGIフルネームは「公共ゲートウェイインターフェース」(Common Gateway Interface)であり、HTTPサーバはあなたのまたは他のマシン上のプログラムと「会話」するツールであり、そのプログラムはネットワークサーバ上で実行しなければなりません。
CGIはどの言語でも編集できます。この言語は標準的な入力、出力、環境変数を備えています。php、perl、tclなどのようです
何がFastCGIですか
FastCGI像は常駐型のCGIであり、常に実行しています。アクティブにすると毎回forkに時間がかかりません。また、分散式の演算をサポートしています。つまり、FastCGIプログラムはウェブサーバ以外のホストで実行され、他のウェブサイトサーバからの要求を受けられます。
FastCGIは言語に関係なく伸縮可能なアーキテクチャのCGI開放拡張であり、その主な行為はCGI解凍器プロセスをメモリに保持し、それによって高い性能を得ることである。CGI解释器の繰返し荷重はCGIの性能低下の主な原因として知られています。CGI解释器がメモリに保存され、FastCGIプロセスマネージャのスケジューリングを受けると、良好な性能、伸縮性、Fail-Over特性などが提供されます。
FastCGIとCGIの特徴
1、CGIのように、FastCGIも言語の無関係性を持っています。
2、CGIのように、FastCGIはプロセス中のアプリケーションは、核心ウェブサーバから独立して実行し、APIより安全な環境を提供しています。APIは、アプリケーションのコードをコアのウェブサーバにリンクしています。これは、エラーAPIのアプリケーションが他のアプリケーションやコアサーバを損なう可能性があることを意味します。悪意のあるAPIのアプリケーションコードは、他のアプリケーションまたはコアサーバの鍵を盗むこともできる。)
3、FastCGI技術は現在サポート言語があります。C/C+、Java、Perl、Tcl、Python、SmallTalk、Rubyなどです。関連モジュールはApache,ISS,Lightpdなどの人気のあるサーバーでも利用できます。
4、CGIのように、FastCGIはどのWebサーバの内部構造にも依存しないので、サーバー技術の変化があっても、FastCGIは安定しています。
FastCGIの動作原理1、Web Server起動時にFastCGIプロセスマネージャ(IIS ISAPIまたはApache Module)2、FastCGIプロセスマネージャ自身が初期化し、複数のCGI解凍プロセス(複数のphp-cgiが見られる)をロードし、Web Serverからの接続を待つ。3、クライアント要求がWeb Serverに到達すると、FastCGIプロセスマネージャがCGIインタプリタに選択して接続する。Web serverはCGI環境変数と標準入力をFastCGI子プロセスphp-cgiに送信します。4、FastCGI子プロセスが完了したら、標準出力とエラー情報を同じ接続からWeb Serverに戻す。FastCGI子プロセスが接続をオフにすると、処理が完了します。FastCGI子プロセスは、FastCGIプロセスマネージャ(Web Serverで実行)からの次の接続を待ち、処理する。CGIモードでは、php-cgiはここで終了します。上記の状況の中で、CGIは普通どれぐらい遅いか想像できます。各Web要求PHPは、php.iniを再解析し、すべての拡張を再ロードし、全データ構造を初期化する必要があります。FastCGIを使って、これらは全部プロセス起動時に一回だけ発生します。追加の利点は、持続的なデータベース接続(Persistent database connection)が動作することです。
FastCGIの不足
マルチプロセスであるため、CGIマルチスレッドよりも多くのサーバメモリを消費し、PHP-GI解釈器はプロセス毎に7~25メガメモリを消費し、この数字を50または100を掛けると大きなメモリ数になります。Ngix 0.8.46+PHP 5.2.14(FastCGI)サーバーは3万同時接続の下、オープンした10個のNgixプロセスは150 Mメモリ(15 M*10=150 M)を消費し、オープンした64個のphp-cgiプロセスは1280 Mメモリ(20 M*64=1280 M)を消費し、システム自身が消費したメモリを加えて、合計2 GBメモリを消費しない。サーバーのメモリが小さいなら、25のphp-cgiプロセスだけ開けてもいいです。そうすると、php-cgi消耗の総メモリ数は500 Mしかありません。
上のデータはNFgix 0.8.x+PHP 5.2.13(FastCGI)Apachの10倍以上のWebサーバを構築する(第6版)から取ってください。
PHP-GIとは何ですか
PHP-GIはPHPが持参するFastCGIマネージャです。PHP-GIを起動し、下記のコマンドを使用します。
 
php-cgi -b 127.0.0.1:9000
PHP-GIの不足
1、php-cgi変更php.ini配置後はphp-cgiを再起動する必要があります。新しいphp-iniを有効にして、滑らかに再起動できません。
2、直接php-cgiプロセスを殺したら、phpは実行できなくなります。PHP-FPMとSpawn-FGIはこの問題がなく、守護プロセスが滑らかになり、新たなサブプロセスが新たに生成されます。)
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-FGIに対して、PHP-FPMはCPUとメモリのコントロールが優れています。また、前者は崩れやすく、crontabで監視しなければなりません。PHP-FPMはこのような悩みはありません。
PHP 5.3.3は既にphp-fpmに集積されています。第三者のカバンではありません。PHP-FPMはより良いPHPプロセス管理方式を提供しており、メモリとプロセスを効果的に制御し、PHPの設定を滑らかにし、SPawn-fcgiよりもやや多いので、PHP公式に収録されています。configureの時にCnable-fpmパラメータを持ってPHP-FPMを開くことができます。
PHP-FPMを使ってPHP-GIをコントロールする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-FGIとは何ですか?
Spawn-FGIは汎用的なFastCGI管理サーバーで、lighttpdの一部であり、多くの人がLightpdのSpawn-FGIを使ってFastCGIモードでの管理を行っていますが、欠点があります。PHP-FPMの出現は多少の問題を緩和しましたが、PHP-FPMは再コンパイルするという欠点があります。これは既に実行されている環境にとっては大きなリスクがあります。PHP 5.3.3で直接にPHP-FPMを使用することができます。
Spawn-FGIは現在唯一のプロジェクトとなっており、より安定しており、多くのWebサイトの構成にも便利です。もうたくさんのサイトがinxと組み合わせて、動画サイトを解決しています。
最新のlighttpdもこれを含んでいません。http://www.lighttpd.net/search?q=Spawn-FGI)ですが、以前のバージョンで見つけられます。lighttpd-1.4.15バージョンに含まれています。http://www.lighttpd.net/download/lighttpd-1.4.15.tar.gz)
現在Spawn-FGIのダウンロード先は?http://redmine.lighttpd.net/projects/spawn-fcgi最新バージョンはhttp://www.lighttpd.net/download/spawn-fcgi-1.6.3.tar.gz
注:最新のSpawn-FGIはlightpd.netサイトで検索できます。「Spawn-FGI」は最新バージョンのリリースアドレスを探しています。
次にSpawn-FGIを使用して、php-GIのFastCGIプロセスを制御できます。

/usr/local/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -C 5 -u www-data -g www-data -f /usr/bin/php-CGI
パラメータの意味は以下の通りです。
-fは、FastCGIを呼び出すプロセスの実行プログラム位置を指定し、システム上に搭載されているPHPの状況に応じて、具体的に設定-aをアドレスaddr-pに結びつけてポートポートポートポートポートポートポートポートポートポートポートポートポートポートポートポートポートポートポートパスポート-Cに結びつけるパスパスパスパスパスパスパスパスパスパスパスパスパスパスパスパスパスパスパスパスパスパスパスパスパスを指定して生成されたFastCGIのプロセス数を指定しデフォルトは5(PHPのみ)-P指定で生成されたプロセスのPIDファイルパス-uと-g FastCGIはどのようなアイデンティティ(-uユーザ-gユーザグループ)を使用して実行されますか?Ubuntuではwww-dataが使用できます。他の場合は、nobody、apacheなどの構成があります。
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-FGI制御のプロセスCPUは急速に低下していますが、メモリ割り当ての比較は不均一です。多くのプロセスが割り当てられていないようですが、他のプロセスは非常に高い占有率を占めています。プロセスタスクの割り当ての不均一によるものかもしれないが,これは全体応答速度の低下をもたらした。PHP-FPMの合理的な配分は、全体的な応答の言及と任務の平均をもたらします。
PHP-FPMとSpawn-FGI機能比較
  http://php-fpm.org/about/
PHP-FPM、Spawn-FGIはphp-cgiを守るプロセスマネージャです。
参考文献:
  http://topic.csdn.net/u/20100216/22/5809e272-6f67-4248-bde9-99deeae5215b.html  http://topic.csdn.net/u/20101015/19/8ae74452-ec6b-448e-9942-21faeb008cd7.html  http://club.topsage.com/thread-768488-1-1.html  http://www.unixaid.info/index.php/productsapp/23-servsf/842-spawn-fcgi  http://www.fastcgi.com/drupal/node/2http://baiki.baidu.com/view/641394.httmhttp://baike.baidu.com/view/32614.htm  http://blog.yation.com/network/fastcgi/