Gunicorn: 質問:すべてのワーカーが忙しく、リクエストが届いた場合はどうなりますか?

作成日 2019年01月28日  ·  3コメント  ·  ソース: benoitc/gunicorn

私はどちらかを疑う:

  • 要求は、ワーカーが解放されるまでブロックされます。
  • リクエストは失敗します(例:直接HTTP 504ゲートウェイタイムアウト応答、またはNginxなどのアップストリームプロキシによってHTTP 504ゲートウェイタイムアウトとして報告される接続クローズ)

(私はこの質問をGunicornメーリングリストに投稿しようとしていますが、それを直接行う方法について明確な指示を見つけることができませんでした。したがって、Githubの問題を作成することが正しいルートであるといいのですが。)

Question Discussion

全てのコメント3件

それはそれのための良い場所です:)あなたはすでにそこにいくつかの情報を見つけることができます: http

とにかくそれは依存します。 NGINXの背後にあるGunicornを使用すると、同期ワーカーでも複数の接続を受け入れることができます。 Nginxバッファーで多くの待機を行うことができる間、N個の要求(Nはワーカーの数)を同時に処理します。 私はほとんどの場合、これは10Kを超える同時接続で非常に大規模なWebサイトを実行するのに十分です。

他の使用法では、非同期ワーカーがあります。 NGINXまたは接続をバッ​​ファリングできるプロキシは引き続きこれらのワーカーを支援し、Gunicornがより多くの同時接続を処理したり、一部の接続を長期間開いたままにしたりできるようにします。

私があなたの質問に答えたことを望みます。

Gunicornについてのみ回答するには:

バックログ設定は、OSリッスンバックログの深さを指定します。 バックログがいっぱいになると、要求はOSによって拒否され、ゲートウェイはアップストリーム接続に失敗します。 バックログがいっぱいでない場合、接続はOSによって開かれますが、Gunicornワーカーがリクエストを受け入れる準備ができるまで、Gunicornによって処理されません。 Gunicornがリクエストを迅速に処理しない場合、ゲートウェイはアップストリームタイムアウトを返す可能性があります。

アップストリームタイムアウトが多く、Gunicornの前でリバースプロキシを使用して実行している場合は、プロキシをより効率的にフェイルオーバーできるように、バックログを減らすことをお勧めします。

皆さん、ありがとう。 これらの答えは役に立ちます。

このページは役に立ちましたか?
0 / 5 - 0 評価