Skip to main content

Display Helm Chart Values

1. Adjust Base Resources

Tune replicas and resource limits based on workload, cluster capacity, database connection limits, and queue backlog. Base configuration example:
workerBeat should always run as a single replica. Do not scale it horizontally.

2. Split Workers by Queue

In 3.9.x, the Helm chart supports additionalWorkers. It splits Celery queues that were previously handled by the default worker into dedicated Deployments. Each worker can have its own replicas, CPU, memory, and scheduling policy. The default worker is a catch-all worker and consumes all queues. After enabling additionalWorkers, use one of the following patterns:
  • Conservative mode: keep worker.enabled: true and only enable dedicated workers for hot queues. The default worker continues to consume queues that have not been split out.
  • Full split mode: set worker.enabled: false and make sure every queue used by your deployment is consumed by an enabled additionalWorkers entry. Otherwise, background tasks in uncovered queues will accumulate.
Common worker splits:
If you disable the default worker, confirm that dataset, workflow, general background, and trigger queues are all covered by enabled workers. Disabling the default worker after enabling only part of additionalWorkers can leave some queues without consumers.
Conservative mode example:
Full split mode example:
Recommendations:
  • If concurrency is high or a queue backlog is visible, increase the corresponding worker’s replicas first.
  • If a single task is memory-heavy, memory usage stays close to the limit, or pods are OOMKilled, increase the corresponding worker’s memory limit.
  • Do not blindly increase celeryWorkerAmount. It increases per-pod concurrency and may increase database connections, Redis connections, and memory usage.
  • Keep workerBeat at one replica. It schedules tasks but does not replace worker queue consumers.

3. Improve External Postgres Performance

Estimate required max_connections from API and worker concurrency:
Example:
  • API: replicas=2, serverWorkerAmount=1
  • Default worker: replicas=4, celeryWorkerAmount=1
  • SQLALCHEMY_POOL_SIZE=100
  • SQLALCHEMY_MAX_OVERFLOW=150
Reserve 20-30% headroom for traffic spikes. In this example, set max_connections to 1800-2000 or higher, and confirm that your database instance can support it.

4. Performance Monitoring