gunicorn によって提供される Django アプリケーションと Celery タスク キューを実行するサーバーが 1 つあります。
ガンイコーンドキュメントは示唆するデフォルトのワーカー数は (2 x $num_cores) + 1 です。
セロリのドキュメントCelery ワーカーの数はデフォルトで 1 x $num_cores になることを示します。
そして、どちらも適切な数を見つけるために実験することを提案しています。
私の質問は、Gunicorn と Celery の両方を同じマシンで実行する場合の良い目安は何でしょうか? 8 コアのマシンでは、17 個の Gunicorn ワーカーと 8 個の Celery ワーカーから始めるべきでしょうか? それとも、9 個の Gunicorn ワーカーと 4 個の Celery ワーカーから始めるのが理にかなっているでしょうか?
役に立つかもしれないが、システムは CPU に依存している。
答え1
パフォーマンス チューニングは、厳格なルールよりも口先だけのほうがよくあります。最近、誰かが悪用した Django アプリで同様のことを行う必要がありました。Gunicorn と Celery の両方を同じマシンで実行する場合、Gunicorn ワーカーを最大限に活用するのではなく、よりバランスの取れたアプローチから始めるのが理想的です。これが私のアプローチです。
ガンイコーンワーカー:
- 2 * $num_cores + 1という式を使用して、Gunicornワーカーの数を少し減らして開始します。
- 8コアマシンの場合、8〜12個のGunicornワーカーから始めることができます。
- この理由は、Celery タスクは CPU を大量に消費する可能性があるため、Celery ワーカー用に CPU リソースが残っていることを確認する必要があるためです。
セロリ労働者:
- 「推奨」数のCeleryワーカーを使用することができます
- 1 * $num_coresとして定義できます
- たとえば、8 コアのマシンの場合は、8 つの Celery ワーカーから開始できます。
したがって、8 コアのマシンでは、適切な初期設定は次のようになります。
- ガンイコーン: 8~12人の労働者
- セロリ: 8人の労働者
目標は、Gunicorn ワーカーに負担をかけないようにし、少なくとも Celery ワーカーのために CPU リソースを残すことです。