web-dev-qa-db-ja.com

pre-fork Webサーバーモデルとは正確には何ですか?

Webサーバーがそれ自体をpre-fork Webサーバーとして説明するとき、それが何を意味するのかを知りたい nicorn for Ruby and gunicorn for python。

より具体的には、これらは質問です:

  • このモデルはどのような問題を解決しますか?
  • Pre-fork Webサーバーを最初に起動するとどうなりますか?
  • リクエストをどのように処理しますか?

また、Unicorn/gunicornに関するより具体的な質問:

(g)Unicornで実行したいwebappがあるとしましょう。初期化時に、webappはいくつかの初期化処理を行います(追加のデータベースエントリの入力など)。 (g)Unicornを複数のワーカーで構成した場合、初期化スタッフは複数回実行されますか?

76
Hery

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

以下のコメントに従って更新してください。 pre-forkpreは、リクエストが到着する前にこれらのプロセスが分岐されることを意味します。ただし、通常、負荷が増減するにつれて増減します。

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

複数回実行される初期化はすべて、展開するものによって異なります。ただし、通常、各プロセスには接続プールとその性質のものが存在します。

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

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

82
Joe Doherty