質問
個別のプロセスとして実行され、適切なIPCによってリンクされる3〜4個のサービスで構成されるアプリケーションを設計しています。システムにはWebインターフェースがあり、そこにあるWebサーバーは何でも使用したいです。
Webインターフェースは、同じWebサーバー上の他のURLがまったく異なることを実行できるURLの下でアクセスする必要があります。そのURLの下のパスを使用して、Webインターフェースの動作を指定する予定です。ネット上の他のアプリケーションで使用したり、ブラウザで対話するための機能を備えています。
カフを外して、次のように作業します:
- ウェブサーバーが受信するすべてのリクエストに対してCGIプロセスを起動させる(ApacheのSetHandlerなど)
- CGIをIPCに接続させます
- バックエンドサービスから必要なものをすべて取得する
- CGIがHTML / XMLおよびサービスの回答に基づいたHTTPステータスを返すようにします
今、私が本当に欲しいのは、不要なオーバーヘッド(他のアプリケーションからのリクエスト)のパフォーマンスを浪費しているのではないかと心配しているため、最初の2つのステップを回避するか、できない場合は2番目のステップを回避することです頻繁に発生する可能性があります)。
たとえば、PHPは、スクリプトの実行時間を生き延び、次回再作成する必要のないMySQLデータベースへの永続的な接続を開くことができますが、実際にどのように行うかはわかりません。また、私が理解しているように、Apacheモジュールはサーバーの起動時に一度ロードされるため、最初の手順は削除されますが、Apacheに結び付けられます。
では、特定のURLのハンドラーを異なるWebサーバーにフックする良い方法は何ですか?私はHTTPを処理したくありません。さもなければ、2番目のサーバーへのプロキシ設定を使用するだけかもしれませんが、それはまさに車輪の再発明のようです。 CGIに問題がないと思われる場合、同様の構造の多数のリクエストを処理する例がありますので、お知らせください。
解決
OK、以前はこれを見落としていました。ここで私の質問を説明すると、私はそれに思いつきました:
FastCGIは、すべての要求に対して新しいプロセスを作成する代わりに、その存続期間中に多くの要求を処理する単一の永続プロセスを使用できます。 -ウィキペディア:FastCGI
他のヒント
中程度の負荷でも、CGIは非常にスケーラブルな獣です。 FastCGIはオプションですが、おそらくXXXXがあなたの言語の名前であるmod_XXXXパッケージも見つかるでしょう。たとえば、ruby、perl、およびpythonのmodがあり、おそらく他にもかなりの数があります。