概述

本页面主要描述 Activepieces 的主要组件及其工作流执行机制。

组件

架构图

Activepieces:

  • App(应用):组织从 API 到定时任务等一切内容的主应用程序。
  • Worker(工作节点):轮询新作业,从池中分配沙箱,使用引擎在沙箱内执行工作流,并将结果发送回应用。
  • Sandbox(沙箱):隔离的执行环境,管理进程生命周期、资源限制以及通过 WebSocket 与引擎的通信。
  • Engine(引擎):解析工作流 JSON 并执行它的 TypeScript 代码。编译为单个 JS 文件,在沙箱内运行。
  • UI(用户界面):使用 React 编写的前端。

第三方组件:

  • Postgres:Activepieces 的主数据库。
  • Redis:使用 BullMQ 为队列提供支持。

可靠性与可扩展性

Postgres 和 Redis 的高可用性不在本文档的讨论范围内,因为许多云提供商已经实现了最佳实践来确保其可用性。
  • 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:此包包含仅在付费版本中可用的功能。