概述
本页面主要描述 Activepieces 的主要组件及其工作流执行机制。
组件
Activepieces:
- App(应用):组织从 API 到定时任务等一切内容的主应用程序。
- Worker(工作节点):轮询新作业,从池中分配沙箱,使用引擎在沙箱内执行工作流,并将结果发送回应用。
- Sandbox(沙箱):隔离的执行环境,管理进程生命周期、资源限制以及通过 WebSocket 与引擎的通信。
- Engine(引擎):解析工作流 JSON 并执行它的 TypeScript 代码。编译为单个 JS 文件,在沙箱内运行。
- UI(用户界面):使用 React 编写的前端。
第三方组件:
- Postgres:Activepieces 的主数据库。
- Redis:使用 BullMQ 为队列提供支持。
可靠性与可扩展性
-
Webhook: 所有 webhook 都发送到 Activepieces 应用,由应用进行基本验证并添加到队列中。发生流量尖峰时,webhook 会被加入队列等待处理。
-
轮询触发器: 所有定期作业都会添加到 Redis 中。如果发生故障,错过的作业将重新执行。
-
工作流执行: 工作节点从队列中轮询作业。发生流量尖峰时,工作流执行仍然可以工作,但可能会根据尖峰的大小而延迟。
要扩展 Activepieces,通常需要增加工作节点、应用或 Postgres 数据库的副本数。一个较小的 Redis 实例就足够了,因为它每秒可以处理数千个作业,很少成为瓶颈。
仓库结构
仓库采用 Turbo 作为 monorepo 结构,使用 TypeScript 作为主要语言。它分为以下几个包:
.
├── packages
│ ├── web
│ ├── server
│ │ ├── api
│ │ ├── worker
│ │ ├── engine
│ │ ├── sandbox
│ │ └── common
│ ├── ee
│ ├── pieces
│ └── shared
web:此包包含用户界面,使用 React 框架实现。api:此包包含使用 TypeScript 和 Fastify 框架编写的主应用程序。worker:此包包含接受工作流作业并使用引擎执行它们的逻辑。server-sandbox:此包包含沙箱执行环境,包括进程隔离、池管理以及工作节点与引擎之间的 WebSocket 通信。common:此包包含工作节点和应用之间的共享逻辑。engine:此包包含沙箱内的工作流执行逻辑。位于server/engine下。pieces:此包包含第三方应用的触发器和动作的实现。shared:此包包含其他包使用的共享数据模型和辅助函数。ee:此包包含仅在付费版本中可用的功能。