Helm Chart の値を確認する
1. 基本リソースを調整する
Dify のスループットは、Helm Chart の replicas と resources を調整することで改善できます。実際の値は、ワークロード、クラスタ容量、データベース接続上限、キューの滞留状況を見ながら段階的に調整してください。2. キューごとに Worker を分割する
3.9.x の Helm Chart ではadditionalWorkers を利用できます。これにより、従来デフォルトの worker が処理していた Celery キューを専用 Deployment に分割し、キューごとに replicas、CPU、メモリ、スケジューリングポリシーを調整できます。
デフォルトの worker は catch-all worker としてすべてのキューを消費します。additionalWorkers を有効化する場合は、次のどちらかの方式を選択してください。
- 保守的な方式:
worker.enabled: trueのまま、負荷の高いキューだけ専用 worker を追加します。分割していないキューはデフォルト worker が引き続き処理します。 - 完全分割方式:
worker.enabled: falseにし、利用しているすべてのキューが有効なadditionalWorkersによって消費されることを確認します。未カバーのキューがあると、バックグラウンドタスクが滞留します。
保守的な方式の例:
- 並行タスクが多い、またはキュー滞留が見える場合は、まず対応する worker の
replicasを増やします。 - 単一タスクのメモリ使用量が大きい、メモリ使用量が limit に近い、または OOMKilled が発生する場合は、対応する worker の memory limit を増やします。
celeryWorkerAmountをむやみに増やさないでください。Pod 内並行数が増える一方で、DB 接続、Redis 接続、メモリ使用量も増加します。workerBeatは 1 replica のまま維持します。これはタスクをスケジュールするだけで、worker キューの consumer ではありません。
3. 外部 Postgres のパフォーマンスを改善する
API と worker の並行数から、必要なmax_connections を見積もります。
- API: replicas=2, serverWorkerAmount=1
- Default worker: replicas=4, celeryWorkerAmount=1
SQLALCHEMY_POOL_SIZE=100SQLALCHEMY_MAX_OVERFLOW=150