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

5786 ワード

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とCGIの特徴
1.CGIのようにFastCGIも言語無関係である.
2、CGI、FastCGIなどのプロセスにおけるアプリケーションは、コアウェブサーバとは独立して実行され、APIよりも安全な環境を提供する.(APIsは、アプリケーションのコードをコアのウェブサーバにリンクします.これは、1つの誤ったAPIのアプリケーションが他のアプリケーションまたはコアサーバを破損させる可能性があることを意味します.悪意のあるAPIのアプリケーションコードは、別のアプリケーションまたはコアサーバの鍵を盗むこともできます.)
3、FastCGI技術の現在のサポート言語はC/C+、Java、Perl、Tcl、Python、SmallTalk、Rubyなどである.関連モジュールはApache,ISS,Lighttpdなどのポピュラーなサーバでも利用可能である.
4、CGIのように、FastCGIはいかなるWebサーバの内部アーキテクチャにも依存しないため、サーバ技術の変化においても、FastCGIは安定している.
FastCGIの動作原理1、Webサーバ起動時にFastCGIプロセスマネージャ(IIS ISAPIまたはApache Module)2、FastCGIプロセスマネージャ自身が初期化し、複数のCGIインタプリタプロセス(複数のphp-cgiが表示される)を起動し、Webサーバからの接続を待つ.3.クライアント要求がWebサーバに到達すると、FastCGIプロセスマネージャはCGIインタプリタを選択して接続する.Webサーバは、CGI環境変数と標準入力をFastCGIサブプロセスphp-cgiに送信します.4、FastCGIサブプロセスが処理を完了した後、標準出力とエラー情報を同一接続からWebサーバに戻す.FastCGIサブプロセスが接続を閉じると、リクエストは処理が完了します.次に、FastCGIサブプロセスは、Webサーバで実行されるFastCGIプロセスマネージャからの次の接続を待機して処理します.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です.
上のデータはNginx 0.8から抜粋する.x+PHP 5.2.13(FastCGI)Apacheの10倍以上のWebサーバを構築(第6版)
PHP-CGIとは
PHP-CGIは、PHPが持参したFastCGIマネージャです.PHP-CGIを起動し、次のコマンドを使用します.
 
  
php-cgi -b 127.0.0.1:9000

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は、FastCGIプロセス管理をPHPパッケージに統合するためのPHPソースコードのパッチです.PHPソースコードにパッチを適用し、PHPをコンパイルしてインストールしてから使用する必要があります.
現在、最新のPHP 5.3.2のソースツリーから直接PHP-FPMを統合したブランチをダウンロードすることができ、次のバージョンではPHPのメインブランチに融合するという.Spawn-FCPIに対してPHP-FPMはCPUやメモリの制御が優れており,前者はクラッシュしやすくcrontabで監視しなければならないが,PHP-FPMにはこのような悩みはない.
  PHP5.3.3 php-fpmはすでに統合されており、サードパーティ製のパッケージではありません.PHP-FPMはより良いPHPプロセス管理方式を提供し、メモリとプロセスを効果的に制御でき、PHPの再ロード構成をスムーズにすることができ、spawn-fcgiよりも少し多いので、PHP公式に収録されています../configureの場合、Cenable-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管理サーバであり、ライトtpdの一部であり、多くの人がLighttpdのSpawn-FCGIでFastCGIモードでの管理を行っているが、多くの欠点がある.PHP-FPMの出現は多少の問題を緩和したが、PHP-FPMには再コンパイルがあるという欠点があり、これはすでに稼働している環境にとって大きなリスクがある可能性があり、php 5.3.3ではPHP-FPMを直接使用することができる.
Spawn-FCGIは現在、独自のプロジェクトとなっており、より安定しており、多くのWebサイトの構成にも便利です.ダイナミックなWebページを解決するためにnginxと組み合わせたサイトは少なくありません.
最新のLighttpdにもこれは含まれていません(http://www.lighttpd.net/search?q=Spawn-FCGI)ですが、以前のバージョンでは見つけることができます.ライトtpd-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”を検索してその最新バージョンの発表の住所を見つけます
次にSpawn-FCPIを使用してphp-CGIの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にバインドポートport-sがunix socketにバインドするパスpath-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/PCH-FMから行うことができます.もっと便利なのはphpを修正することです.ini後はPHP-FPM reloadをそのまま使用するロードでき、プロセスを殺すことなくphpを完了することができる.iniの修正ロードの結果,PHP−FPMを用いることでphpの性能が大幅に向上することが分かった.PHP-FPM制御のプロセスはcpu回収の速度が遅く,メモリ割り当てが均一である.
Spawn-FCGI制御のプロセスCPUは急速に低下し,メモリ割り当ての比較的不均一であった.多くのプロセスが割り当てられていないようですが、他のプロセスは高いです.プロセスタスクの割り当ての不均一による可能性がある.これにより、全体的な応答速度が低下する.一方、PHP−FPMの合理的な割り当ては、全体的な応答の言及とタスクの平均をもたらす.
PHP-FPMとSpawn-FCPI機能の比較
  http://php-fpm.org/about/
PHP-FPM、Spawn-FCPIは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/2  http://baike.baidu.com/view/641394.htm  http://baike.baidu.com/view/32614.htm  http://blog.yation.com/network/fastcgi/