CGI、FastCGI、PHP-CGI、PHP-FPM、Spawn-FCPIとは

5737 ワード

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 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のメモリを消費できない.サーバーメモリが小さい場合、完全に25個のphp-cgiプロセスだけをオープンすることができ、php-cgiが消費した総メモリ数は500 Mである.
PHP-CGIとは
PHP-CGIは、PHPが持参したFastCGIマネージャです.
PHP-CGIを起動し、次のコマンドを使用します.
1
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は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の時にCenable-fpmパラメータを持ってPHP-FPMを開くことができる.
PHP-FPMを使用してPHP-CGIのFastCGIプロセスを制御する
1
2
3
4
5
6
7
8
/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には再コンパイルが欠けている点があり、これはすでに稼働している環境にとって少なからぬリスクがある可能性がある(refer)php 5.3.3でPHP-FPMをそのまま使用できるようになりました.
Spawn-FCGIは現在、唯一のプロジェクトとなっており、より安定しており、多くのWebサイトの構成にも便利です.nginxと組み合わせてダイナミックなWebページを解決するサイトも少なくありません.
最新のLighttpdにもこれは含まれていません(http://www.lighttpd.net/search?q=Spawn-FCGI)ですが、以前のバージョンで見つけることができます.lightpd-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プロセスを制御できます.
1
/usr/local/bin/spawn-fcgi -a 127.0.0.1 -p9000-C5-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/PHP-FP-PMから行うことができる.更に便利なのは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を守るプロセスマネージャです.