7

Phusion パッセンジャー + Apache Web サーバーでデプロイされた Ruby on Rails アプリケーションがあります。各リクエストは、Phusion Passenger によって生成された独自のスレッドで実行されますか?

4

2 に答える 2

7

Passenger は (他のほとんどのアプリケーション サーバーと同様に)、スレッドごとに 1 つのリクエストしか実行しません。通常、プロセスごとに 1 つのスレッドしかありません。Phusion Passenger ドキュメントから:

Phusion Passenger は、2 つの同時実行モデルをサポートしています。

  • process : シングルスレッド、マルチプロセス I/O 同時実行。各アプリケーション プロセスには 1 つのスレッドしかなく、一度に 1 つの要求しか処理できません。これは、Ruby アプリケーションが伝統的に使用していた同時実行モデルです。優れた互換性 (スレッドセーフに設計されていないアプリケーションで動作可能) を備えていますが、アプリケーションが大量の外部 I/O (HTTP API 呼び出しなど) を待機する必要があり、より多くのメモリを使用するワークロードには適していません。各プロセスには大きなメモリ オーバーヘッドがあります。

  • thread : マルチスレッド、マルチプロセス I/O の同時実行。各アプリケーション プロセスには複数のスレッドがあります (PassengerThreadCount でカスタマイズ可能)。このモデルでは、同じプロセス内でスレッドが互いにメモリを共有するため、I/O の同時実行性が大幅に向上し、使用するメモリが少なくなります。ただし、アプリケーションがスレッドセーフになるように設計されていない場合、このモデルを使用すると、互換性の問題が発生する可能性があります。

(私自身のものを強調)

于 2013-09-06T02:23:42.900 に答える
0

Passenger オープン ソース エディションは、Apache 仮想ホスト ファイルにリストされているように、アプリケーションごとに 1 つのスレッドのみを使用します (nginx についてはわかりません)。したがって、同じ apache サーバー上でアプリの複数のインスタンスを実行することも考えられますが、アプリを複数のディレクトリにインストールし、それらのディレクトリに vhosts エントリを指定し、その前にある種のロード バランサーを配置する必要があります。Passenger Enterprise では、同時実行性をより細かく制御できます。

編集:明快。

于 2014-03-21T00:11:30.190 に答える