私はこの記事を読んでいます:
http://www.modrails.com/documentation/Architectural%20overview.html#web_app_models
Phusion PassengerがApache2を拡張してアプリケーションサーバーとして機能する方法について説明します。 HTTP要求が入ると、Phusion PassengerモジュールはPhusion Passengerが提供するアプリケーションがその要求を処理する必要があるかどうかを確認します。その場合、モジュールは必要に応じてアプリケーションのプロセスを生成します。要求をアプリケーションプロセスに渡し、応答をクライアントに返します。ビルドプロセスを改善するために、Passengerはビルドサーバーとして機能し、Ruby on Railsフレームワークコードとアプリケーションコードをメモリにキャッシュします。
これにより、新しい要求が入るたびにプロセスが生成されたときにキャッシュされたコードを参照し、プロセスをすばやく生成します。しかし、キャッシュの生成はhttpリクエストに比べてまだ高価です。したがって、アプリケーションプールが使用されます。アプリケーションプールが何であるかを理解していません。これが言う内容です:
結果のアプリケーションインスタンスはアクティブのままで、そのハンドルはこのプールに保存されるため、後で各アプリケーションインスタンスを再利用できます。その結果、パッセンジャーは平均的なケースパフォーマンスに非常に優れています。
「生き残る」と「このプールに保存されたハンドル」とはどういう意味ですか?私の考えでは、キャッシュは後でデータを維持することです。だから違いが何であるか理解していません。
ベストアンサー1
これにはバイナリのオン/オフの状況はありません。連続体です。
連続体の一つの極端は古いコンピュータグラフィックス画像処理Webプログラミングモデル:Webサーバーは、着信した各要求を処理するためにアプリケーションを再起動します。要求を処理した後、アプリケーションは終了します。毎回アプリケーションを再起動する必要があるため、再構築する必要があります。申請状況要求に従って。これは時間とデータスペースの両方で高価です。
そのため、時間の経過とともにコストを削減するために多くのオプションが作成されています。
クイックCGICGI モデルを使用しますが、初めて起動した後も CGI プログラムをアクティブに保ち、常に新しい要求を提供します。これにより、CGIプログラムを再起動するコストを回避できるだけでなく、アプリケーションがRAMに状態を保存できるようになります。
mod_{perl,php,ruby,...}
実際のアプリケーションインタプリタをWebサーバーインスタンスにインポートするこれらのシステムは、FastCGIと同じことを行う傾向があります。つまり、各スクリプトをロードしてそれを特定のタイプにコンパイルした後です。バイトコード、すべての操作をやり直す必要なく、新しい要求のみを提供します。あなたが話しているシステムは
mod_foo
それよりも高いレベルのシステムで、アプリケーション全体の論理モデルをRAMに保持するため、各要求に対して再生成する必要がはるかに少なくなります。mod_foo
これがあなたが得る基本的な振る舞いとまったく異なることを言うことはできません。しかし、重要なのは定性的な違いではなく、定量的な違いです。Phusion Passengerの目標を理解するのに役立つ次のステップは、すべてを単一の長期実行アプリケーションインスタンスで実行することです。これはWebサーバーベースのアプローチです。アランド働く、窒素など。 Apacheベースのアプリケーションの仕組みを比較するには、2番目のリンクを参照してください。
私は多くのJavaベースのアプリケーションサーバーが同じように動作すると思います。
結論は、これらすべてが最適化、スピードのためにRAMとランタイムの複雑さを取引するゲームであるということです。