CGI、FastCGI、PHP-GI、PHP-FPM、Spawn-FGIとは?

5602 ワード

http://www.linuxidc.com/Linux/2011-07/38108.htm
http://wenku.baidu.com/view/887de969561252d380eb6e92.html
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またはAppache Module)2をロードし、FastCGIプロセスマネージャ自身が初期化し、複数のCGI解釈プロセスを起動する(複数のphp-cgiが見られる)。Web Serverからの接続を待ちます。3、クライアント要求がWeb Serverに到達すると、FastCGIプロセスマネージャがCGI解释器に選択して接続します。Web serverはCGI環境変数と標準入力をFastCGI子プロセスphp-cgiに送ります。4、FastCGI子プロセスが完了したら、標準出力とエラー情報を同じウェブ接続からFarCGI Severに戻します。接続をオフにすると、FastCGI子プロセスは、FastCGIプロセスマネージャ(Web Serverで実行)からの待ち時間を要求します。の次の接続を行います。CGIモードでは、php-cgiはここで終了します。上記の場合、CGIは通常どれぐらい遅いかを想像できます。PHPは各Web要求に対して、php.iniを再解析し、すべての拡張を再読み込みして全データ構造を初期化しなければなりません。FastCGIを使用して、これらはプロセス起動時にのみ発生します。さらなる利点は、持続データです。ライブラリ接続は動作可能です。
FastCGIの不足
マルチプロセスなので、CGIマルチスレッドよりも多くのサーバメモリを消費しています。PHP-GI解释器はプロセスごとに7~25メガメモリを消費しています。この数字を50または100で乗算すると大きなメモリ数になります。Ngix 0.8.46+PHP 5.2.14(FastCGI)サーバは3万同時接続で、オープンした10個のNgixプロセスは150 Mメモリを消費します。オープンした64個のphp-cgiプロセスは1280 Mメモリ(20 M*64=1280 M)を消費し、システム自身が消費したメモリを加えて、合計2 GBメモリまで消費しません。サーバメモリが小さいなら、25個のphp-cgiプロセスだけ開けられます。このように、php-cgi消耗の総メモリ数は500 Mしかありません。
PHP-GIとは何ですか
PHP-GIはPHPが持参するFastCGIマネージャです。
PHP-GIを起動し、次のコマンドを使用します。
1
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公式に収録されました。
PHP-FPMを使ってPHP-GIの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-FGIとは
Spawn-FGIは汎用のFastCGI管理サーバーです。lighttpdの一部です。多くの人がLightpdのSpawn-FGIを使ってFastCGIモードでの管理を行っていますが、欠点があります。PHP-FPMの出現は多少問題を緩和しましたが、PHP-FPMにはいくつかの欠点があります。PHP-FPMが、再コンパイルする必要があります。これはいくつかの危険性があります。(refer)PHP 5.3.3で直接PHP-FPMを使用できます。
Spawn-FGIは現在、唯一のプロジェクトとなり、より安定したものとなり、多くのWebサイトの構成にも便利になりました。
最新のlighttpdもこれを含んでいません。http://www.lighttpd.net/search?q=Spawn-FGI)ですが、以前のバージョンで見つけられます。lightpd-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-CoGIの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に結びつけてポートポートポートポートポートポートポートポートポートポートポートポートポートポートポートポートポートポートポートポートポートポートパスポート-Cに結びつけるパスパスパスパスパスパスパスパスパスパスパスパスパスパスパスパスパスパスパスパスを指定して生成されたFastCGIのプロセス数を指定し、デフォルトは5(PHPのみ)です。-P指定により生成されたプロセスのPIDファイルパス-uと-g FastCGIはどのような身分(-uユーザ-gユーザグループ)で実行されていますか?Ubuntuではwww-dataが使用できます。他の場合は、nobody、apaacheなどの構成があります。
PHP-FPMとspawn-CGIの比較テスト
PHP-FPMの使用は非常に便利で、配置はすべてPHP-FPM.iniのファイル内にあります。起動、再起動はいずれもphp/sbin/PHP-FPMの中からできます。より便利なのは、php.iniを修正してから直接PHP-FPM reloadを使ってロードできます。プロセスを殺すことなく、php.iniの修正・ロードができます。PPHP-FPMを使用してもPMの性能を向上させることができます。cpuの回収のスピードは比較的に遅くて、メモリの割り当てのとても平均しています。
Spawn-FGI制御のプロセスはCPUが急速に低下し、メモリの割り当てが不均一である。割り当てられていないプロセスが多いようだが、他のいくつかは占有率が高い。プロセスの割り当ての不均一によるものかもしれない。これは全体応答速度の低下をもたらしている。PHP-FPMの合理的な割り当ては、全体応答の言及とタスクの平均をもたらしている。
PHP-FPMとSpawn-FGI機能比較
  http://php-fpm.org/about/
PHP-FPM、Spawn-FGIはphp-cgiを守るプロセスマネージャです。