1. ホーム
  2. apache

[解決済み] プレフォークウェブサーバーモデルとは何ですか?

2022-06-15 08:28:21

質問

ウェブサーバが自分自身を pre-fork ウェブサーバと表現しているときの正確な意味を知りたいのです。私は次のようないくつかの例を持っています。 ユニコーン は ruby 用、そして グニコーン は python 用です。

具体的には、こんな質問です。

  • このモデルはどのような問題を解決するのですか?
  • pre-fork Web サーバーが最初に起動されたとき、何が起こりますか?
  • どのようにリクエストを処理するのでしょうか?

あと、unicorn/gunicornにもっと具体的な質問です。

例えば、私が(g)unicornで実行したいウェブアプリケーションを持っているとします。初期化時に、ウェブアプリはいくつかの初期化処理を行います (たとえば、追加のデータベースエントリを埋めます)。(g)unicornを複数のワーカーで構成した場合、初期化処理は複数回実行されるのでしょうか?

どうすれば解決しますか?

Pre-forkingとは、基本的にマスターが各リクエストを処理するフォークを作成することを意味します。フォークは完全に独立した *nix プロセスです。

以下のコメントに従って更新しました。その prepre-fork は、これらのプロセスがリクエストが来る前に fork されることを意味します。しかし、通常、負荷の上昇や下降に合わせて増減させることができます。

スレッドセーフでないライブラリがある場合、事前フォークを使用することができます。これはまた、問題を引き起こすリクエスト内の問題が、サーバー全体ではなく、それらが処理されるプロセスにのみ影響することを意味します。

初期化が複数回実行されることは、すべてあなたがデプロイしているものに依存します。通常、接続プールやそのような性質のものは、各プロセスに存在します。

スレッドモデルでは、マスターはリクエストをディスパッチするために軽量なスレッドを作成します。しかし、スレッドが大規模な問題を引き起こすと、マスター プロセスに影響を与える可能性があります。

Nginx、Apache 2.4 の Event MPM、または gevent (Gunicorn で使用可能) などのツールでは、これらは非同期であり、プロセスがブロックすることなく何百ものリクエストを処理することができます。