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


94

Webサーバーが自身をpre-fork Webサーバーとして説明する場合、それが正確に何を意味するのか知りたいです。RubyのユニコーンやPythonのgunicornなど、いくつかの例があります。

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

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

また、ユニコーン/ユニコーンに関するより具体的な質問:

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

回答:


102

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

以下のコメントに従って更新してください。要求がで来る前に、これらのプロセスをフォークしていることを意味している。しかし彼らは通常、増加または負荷が上下に行くとして減少することができます。prepre-fork

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

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

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

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


28
「プリフォーク」の意味についても同様の疑問がありました。当然のことながらある種の分岐を意味すると思いましたが、「前」の部分は私を混乱させていました。私はここでabbreviations.com/preforkを見つけました。「pre」の部分は実際にはワーカープロセスが事前に作成されることを意味するため、ワーカーが必要な場合にのみforkが無駄になりません。私には多くの意味があります:)
El Ninja Trepador '10

1
//、@ ElNinjaTrepador、別の答えを追加してみませんか?少なくとも私にはもっとわかりやすくなりました。そのコメントがより目立つ場所になれば、他の人の役に立つかもしれません。
Nathan Basanese

2
答えを更新して、プリフォークのプリに関する情報をもう少し追加しました。@ElNinjaTrepadorこれを指摘してくれてありがとう。よく知られていないことに気づかなかった。
Joe Doherty

1
@NathanBasaneseが担当します;)
El Ninja Trepador

4
@JoeDoherty多分それはよく知られています、それはその時まで私には知られていませんでした:DIは(ネイサンの要求に従って)別の回答を追加するつもりでしたが、あなたが私にあなたが言ったことを追加したので、それはもう必要ありません: )
El Ninja Trepador 2016年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.