ホームページ >バックエンド開発 >PHPチュートリアル >PHP 環境構成における CGI、FastCGI、PHP-CGI、PHP-FPM、Spawn-FCGI の比較_PHP チュートリアル
CGIとは
CGI の正式名は「Common Gateway Interface」です。これは、HTTP サーバーが自分のマシンまたは他のマシン上のプログラムと「通信」するためのツールです。プログラムはネットワーク サーバー上で実行する必要があります。
CGIは、言語に標準入力、出力、環境変数がある限り、どの言語でも書くことができます。 php、perl、tclなど
FastCGIとは
FastCGI は長寿命 CGI のようなもので、アクティブ化されている限り、毎回フォークするのに時間がかかりません (これは CGI の最も批判的なフォーク実行モデルです)。 )。また、分散コンピューティングもサポートしています。つまり、FastCGI プログラムを Web サイト サーバー以外のホストで実行し、他の Web サイト サーバーからのリクエストを受け入れることができます。
FastCGI は、言語に依存しないスケーラブルなアーキテクチャの CGI オープン拡張機能であり、その主な動作は CGI インタープリター プロセスをメモリ内に保持し、より高いパフォーマンスを実現することです。ご存知のとおり、CGI インタープリタの繰り返しロードが CGI パフォーマンス低下の主な原因です。CGI インタープリタがメモリ内に残り、FastCGI プロセス マネージャーのスケジューリングを受け入れる場合、良好なパフォーマンス、スケーラビリティ、フェイルオーバー機能などが提供されます。
FastCGI と CGI 機能
1. CGI と同様に、FastCGI も言語に依存しません。
2. CGI や FastCGI などのインプロセス アプリケーションは、コア Web サーバーから独立して実行され、API よりも安全な環境を提供します。 (API はアプリケーションのコードをコア Web サーバーにリンクします。つまり、欠陥のある 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モジュール)をロードします
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 がどれほど遅いか想像できるでしょう。 PHP へのすべての Web リクエストでは、php.ini を再解析し、すべての拡張機能を再ロードし、すべてのデータ構造を再初期化する必要があります。 FastCGI では、これらすべてがプロセスの開始時に 1 回だけ行われます。さらに、永続的なデータベース接続が機能するという利点もあります。
FastCGIの欠点
マルチプロセスであるため、CGI マルチスレッドよりも多くのサーバー メモリを消費します。PHP-CGI インタープリタは、プロセスごとに 7 ~ 25 メガバイトのメモリを消費します。これを 50 倍または 100 倍すると、大量のメモリが得られます。
Nginx 0.8.46+PHP 5.2.14 (FastCGI) サーバーには 30,000 の同時接続があり、開始された 10 個の Nginx プロセスは 150M のメモリ (15M*10=150M) を消費し、開始された 64 個の php-cgi プロセスは 1280M のメモリ (20M) を消費します。 *64=1280M)、システム自体が消費するメモリを加えた合計メモリ消費量は 2GB 未満です。サーバーのメモリが小さい場合は、25 個の php-cgi プロセスしか開くことができないため、php-cgi によって消費される合計メモリはわずか 500M になります。
PHP-CGIとは
PHP-CGI は PHP 独自の FastCGI マネージャーです。 PHP-CGIを起動し、次のコマンドを使用します。
1. php-cgi が php.ini の設定を変更した後、新しい php-ini を有効にするために php-cgi を再起動する必要があります スムーズに再起動できません
。2. php-cgi プロセスを直接強制終了すると、php は実行できなくなります。 (PHP-FPM と Spawn-FCGI にはこの問題はありません。デーモン プロセスは新しい子プロセスをスムーズに再生成します。)
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-FCGI と比較すると、PHP-FPM は CPU とメモリの制御が優れており、前者はクラッシュしやすく、crontab で監視する必要がありますが、PHP-FPM にはそのような問題はありません。
PHP5.3.3はphp-fpmを統合し、サードパーティパッケージではなくなりました。 PHP-FPM は、メモリとプロセスを効果的に制御し、PHP 設定をスムーズにリロードできる、より優れた PHP プロセス管理方法を提供します。そのため、spawn-fcgi よりも多くの利点があるため、PHP に正式に組み込まれています。 PHP-FPM を有効にするには、./configure で –enable-fpm パラメーターを渡します。
PHP-FPM を使用して PHP-CGI の FastCGI プロセスを制御します
Spawn-FCGI は、lighttpd の一部である、FastCGI モードでの管理作業を行うために Lighttpd の Spawn-FCGI を使用していますが、多くの欠点があります。 PHP-FPM の登場により、いくつかの問題は多少軽減されましたが、PHP-FPM には再コンパイルが必要になるという欠点があり、既に実行されている一部の環境ではかなりのリスクが生じる可能性があります (参照)。PHP 5.3.3 PHP で直接使用できます。 -FPM。
Spawn-FCGI は別個のプロジェクトになり、より安定し、多くの Web サイトの構成に利便性をもたらします。多くのサイトでは、動的 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 Web サイトで「Spawn-FCGI」を検索して、最新バージョンのリリース アドレスを見つけることができます
これで、Spawn-FCGI を使用して、php-CGI の FastCGI プロセスを制御できるようになります
-f
-a アドレスaddrにバインド
-p
-s
-C
-P
-uと-g FastCGIが使用するID(- u user-g ユーザーグループとして実行します)。Ubuntu では www-data を使用できます。その他は、nobody、Apache など、状況に応じて設定されます。
PHP-FPMとspawn-CGIの比較テスト
PHP-FPMは非常に使いやすく、設定はPHP-FPM.iniファイルにあり、php/sbin/PHP-FPMから起動と再起動が可能です。さらに便利なのは、php.ini を変更した後、PHP-FPM のリロードを直接使用して、プロセスを停止せずに php.ini の変更とロードを完了できることです。 PHP のパフォーマンスを向上させます。 PHP-FPM によって制御されるプロセスの CPU リサイクル速度は比較的遅く、メモリは均等に割り当てられます。
Spawn-FCGI によって制御されるプロセスの CPU はすぐに低下し、メモリ割り当ては比較的不均一になります。多くのプロセスは割り当てられていないように見えますが、他のプロセスは高度に占有されています。これは、プロセス タスクの不均等な分散によって引き起こされる可能性があり、これも全体的な応答速度の低下につながります。 PHP-FPM の適切な分散は、全体的な応答とタスクの平均につながります。
PHP-FPMとSpawn-FCGI関数の比較 http://php-fpm.org/about/
PHP-FPMとSpawn-FCGIはどちらも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/
http://www.bkjia.com/PHPjc/324342.html