news 2026/9/13 2:29:07

Activepieces 生产环境怎么按峰值并发流程数计算 worker 与 app 数量并配置推荐参数?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Activepieces 生产环境怎么按峰值并发流程数计算 worker 与 app 数量并配置推荐参数?

Activepieces 生产环境怎么按峰值并发流程数计算 worker 与 app 数量并配置推荐参数?

【免费下载链接】activepiecesAI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents项目地址: https://gitcode.com/GitHub_Trending/ac/activepieces

在 Activepieces 上生产环境的核心容量问题只有一个数字:峰值并发流程数(peak concurrent flows)。官方推荐的生产形态是“一个 worker 只跑一个流程”,worker 和 app 的数量、单实例规格、以及执行相关的环境变量都从这一个数字推导出来。本文按 Production Setup 给出的方法,走一遍完整的计算与配置过程:确定组件数量、拆分 app 与 worker 容器、配置推荐参数、启用 S3,最后验证容量是否到位。

计算模型:worker = 峰值并发流程数,app = worker / 10

并发为 1 的 worker 会占用一个流程的整个运行时长(最长 10 分钟),所以容量按“同时有多少个流程在跑”来算,而不是按触发速率:

workers = peak concurrent flows apps = ceil(workers / 10)

官方文档给出的组件规格与数量规则如下:

组件单实例规格数量
Worker0.5 vCPU / 1 GB,并发 1每个并发流程一个
App1 vCPU / 1 GB每 10 个 worker 一个
Postgres(托管)2 vCPU / 4 GB(起点值)1 个,按峰值吞吐扩容
Redis(托管)1 vCPU / 1 GB1 个
对象存储(S3)与计算同区域,开启签名 URL必需

代入示例:峰值并发 50 个流程 →50 个 worker(合计 25 vCPU / 50 GB)+5 个 app(合计 5 vCPU / 5 GB)。超出容量的请求会排队在 Redis 中,等 worker 空出槽位后再执行。

有两个直接影响计算的约束:

  • Postgres 不随 worker 数量静止。Benchmark 的测量显示数据库 CPU 跟吞吐走,大约每 req/s 消耗 2.5 millicores;官方明确说 2 vCPU 只是小规模集群的起点,要随集群一起扩容,不能只把 worker 数量当唯一旋钮。
  • 按峰值静态预置。Autoscaling 的实测数据表明:热节点上新 worker 约 5 s 就绪,但需要新节点时要 ~85–90 s,赶不上同步 webhook 的 30 s 响应预算。因此建议把最小副本数保持在同步 webhook 的峰值之上,再把峰值以上的突发余量交给自动伸缩。

配置推荐执行参数

Production Setup 给出的推荐配置,正是 benchmark 测量所用的执行参数:

AP_WORKER_CONCURRENCY=1 AP_REUSE_SANDBOX=true AP_EXECUTION_MODE=SANDBOX_CODE_ONLY AP_FILE_STORAGE_LOCATION=S3 AP_S3_USE_SIGNED_URLS=true

注意这些变量放在哪一侧容器:

  • 拆分的部署(app 与 worker 分开):AP_WORKER_CONCURRENCYAP_REUSE_SANDBOXAP_EXECUTION_MODE设在worker容器上,S3 相关的两个变量设在app容器上。
  • 单容器同时跑两种角色(AP_CONTAINER_TYPE=WORKER_AND_APP,默认值):全部设在这一个容器上。

两点需要知道的边界:

  • 出厂默认AP_WORKER_CONCURRENCY=5,是过渡性的兼容模式,一个容器里跑多个沙箱会扩大 OOM 影响面;Workers 与 Limits 都建议改为 1 并用副本数扩容。如果暂时不想改形态,可以保留并发 5,但每个 worker 要按约 5 倍规格(≈5 GB)给。
  • 使用 Worker Groups(给特定项目预留专属 worker 池)时,分组 worker 必须保持AP_EXECUTION_MODE=SANDBOX_PROCESS,code-only 模式会被拒绝,并且AP_REUSE_SANDBOX必须显式设置(true 或 false)。这是本文主路径的一个可选分支,只有需要给租户/项目做容量隔离时才引入。

S3 是生产形态的硬性要求而非可选项:没有它,所有 flow bundle 和 piece 存档都会挤过 app 层,上面引用的吞吐数据不再成立。完整环境变量(bucket、密钥、region 等)见 S3 Storage。

前提:把 app 和 worker 拆成两种容器

推荐形态是“薄的 app 层 + 并发 1 的 worker 层”。如果你现在跑的是默认的单容器(同一镜像同时提供 API/UI 和内嵌 worker),按 Separate Workers 的路径操作,先在下层环境验证再上生产:

  1. 现有容器改为 app。设置AP_CONTAINER_TYPE=APP,它就不再拉取流程,只提供 API 和 UI。默认值是WORKER_AND_APP,不设这个变量的话 app 会继续跑内嵌 worker。

  2. 生成 worker token。用 CLI 生成,输入与 app 相同的AP_JWT_SECRET,token 会打印在终端:

    npx @activepieces/cli workers token
  3. 新起 worker 容器,只设三个环境变量(worker 不持有 Redis 或数据库凭据,仅通过AP_FRONTEND_URL访问 app):

    AP_CONTAINER_TYPE=WORKER AP_FRONTEND_URL=https://your-instance-url AP_WORKER_TOKEN=<第一步生成的 token>

    其中AP_FRONTEND_URL替换为你实例的公网 URL(worker 访问$AP_FRONTEND_URL/api),AP_WORKER_TOKEN替换为上一步生成的 token。再叠加推荐执行参数AP_WORKER_CONCURRENCY=1AP_REUSE_SANDBOX=trueAP_EXECUTION_MODE=SANDBOX_CODE_ONLY

  4. 保持总槽位不变slots = 容器数 × 并发数。官方迁移示例:改造前 10 个 worker × 并发 5(每个约 2.5 vCPU / 5 GB),改造后 50 个 worker × 并发 1(每个 0.5 vCPU / 1 GB),总槽位都是 50。

验证:确认 worker 在线,并压测定位瓶颈

第一步:确认 worker 被 app 识别。在 Platform Admin Console 的 Infra → Workers 页面确认所有 worker 可见、在线。

第二步:用官方 CLI 对自己部署做压测诊断。它会创建一个一次性项目(跑完自动删除,不碰你的真实项目),发布一个同步 webhook 流程,打流量并输出一份分阶段的诊断报告:

AP_API_KEY=<平台管理员 API key> npx @activepieces/cli@latest benchmark --url https://your-instance.example.com

其中AP_API_KEY替换为你的平台管理员级 API key,--url替换为你实例的地址。并发数默认等于你的执行槽位数(所有已连接 worker 的AP_WORKER_CONCURRENCY之和),保证请求不会在并发 1 的 worker 后面排队,测到的是真实服务时间。

输出里的关键判读(来自 Benchmark 文档):

  • QUEUE大且 queue depth 持续增长 → 驱动的并发超过了槽位数,是容量不足而非服务慢;
  • RUN≫ 200 ms → 流程本身更重,或 worker CPU 不足;
  • storage≫ 240 ms → 对象存储跨区或限流;
  • 报告结尾的 verdict 会给出queue-bound(并发超槽位)还是service-bound(真实引擎耗时)的结论。

文档给过一份小规模部署的示例输出(4 worker、并发 4、200 请求),其中 RUN p50 约 201 ms、verdict 为 service-bound。这是文档示例,不是你必须复现的固定数值;你的流程重量和硬件不同,数值会不同,判读方法一样:逐层比较、定位占主导的那一层。

规模扩大时的已知边界

  • 超过 ~80 个 worker 后,worker 不再是唯一旋钮。benchmark 实测(GKE、1:10 配比、S3 签名 URL、同区域对象存储):40/80/120/160 worker 对应 213 / 484 / 641 / 777 req/s,单 worker 速率在 80 worker 处达峰(6.1 req/s)后回落约 20%。原因是共享的数据库 CPU 随吞吐线性增长,官方结论是“随集群一起扩容 Postgres”,但该 benchmark 未证明数据库就是瓶颈,只是给出了审慎的扩容方向。
  • 1:10 配比的依据:app 单核在每一档负载下稳定在 ~0.52–0.61 核,是突发时 app 层不先成为墙面的余量。
  • worker 崩溃可恢复:worker 无状态,Redis 租约丢失或进程崩溃时 BullMQ 会重排任务,由其他 worker 接管并跳过已完成步骤,滚动 worker 前不需要先排空流量(详见 Guarantees)。
  • 与容量相关的关键限制(默认值/环境变量):流程运行超时 600 s(AP_FLOW_TIMEOUT_SECONDS)、同步 webhook 响应 30 s(AP_WEBHOOK_TIMEOUT_SECONDS)、webhook 载荷 25 MB、单流程文件 25 MB(AP_MAX_FILE_SIZE_MB)。并发 1 时 worker 容器 1 GB 内存上限就是流程的内存上限,超出会被 OOM 并重新排队;更大或更长的处理应拆成多个流程。

完整的限制表在 Limits,扩容决策的完整实测数据(容量到达时间、缩容安全性)在 Autoscaling。

【免费下载链接】activepiecesAI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents项目地址: https://gitcode.com/GitHub_Trending/ac/activepieces

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/13 2:27:13

C#中与的本质区别:短路逻辑 vs 位运算

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/13 2:26:37

Nginx代理WebSocket配置指南:握手、保活、容量与排障

我最早接触这个需求&#xff0c;是在接手一个内部协同工具的时候。前端用 WebSocket 做实时消息推送&#xff0c;本地开发一切正常&#xff0c;代码一部署到 Nginx 后面就频繁掉线&#xff0c;浏览器控制台隔几分钟就刷一条WebSocket onclose code: 1006&#xff0c;用户那边直…

作者头像 李华
网站建设 2026/9/13 2:25:40

LVS负载均衡实战:从DR模式到Keepalived高可用及空闲超时调优

LVS 这个技术&#xff0c;我在生产环境里摸爬滚打了快十年&#xff0c;每次和同行聊起负载均衡&#xff0c;总绕不开它。你说它老&#xff0c;确实老——章文嵩博士早在 1998 年就提出了这个方案&#xff0c;二十多年过去了&#xff0c;Nginx、Envoy 这些新生代轮番登场&#x…

作者头像 李华
网站建设 2026/9/13 2:25:31

统信UOS深度体验:安装激活、软件生态与运维踩坑全记录

说实话&#xff0c;这台装着统信UOS的机器在我桌上躺了快两个月&#xff0c;期间我无数次想把它格式化回Ubuntu&#xff0c;但每次气消之后又觉得它其实没那么不堪。我身边很多人一听我拿UOS当主力机折腾&#xff0c;第一反应都是"你闲得慌吧"&#xff0c;但做运维这…

作者头像 李华
网站建设 2026/9/13 2:21:22

Spring Boot 开发者如何让 IDEA 变轻:5 项实操优化

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华