跳转到主要内容

显示 Helm Chart 值

helm show values dify/dify

1. 调整基础资源

你可以通过调整 Helm Chart 中各服务的副本数和资源配置提升 Dify 的整体吞吐。实际配置应结合业务负载、集群资源、数据库连接上限和队列积压情况逐步调整。
分类组件ReplicasRequest CPURequest MemLimit CPULimit Mem备注
核心应用组件API211 GB12 GB根据 API QPS 和响应时间横向扩容
Worker444 GB48 GB默认兜底 worker,3.9.x 推荐优先参考 additionalWorkers 拆分策略
Worker Beat112 GB24 GB固定 1 副本,不建议扩容
Web10.51 GB12 GB根据前端访问量横向扩容
Sandbox122 GB24 GB根据代码执行任务量调整
企业版组件Enterprise122 GB22 GB按需扩容
Enterprise_Audit112 GB24 GB按需扩容
Enterprise_Frontend112 GB12 GB按需扩容
Enterprise Collector112 GB24 GB遥测/链路追踪采集器,默认启用,按可观测性负载扩容
插件组件Plugin Daemon112 GB24 GB插件调用和安装量较大时调整
Plugin Controller10.51 GB12 GB按需扩容
Plugin Connector112 GB12 GB按需扩容
Plugin Manager112 GB24 GB按需扩容
基础组件SSRF Proxy10.50.5 GB11 GB按需扩容
Gateway112 GB24 GB插件流量较大时调整
Unstructured-----按文档解析任务量调整
基础配置示例:
api:
  replicas: 2
  serverWorkerAmount: 1
  resources:
    requests:
      cpu: 1
      memory: 1Gi
    limits:
      cpu: 1
      memory: 2Gi

worker:
  replicas: 4
  celeryWorkerAmount: 1
  resources:
    requests:
      cpu: 4
      memory: 4Gi
    limits:
      cpu: 4
      memory: 8Gi

workerBeat:
  resources:
    requests:
      cpu: 1
      memory: 2Gi
    limits:
      cpu: 2
      memory: 4Gi

2. 按队列拆分 Worker

3.9.x 的 Helm Chart 支持通过 additionalWorkers 将原本由默认 worker 处理的 Celery 队列拆分到独立 Deployment。这样可以对不同类型任务独立设置副本数、CPU、内存和调度策略。 默认 worker 是兜底 worker,会消费所有队列。启用 additionalWorkers 后有两种常见方式:
  • 保守模式:保留 worker.enabled: true,只额外启用热点队列的专用 worker。适合初次调优,默认 worker 继续兜底消费未拆分队列。
  • 完全拆分模式:设置 worker.enabled: false,并确保所有实际使用的队列都有对应的 additionalWorkers 消费。否则相关后台任务会积压。
常见拆分如下:
Worker队列适用场景
dataset-workerdataset,priority_dataset,pipeline,priority_pipeline知识库导入、文档解析、索引构建压力较大
workflow-workerworkflow,workflow_storage,workflow_based_app_execution工作流执行量或工作流存储任务较多
general-workermail,ops_trace,app_deletion,conversation,api_token,plugin,retention,enterprise_telemetry邮件、会话、插件、清理、审计和遥测等后台任务
trigger-workerschedule_poller,schedule_executor,triggered_workflow_dispatcher,trigger_refresh_executor定时任务、触发器相关任务
如果关闭默认 worker,请确认数据集、工作流、通用后台任务和触发器队列都已有对应 worker 消费。只开启部分 additionalWorkers 后直接关闭默认 worker,可能导致未覆盖队列无人消费。
保守模式示例:
worker:
  enabled: true
  replicas: 1

additionalWorkers:
  - name: workflow-worker
    enabled: true
    replicas: 2
    celeryQueues: "workflow,workflow_storage,workflow_based_app_execution"
    celeryWorkerAmount: 2
    resources:
      requests:
        cpu: 2
        memory: 4Gi
      limits:
        cpu: 4
        memory: 8Gi
完全拆分模式示例:
worker:
  enabled: false

additionalWorkers:
  - name: dataset-worker
    enabled: true
    replicas: 1
    celeryQueues: "dataset,priority_dataset,pipeline,priority_pipeline"
    celeryWorkerAmount: 4

  - name: workflow-worker
    enabled: true
    replicas: 2
    celeryQueues: "workflow,workflow_storage,workflow_based_app_execution"
    celeryWorkerAmount: 2

  - name: general-worker
    enabled: true
    replicas: 1
    celeryQueues: "mail,ops_trace,app_deletion,conversation,api_token,plugin,retention,enterprise_telemetry"
    celeryWorkerAmount: 1

  - name: trigger-worker
    enabled: true
    replicas: 1
    celeryQueues: "schedule_poller,schedule_executor,triggered_workflow_dispatcher,trigger_refresh_executor"
    celeryWorkerAmount: 1
调优建议:
  • 并发任务多、队列积压明显时,优先增加对应 worker 的 replicas
  • 单个任务本身很重、Pod 内存持续接近 limit 或出现 OOMKilled 时,提高对应 worker 的 memory limit。
  • 不建议盲目增大 celeryWorkerAmount。它会增加单 Pod 并发,也会增加数据库连接、Redis 连接和内存压力。
  • workerBeat 只负责定时任务调度,应保持 1 副本。

3. 优化外部 Postgres 数据库性能

3.1 计算数据库最大连接数

在配置数据库时,需要根据 API 和所有 worker 的连接池上限估算所需的最大连接数:
数据库最大连接数 =
  (SQLALCHEMY_POOL_SIZE + SQLALCHEMY_MAX_OVERFLOW) × API serverWorkerAmount × API replicas
+ (SQLALCHEMY_POOL_SIZE + SQLALCHEMY_MAX_OVERFLOW) × 默认 worker celeryWorkerAmount × 默认 worker replicas
+ Σ[(SQLALCHEMY_POOL_SIZE + SQLALCHEMY_MAX_OVERFLOW) × additionalWorker celeryWorkerAmount × additionalWorker replicas]
示例:
  • API: replicas=2, serverWorkerAmount=1
  • 默认 Worker: replicas=4, celeryWorkerAmount=1
  • SQLALCHEMY_POOL_SIZE=100
  • SQLALCHEMY_MAX_OVERFLOW=150
则最大连接数为:
(100 + 150) × 1 × 2 + (100 + 150) × 1 × 4 = 500 + 1000 = 1500
建议在计算结果基础上预留 20-30% 的余量,以应对突发流量。上述示例中,建议将 max_connections 设置为 1800-2000 或更高,并结合数据库实例规格确认可承载。

4. 性能监控建议

症状可能原因解决方案
API 响应慢API replicas 或 serverWorkerAmount 不足;数据库慢查询增加 API replicas,排查数据库慢查询
Workflow 队列积压workflow-worker 处理能力不足增加 workflow-worker.replicas,必要时提高资源限制
知识库导入慢dataset-worker 资源不足;文档解析或向量库写入慢启用或扩容 dataset-worker,检查 Unstructured 和向量数据库
邮件、插件、清理任务延迟general-worker 队列积压启用或扩容 general-worker
定时任务或触发器延迟trigger-worker 队列积压启用或扩容 trigger-worker,保持 workerBeat 为 1 副本
数据库连接耗尽API/worker 并发和连接池配置过高增加 max_connections 或降低连接池/并发配置
内存溢出单任务内存占用高或 memory limit 过低增加对应组件 memory limit,定位高内存任务
CPU 节流CPU limit 过低增加对应组件 CPU limit 或 replicas