ウェブサーバーがプリフォークウェブサーバーであると自称する場合、それが具体的に何を意味するのか知りたいです。次のような例がいくつかあります。ユニコーンルビーとガンコーンPython用。
具体的には、次のような質問です。
- このモデルはどのような問題を解決しますか?
- プリフォーク Web サーバーを最初に起動すると何が起こりますか?
- リクエストはどのように処理されますか?
また、ユニコーン/ガンユニコーンに関するより具体的な質問:
(g)unicorn で実行したい Web アプリケーションがあるとします。初期化時に、Web アプリケーションはいくつかの初期化処理 (追加のデータベース エントリの入力など) を実行します。(g)unicorn を複数のワーカーで構成した場合、初期化処理は複数回実行されますか?
ベストアンサー1
事前フォークとは、基本的にマスターが各リクエストを処理するフォークを作成することを意味します。フォークは完全に独立した *nix プロセスです。
以下のコメントに従って更新します。
pre
in はpre-fork
、リクエストが到着する前にこれらのプロセスがフォークされることを意味します。ただし、通常は負荷の増減に応じて増加または減少する可能性があります。
スレッドセーフでないライブラリがある場合、事前フォークを使用できます。また、問題を引き起こすリクエスト内の問題は、サーバー全体ではなく、処理されるプロセスにのみ影響することを意味します。
初期化を複数回実行するかどうかは、デプロイするものによって異なります。ただし、通常は、接続プールやその種のものが各プロセスに存在します。
スレッド モデルでは、マスターはリクエストをディスパッチするために軽量のスレッドも作成します。ただし、スレッドが大きな問題を引き起こすと、マスター プロセスに影響を及ぼす可能性があります。
Nginx、Apache 2.4 の Event MPM、gevent (Gunicorn で使用可能) などのツールを使用すると、これらは非同期になり、プロセスはブロックすることなく何百ものリクエストを処理できます。