1. ホーム
  2. python

[解決済み] Celeryの並行処理、ワーカー、オートスケールの違いについて

2023-07-28 14:20:49

質問

私の /etc/defaults/celeryd の設定ファイルで、私は

CELERYD_NODES="agent1 agent2 agent3 agent4 agent5 agent6 agent7 agent8"
CELERYD_OPTS="--autoscale=10,3 --concurrency=5"

デーモンが8つのcelery workerを生成することは理解できたのですが、どのように autoscaleconcurrency が一緒になっています。concurrencyはワーカーが使えるスレッドの最大数を指定するもので、autoscaleは必要に応じて子ワーカーをスケールアップ、スケールダウンさせるものだと思っていました。

タスクは大きなペイロード (約 20-50kB) を持ち、そのようなタスクは 2-3 万件ありますが、各タスクは 1 秒未満で実行されます。ブローカーがすべてのワーカーにタスクを配布し、ペイロードを複数回複製するため、メモリ使用量が急上昇しているのがわかります。

問題は設定にあり、ワーカー + 同時実行 + オートスケールの組み合わせは過剰だと思うので、これら 3 つのオプションが何を行うのか、もっと理解を深めたいと思います。

どのように解決すればいいのでしょうか?

ワーカーとワーカープロセスを区別して考えましょう。celery ワーカーを生成し、これがいくつかのプロセスを生成します (たとえば --concurrency--autoscale で、デフォルトではマシンのコア数と同じ数のプロセスが生成されます)。ルーティングを行うのでなければ、特定のマシンで複数のワーカーを実行する意味はありません。

私は、デフォルトのプロセス数で、マシンあたり 1 つのワーカーだけを実行することを提案します。これは、ワーカー間のデータの重複を排除することで、メモリ使用量を削減します。

それでもメモリに問題がある場合は、データをストアに保存し、ワーカーには ID だけを渡します。