自研工作流、开源引擎二开、商业 BPM,企业应该如何选择?
企业选择工作流建设路线,真正要决定的不是“要不要花许可证的钱”,而是:流程执行内核、审批产品能力和长期演进责任,分别由谁承担。
先给结论。对绝大多数拥有 Java 团队、强调私有化部署和业务适配的企业,默认优先级通常是:成熟开源引擎作为内核,在稳定边界外建设自己的流程平台;当上线速度、完整工具链、厂商 SLA 和治理认证比自主控制更重要时,选择商业 BPM;只有当流程执行语义本身就是企业的战略资产,而且现有引擎确实无法满足时,才考虑从零自研工作流引擎。
这里有一个必须先澄清的概念:基于 Flowable、Activiti 等开源内核,自己开发组织、表单、门户、审批动作和运维平台,属于“开源引擎二开”或“自研工作流平台”,不等于“从零自研工作流引擎”。这两个概念混在一起,往往是选型失误的起点。

图 1 三种路线的核心差异,不是代码归属,而是速度、控制权与责任边界。
一、三条建设路线与决策前提
1. 路线一:从零自研工作流引擎
企业自行设计流程定义格式、解析器、执行语义、状态持久化、任务与作业系统、历史审计、版本迁移和运维工具。即便流程图仍采用 BPMN,运行时内核也由企业自己实现。
这条路线获得了最大的控制权,也承担了最大的正确性责任。它不是“写几个审批表和状态字段”,而是建设一个需要长期兼容、持续升级的基础软件产品。
2. 路线二:基于开源引擎扩展开发
企业采用成熟引擎承担 BPMN 执行、任务状态、变量、定时器、历史记录等基础能力,在外层建设组织身份、电子表单、审批操作、消息、门户、移动端、审计和业务集成。
Flowable 开源引擎采用 Apache License 2.0,官方仓库将其描述为可嵌入、可作为服务或运行于集群与云环境的 Java 流程引擎,并提供 BPMN、CMMN、DMN 及 Java、REST 接口。它所提供的是可靠的“执行内核”,而不是完整 OA 产品。
3. 路线三:采购商业 BPM 平台
企业购买已经产品化的平台能力,通常包括可视化建模、表单、任务中心、权限、安全、报表、运行监控、发布治理和厂商支持。IBM Business Automation Workflow、Flowable Enterprise、Camunda 8 Enterprise 等都属于这一大类,但它们的定位、许可和技术架构并不相同。
商业 BPM 不是“完全不开发”,而是把更多通用能力、升级路径和支持责任交给供应商,企业团队把精力集中在业务模型、系统集成和组织落地上。
| 对比项 | 从零自研引擎 | 开源引擎二开 | 商业 BPM |
|---|---|---|---|
| 核心执行语义 | 企业负责 | 开源社区与企业共同承担 | 厂商负责 |
| 产品层能力 | 全部自建 | 按需自建 | 大量现成能力 |
| 首次上线速度 | 慢 | 中等 | 通常最快 |
| 技术控制权 | 最高 | 较高 | 受产品与许可约束 |
| 厂商 SLA | 无,内部兜底 | 可自行维护或购买支持 | 通常可购买明确 SLA |
| 升级责任 | 全部由企业承担 | 企业负责适配与回归 | 厂商提供路径,企业仍需验证 |
| 适合对象 | 极少数战略型团队 | 多数技术驱动型企业 | 强调交付与治理的企业 |
4. 为什么“自研一个引擎”看上去并不难
一个最小审批 Demo 的确不复杂:流程定义一张表、流程实例一张表、待办任务一张表,再用状态机推动“提交—审批—结束”。两三名工程师在较短时间内就能让第一个请假流程跑起来。
问题是,Demo 验证的是“主路径能走通”,生产系统需要证明的是“所有异常路径都不会破坏状态”。随着使用范围扩大,团队会连续遇到下面这些问题:
- 并行分支何时汇聚,重复回调如何幂等;
- 定时任务执行到一半宕机,怎样重试又不重复办理;
- 加签、减签、转办、委派、回退和跳转后,历史轨迹如何解释;
- 流程定义升级后,运行中的旧实例继续按哪个版本执行;
- 变量结构改变、节点删除、网关条件改变时,存量实例如何迁移;
- 数据库死锁、乐观锁冲突和消息重复投递如何处理;
- 删除、撤销和管理员干预如何留下不可抵赖的审计证据;
- 集群、容灾、备份恢复和跨版本升级怎样验证。
这些能力不会在第一次演示时出现,却决定了系统能否支撑五年、十年的核心业务。
二、自研工作流:能力清单与适用边界
1. 从零自研真正需要建设什么

图 2 越靠近执行内核,错误的影响范围越大;越靠近业务体验,越需要企业自身知识。
一个可长期运行的工作流体系至少包含六层责任。
(1)流程语言与模型层
如果采用 BPMN 2.0,需要处理事件、网关、子流程、边界事件、多实例、补偿、调用活动等语义;如果不采用标准,还要自行定义交换格式、版本规则和建模器协议。OMG 的 BPMN 2.0.2 规范解决的是统一表示与语义基础,真正正确地实现这些语义仍然是引擎开发者的责任。
(2)运行时与一致性层
包括命令上下文、执行树或 Token、任务生命周期、变量作用域、事务边界、并发控制、作业重试和消息关联。这里的缺陷通常不是界面 Bug,而是数据状态错误。
(3)持久化、历史与迁移层
运行时表要高效,历史表要可审计,流程定义要可版本化,数据库脚本要覆盖多个版本与多种数据库。迁移既包括表结构升级,也包括运行中流程实例的语义迁移。
(4)运维与可观测层
需要提供失败作业查询、重试、挂起、终止、变量修复、实例迁移、容量监控、指标、日志关联和告警。没有运维工具的引擎,在生产故障中几乎等于不可控。
(5)产品与协同层
包括组织、身份、表单、统一待办、消息、门户、移动端、附件、电子签名、审计、流程分析以及中国式审批动作。这一层离业务最近,也是开源引擎最需要扩展的部分。
(6)质量与安全层
要建立模型兼容性测试、并发测试、故障注入、跨版本回归、权限隔离、漏洞响应、依赖治理和数据脱敏。自研意味着这些证据不能等待社区或厂商提供。
2. 什么时候才值得从零自研
从零自研不是绝对错误,但应同时满足多个苛刻条件:
- 流程执行语义本身构成企业的核心竞争力,而不只是支撑报销、采购或合同审批;
- 主流开源与商业产品经过原型验证后,仍无法满足关键语义、延迟、规模或部署约束;
- 企业愿意长期保留一个基础软件团队,而不是项目验收后就解散;
- 有能力维护建模、运行时、持久化、运维、测试、安全和文档等完整产品面;
- 能接受前三年投入明显高于购买或二开的现实;
- 管理层认可“内核稳定优先于业务需求插队”,允许团队做持续重构和兼容性建设。
典型场景可能包括超大规模事件编排、具有独特补偿语义的交易网络、受特殊硬实时或离线环境约束的系统,以及工作流能力本身就是对外销售产品的公司。
如果企业的诉求只是增加会签、加签、回退、跳转、撤销,通常不足以证明应当从零自研。这些更适合通过引擎扩展、领域服务和审计模型解决。
三、开源引擎二开:默认优选、责任边界与许可证
1. 开源引擎二开为什么常常是默认优选
开源二开的价值,不只是节省许可证费用,而是把“通用而困难的执行内核”和“企业独有的产品能力”分开。
成熟引擎已经经历了大量流程语义、并发、持久化和版本演进验证。企业可以把工程资源放到组织模型、审批体验、业务集成和治理上,同时保留私有化部署、源码审计和可替换能力。
这条路线尤其适合具备以下条件的企业:
- 已有稳定的 Java 与数据库团队;
- 业务要求内网、专有云或信创环境部署;
- OA 审批动作复杂,标准产品需要大量适配;
- 需要把流程嵌入多个业务系统,而不是单独建设一个孤立 BPM 门户;
- 愿意建设统一流程平台,并持续维护平台 API;
- 对厂商锁定敏感,希望保留数据和模型退出能力。
但“开源”不等于“免费交付”。企业仍要为架构、二开、测试、运维、安全、升级和人才连续性付费。真正健康的预算方式,是把许可证节省下来的部分转移到平台工程和长期质量上。
2. 开源二开的边界应该画在哪里
最稳妥的原则是:内核少改,外围厚建;业务只调用平台 API,不直接依赖引擎内部表和内部类。
建议保留的稳定内核包括 BPMN 解析、执行状态、任务生命周期、变量、作业、历史与持久化。建议在外层建设:
- 统一流程定义与发布服务;
- 组织候选人解析与动态权限服务;
- 业务主键和流程实例映射;
- 会签、加签、转办、委派、回退、跳转、撤销等审批操作域;
- 表单数据、字段权限、附件和签名;
- 统一待办、门户、移动端和消息中心;
- 审计、对账、监控、统计和运维控制台;
- 面向业务系统的稳定 REST 或事件接口。
不要让业务代码直接查询运行时表,也不要大面积修改开源引擎核心包。前者会把表结构变成无法升级的“公共 API”,后者会让每次合并上游版本都变成一场手工移植。
3. “开源、源代码可见、可商用”不是同一件事
选型时必须把产品版本、组件和部署方式逐一对应到许可证,而不能只看项目名称。
例如,Flowable OSS 引擎仓库采用 Apache License 2.0;但 Flowable Enterprise 提供的低代码设计、完整应用、报表、丰富表单、任务管理、安全与支持属于商业能力。Camunda 8 自 8.6 起,Zeebe、Operate、Tasklist、Identity 和 Optimize 等组件采用 Camunda License v1,官方明确说明生产环境自托管需要 Enterprise License。源代码可查看,不等于可以不受限制地用于生产。
企业法务与架构团队至少要确认:
- 生产使用、修改、再分发和 SaaS 场景是否允许;
- 哪些组件属于开源,哪些属于商业许可;
- 容器镜像、客户端、建模器和运维工具是否采用相同许可;
- 是否按实例、节点、用户、流程量或环境收费;
- 测试、灾备、冷备和开发环境是否计费;
- 许可终止后,数据、模型、运行实例和工具能否继续使用。
许可证判断应以项目官方仓库、官方文档和正式合同为准,不能以博客中的“开源”标签代替法务审查。
四、商业 BPM:购买价值、现实代价与退出机制
1. 商业 BPM 的许可证到底买到了什么

图 3 许可证只是可见成本之一;三条路线只是把成本放在了不同科目。
商业 BPM 的价格不能只与“开源下载为零”比较。许可证通常购买的是一组已经产品化并被持续维护的能力:
- 建模、表单、任务、门户、搜索、报表和管理工具;
- 身份、安全、租户、权限与审计框架;
- 安装、补丁、升级说明与兼容性路径;
- 厂商知识库、技术支持和问题升级机制;
- 参考架构、容量建议、认证矩阵和部分合规证据;
- 更快的原型验证和较确定的交付范围。
Flowable 官方的社区版与商业版对比就明确显示,社区版主要提供引擎,而低代码、丰富表单、可配置任务管理、报表、安全与支持属于商业平台能力。IBM Business Automation Workflow 则将流程与案例管理、设计运行环境和分析作为完整商业产品交付,并支持传统虚拟机部署与容器化 Kubernetes 环境。
因此,商业 BPM 最适合“时间与确定性比许可证价格更贵”的项目,例如集团级流程治理、强审计行业、跨地域项目,以及内部技术团队规模有限但上线窗口明确的组织。
2. 商业 BPM 的代价也必须写进决策
商业产品不是风险消失,而是风险类型改变。
(1)许可与扩容风险
业务增长、节点扩容、灾备环境和新增用户可能改变费用。采购时必须模拟未来三到五年的规模,而不是只按首期用户数报价。
(2)产品边界与定制风险
商业平台在标准能力上速度很快,但深度改造可能受扩展点、前端框架、脚本语言和发布机制限制。越偏离产品推荐路径,升级成本越高。
(3)厂商锁定与退出风险
流程模型采用 BPMN,并不意味着完整应用可以无损迁移。表单、权限、连接器、任务 UI、报表、历史数据和运维配置通常具有产品专属性。
(4)版本与生命周期风险
企业仍需跟踪产品支持周期、升级窗口、安全补丁和依赖环境。厂商负责发布升级路径,不代表企业可以省略回归和数据备份。
五、统一比较:十维模型、五年 TCO 与私有化部署
1. 用十个维度比较三条路线
| 决策维度 | 从零自研引擎 | 开源引擎二开 | 商业 BPM |
|---|---|---|---|
| 战略差异化 | 仅在内核语义独特时有价值 | 适合差异化产品层 | 适合标准化治理 |
| 首次交付周期 | 最长 | 中等 | 通常最短 |
| 私有化控制 | 最高 | 高 | 取决于产品版本与合同 |
| 深度定制 | 最高,但成本也最高 | 高,边界设计决定质量 | 中等,受扩展机制约束 |
| 标准兼容 | 自己证明 | 依赖选定引擎并自行验证 | 厂商声明并提供支持范围 |
| 运维工具 | 全部自建 | 开源基础加自建 | 通常较完整 |
| 安全与合规证据 | 全部自建 | 企业与供应方共同补齐 | 厂商可提供更多材料 |
| 升级可预测性 | 取决于内部纪律 | 取决于定制侵入度 | 相对较高,但需合同保障 |
| 人才连续性 | 风险最高 | 需要 Java、BPMN 和平台团队 | 需要产品专家与集成团队 |
| 退出与替换 | 源码可控,维护负担长期存在 | 通过适配层可保留替换能力 | 必须提前设计数据与模型出口 |
任何“某条路线总是最好”的结论都不可靠。企业应按自身目标设置权重,而不是照抄统一评分。
2. 五年 TCO 应该怎样算
建议采用下面的模型,而不是只比较首年采购价:
五年 TCO = 许可证或订阅 + 实施 + 定制 + 集成 + 基础设施 + 运维 + 升级迁移 + 安全合规 + 支持与培训 + 故障损失 + 退出迁移 − 可复用资产价值
(1)自研路线容易漏算的成本
内核团队工资、测试平台、数据库适配、运维控制台、安全响应、文档、关键人员流失、跨版本兼容和生产事故。更关键的是机会成本:基础团队修复引擎问题时,业务功能就会延后。
(2)开源二开容易漏算的成本
平台适配层、审批产品能力、上游版本跟踪、回归基线、开源合规、疑难问题定位以及核心维护者培养。开源项目活跃不等于有人替企业承担生产 SLA。
(3)商业 BPM 容易漏算的成本
许可证增长、专业服务、产品专家、定制组件维护、升级项目、不可替代连接器以及合同结束后的数据迁移。
正确做法是以三种典型业务规模建立场景:首年范围、第三年扩展、第五年集团化;分别估算用户、流程定义、峰值任务量、环境数量、集群节点和定制深度,再做敏感性分析。
3. 私有化部署会怎样改变答案
私有化不是“把安装包放进内网”这么简单,它意味着企业或供应商必须负责容量、网络、安全、证书、备份、容灾、监控、升级和漏洞处置。
Camunda 官方对 Self-Managed 的定义非常直接:客户负责整个技术栈的部署、扩展、安全、维护和更新;官方生产部署推荐 Kubernetes 与 Helm。这个例子说明,即使购买商业许可,自托管的基础设施责任也不会自动转移给厂商。
私有化选型应额外验证:
- 是否支持企业指定的操作系统、JDK、数据库、中间件和 Kubernetes 版本;
- 是否允许完全离线安装、镜像同步和补丁获取;
- 高可用、同城双活、异地灾备的恢复目标能否证明;
- 密钥、证书、日志、附件和历史数据如何备份;
- 国产数据库、CPU、操作系统或信创环境的认证范围;
- 漏洞响应时限和补丁交付渠道;
- 厂商远程支持无法接入生产环境时,如何采集诊断包。
如果企业没有成熟的平台工程能力,商业 BPM 的产品优势也可能被部署复杂度抵消;如果企业已经拥有统一 Kubernetes、可观测和安全基线,开源二开的边际成本会明显下降。
六、中国式 OA 与平台工程实践如何改变答案
1. 中国式 OA 审批会怎样改变答案
中国式 OA 常见的会签、加签、减签、转办、委派、回退、跳转、撤销、催办、传阅、签名和意见,并不只是 BPMN 图形上的节点变化。
例如“回退到指定节点”至少涉及当前任务如何结束、并行分支如何处理、已完成任务是否重开、变量是否回滚、候选人如何重算、历史轨迹如何展示、消息是否撤回,以及业务数据是否允许恢复。把这些全部塞进引擎核心,会让上游升级极其困难;完全放在界面层,又会破坏一致性和审计。
更合理的架构是建设“审批操作域”:
- 接收统一操作命令和业务上下文;
- 校验发起人、任务权限和流程状态;
- 生成可审计的操作计划;
- 通过引擎适配器执行标准或扩展命令;
- 同步更新意见、附件、业务状态和消息;
- 对失败事务进行补偿、对账和告警。
这正是开源引擎二开的优势区域:内核负责可靠状态推进,平台负责解释企业审批语义。
2. 从项目代码看,真正的“开源二开”包含什么
以云程低代码开发平台当前项目为例,流程能力并不是简单调用一次 completeTask。项目已经在远程接口和 REST 层抽象了跳转、加签并提交、加签、回退上一节点、回退指定节点、委派、转办、催办、传阅、阅办和退回首节点等操作;同时配套个人待办、待阅、委托、任务权限校验、组织服务、PC 与移动表单、流程分析、门户配置和 UniApp 待办入口。

这类代码结构说明,企业需要长期维护的是“审批产品域 + 组织表单门户 + 引擎适配层”,而不是不断侵入引擎源码。平台 API 越稳定,未来升级引擎或更换内核时,业务系统受到的影响越小。

七、企业画像与决策树
1. 不同类型企业可以怎样选
(1)成长型企业或单一业务线
流程数量有限、需求变化快、预算敏感,优先选择成熟开源引擎加轻量平台层。不要一开始复制集团级能力,也不要从零写引擎。先建立统一业务主键、流程 API、待办与审计。
(2)中大型集团与多业务平台
如果拥有长期 Java 平台团队,且流程需要深度嵌入 ERP、CRM、采购和合同系统,开源二开通常能在自主控制与成本之间取得较好平衡。需要重点投入多租户、组织权限、发布治理、统一待办、运维和升级基线。
(3)金融、能源、政务等强监管组织
应优先考虑可证明的安全、审计、灾备、支持和生命周期。商业 BPM 或“商业支持的开源内核 + 企业平台”往往比纯社区方案更稳妥。选型不能停留在功能演示,必须把部署认证、漏洞 SLA 和现场支持写入合同。
(4)软件厂商与行业解决方案商
如果工作流平台是对外产品的一部分,开源内核加自研产品层通常更利于形成行业差异化;若引擎运行语义就是产品核心,并且有足够研发规模,才进一步评估自研内核。
(5)技术团队薄弱但交付时间刚性
商业 BPM 更有优势。许可证费用可能高于开源方案,但完整工具链和供应商支持能降低组织协调成本。应避免为了节省显性采购费用,启动一个无法持续维护的“伪自研”项目。
2. 一张决策树快速判断

图 4 先判断战略差异化,再判断交付确定性与自主控制,最后才比较产品。
决策时建议按下面的顺序提问:
- 现有引擎无法满足的,究竟是执行语义,还是表单、组织和审批产品能力?
- 这项差异是否会持续形成商业价值,足以支撑长期内核团队?
- 项目是否有不可延期的上线窗口和厂商 SLA 要求?
- 私有化、信创、源码审计和深度集成是否是硬约束?
- 企业能否承诺五年以上的维护、升级和人才预算?
- 即使首选方案失败,模型、数据和业务 API 是否可退出?
如果第一个问题的答案是“外围产品能力”,就不应该从零自研引擎;如果交付期限和合规证明压倒一切,应优先评估商业 BPM;如果控制权、深度集成和长期平台化更重要,开源二开通常更合适。
八、PoC、采购合同与混合架构落地
1. PoC 不要只演示画流程图
一个可信的 PoC 应使用真实流程、真实组织和接近生产的数据规模,至少覆盖:
- 串行、并行、条件分支、子流程、定时器和消息事件;
- 会签比例、动态加签、回退、跳转、撤销和管理员干预;
- 表单字段权限、附件、签名、意见和移动端办理;
- 同一业务单据的幂等发起与重复提交;
- 节点宕机、数据库锁冲突、作业失败和消息重复;
- 流程定义升级、运行实例迁移和历史数据查询;
- 峰值任务创建、完成与统一待办查询;
- 备份恢复、跨环境发布、监控告警和审计导出。
PoC 的输出不应只有演示视频,还应包括差距清单、二开工作量、许可证解释、部署拓扑、容量结果、升级验证和退出方案。
2. RFP 与合同里最容易遗漏什么
商业采购或商业支持合同应明确:
- 许可计量口径以及开发、测试、灾备环境的授权;
- 支持的 JDK、数据库、容器平台和操作系统矩阵;
- 严重故障响应、临时规避方案和正式补丁时限;
- 安全漏洞通知与修复时限;
- 产品生命周期、长期支持版本和升级服务边界;
- 定制扩展是否影响原厂支持;
- 终止许可后数据、模型、附件、审计记录的导出权;
- 厂商被收购、产品停更或重大改版时的保护条款;
- 性能承诺的业务模型、硬件条件和测试方法。
开源方案也需要内部“服务协议”:明确内核维护人、上游跟踪频率、漏洞责任、升级节奏、回归门槛和生产问题升级路径。
3. 用混合架构降低长期锁定
现实中最优方案经常不是纯粹三选一,而是分层组合:
- 使用开源或商业引擎承担执行内核;
- 企业持有业务主键、表单数据、组织身份和领域状态;
- 通过稳定的流程平台 API 隔离业务系统与具体引擎;
- 将消息、附件、审计和报表放在企业可控的数据域;
- 对 BPMN 模型、变量、历史和运行实例建立标准导出;
- 对专有表单、连接器和脚本建立替代清单;
- 用契约测试保证引擎适配器可以演进。
这种架构不会让替换变得“零成本”,但能把替换从全量重写变成可计划的迁移项目。
九、最终建议:先选责任模式,再选产品
企业可以采用三步法做最终决策。
第一步,确定工作流对企业究竟是通用基础设施、业务平台能力,还是战略产品内核。大多数企业属于前两类。
第二步,确定愿意承担的责任。需要最大控制权,就必须接受最大维护责任;需要最快交付和最明确的支持,就要接受许可证与产品边界;希望两者平衡,就要建设清晰的开源二开边界。
第三步,才进入具体产品对比。对候选引擎和平台进行真实 PoC,并把五年 TCO、部署责任、升级路径、人才连续性和退出成本放进同一张决策表。
最终可以归纳为:
- 从零自研引擎:只适合执行语义构成战略差异、且企业愿意长期经营基础软件的少数场景;
- 开源引擎二开:适合有平台研发能力、重视私有化与深度集成的大多数技术驱动型企业;
- 商业 BPM:适合重视交付速度、完整工具、治理证据和厂商 SLA 的企业;
- 混合模式:适合希望利用成熟内核或商业能力,同时保留业务数据、领域 API 与退出能力的组织。

浙公网安备 33010602011771号