Skip to main content

Helm Chart の値を確認する

1. 基本リソースを調整する

Dify のスループットは、Helm Chart の replicas と resources を調整することで改善できます。実際の値は、ワークロード、クラスタ容量、データベース接続上限、キューの滞留状況を見ながら段階的に調整してください。
workerBeat は常に 1 replica で実行してください。水平スケールは推奨されません。

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 を無効化する場合は、dataset、workflow、general background、trigger の各キューがすべて有効な worker によって消費されていることを確認してください。一部の additionalWorkers だけを有効化してデフォルト worker を無効化すると、未カバーのキューが消費されなくなる可能性があります。
保守的な方式の例:
完全分割方式の例:
推奨事項:
  • 並行タスクが多い、またはキュー滞留が見える場合は、まず対応する 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=100
  • SQLALCHEMY_MAX_OVERFLOW=150
突発的なトラフィックに備えて、計算結果に 20-30% の余裕を持たせることを推奨します。この例では max_connections を 1800-2000 以上に設定し、データベースインスタンスがその接続数を処理できることを確認してください。

4. パフォーマンス監視