什么是BPMN
BPMN(Business Process Model and Notation)是一种业务流程建模和表示的标准化符号和标记语言。它提供了一种可视化的方式来描述、分析和交流业务流程。
BPMN的设计目标是提供一个通用的标准,使得不同角色和利益相关者可以理解和协同工作。它的主要应用领域是业务流程管理(Business Process Management,BPM),旨在促进业务流程的可视化、分析、自动化和持续优化。BPMN使用一系列图形符号来表示不同的业务流程元素,包括:
- 活动(Activities):表示流程中执行的任务、活动或工作步骤,如人工任务、自动任务等。网关(Gateways):表示决策点或分支合并点,用于控制流程的走向和条件。
- 事件(Events):表示流程中发生的事件,如开始事件、结束事件、中间事件等。
- 连接对象(Connecting Objects):用于连接活动、网关和事件,表示流程的顺序和流转路径,包括顺序流、消息流和关联关系。
- 泳道(Swimlanes):用于组织和分类流程中的活动和角色,可以是池(Pool)或游程(Lane)。
通过使用这些符号和标记,BPMN提供了一种统一的语言来描述业务流程的结构、逻辑和行为。它使得业务人员、分析师和开发人员可以在一个共同的框架下交流和理解业务流程,促进了业务流程的可视化和改进。 BPMN还支持扩展和附加信息的注释,如业务规则、数据对象、流程变量等。这些附加信息可以更详细地描述业务流程的执行和行为。
BPMN框架的发展
BPMN(Business Process Model and Notation)框架的发展可以追溯到2004年,BPMN 1.0 版本的发布。自2004年以来,BPMN框架在业界得到广泛认可和采用,并不断演化和发展。,其发展主要有以下特点:
- BPMN 1.x版本:BPMN 1.x 版本是最早的BPMN规范,定义了一套符号和标记来表示业务流程。它提供了基本的流程建模能力,包括活动、网关、事件和连接对象等元素。BPMN 1.x 版本在工业界得到了广泛应用,但其符号和语义的表达能力有限。
- BPMN 2.0版本:BPMN 2.0 版本于2011年发布,是目前应用最广泛的版本。BPMN 2.0 引入了许多新的特性和扩展,包括子流程、数据对象、消息流和业务规则等。它提供了更强大的建模和执行能力,支持更复杂的业务场景。BPMN 2.0 还定义了XML格式的标准,用于流程定义的交换和存储。
- BPMN框架的开源实现:随着BPMN的发展,一些开源的BPMN框架应运而生。其中,Activiti、Flowable和Camunda是目前最受欢迎的开源BPMN框架。这些框架提供了完整的流程引擎和工作流功能,并支持与各种开发框架和技术的集成。它们在企业应用开发中得到广泛应用,为业务流程的建模、部署和执行提供了便利。
- 拓展和整合:BPMN框架的发展还涉及到与其他领域的整合。例如,与规则引擎的整合,使得业务规则和流程可以更紧密地结合;与微服务架构的整合,支持流程在分布式环境中的执行;与数据分析和人工智能的整合,为流程提供更智能的决策支持等。
- 业务驱动流程:近年来,BPMN框架的发展趋势之一是更加强调业务驱动的流程设计。传统的BPMN框架主要关注流程的自动化和执行,而现在越来越多的关注点放在与业务策略和业务价值的对齐上。因此,一些新的框架和方法论出现,如CMMN(Case Management Model and Notation)和DMN(Decision Model and Notation),用于支持更灵活和自适应的业务驱动流程。
总体而言,BPMN框架经历了从简单流程建模到复杂业务场景支持的演进。开源框架的兴起推动了BPMN的广泛应用,并为企业提供了强大的流程管理和工作流功能。随着业务需求的不断变化,BPMN框架将继续演化和扩展,以满足更复杂的业务流程需求。
开源BPMN框架
Activiti
Activiti 是一个开源的BPMN 2.0 工作流引擎,由于其易用性和灵活性,在中国广泛应用于各种企业应用。Activiti 提供了强大的流程引擎功能,包括流程定义、流程实例管理、任务管理等。它支持与各种Java开发框架集成,并提供了丰富的REST API,便于与其他系统进行集成。Activiti 的社区活跃,提供了良好的示例和文档。
Activiti的源头是由JBPM4流程引擎发展而来,activiti的版本比较复杂,目前activit有5.x,6.x和7.x三个版本,各个版本主要特性有:
Activiti 5.x :
- 支持JDK版本:JDK 6+
- 完整的流程引擎功能:Activiti 5.x 提供了完整的流程引擎功能,包括流程定义、流程实例管理、任务管理、历史数据记录等。
- 任务表单引擎:Activiti 5.x 引入了任务表单引擎,使用户可以创建和管理任务的用户界面,方便任务的输入和查看。
- 任务监听器和事件:Activiti 5.x 支持任务监听器和事件,可以在任务生命周期中触发自定义的监听器和事件处理逻辑。
- 高可用性:Activiti 5.x 提供了高可用性的配置选项,支持多个流程引擎实例的集群部署,提高系统的可靠性和容错性。
Activiti 6.x:
- 支持JDK版本:JDK 7+
- 流程设计器优化:Activiti 6.x 引入了新的流程设计器,提供了更现代化和易用的界面,支持更丰富的流程元素和交互操作。
- 支持CMMN 和 DMN :Activiti 6.x 添加了对 CMMN(Case Management Model and Notation)和 DMN(Decision Model and Notation)的支持,扩展了业务流程建模的能力。
- 应用模块化和模块复用:Activiti 6.x 引入了应用的模块化和模块复用概念,使得流程定义和任务可以以模块的形式进行组织和复用,
- 提高开发效率和可维护性。集成 Spring Boot:Activiti 6.x 支持与 Spring Boot 框架的集成,提供了更便捷的配置和部署方式,简化了开发和部署流程应用的流程。
- 版本兼容性:向前兼容activiti5.0版本
Activiti 7.x 特性:
- 支持JDK版本:7.1.0-M6是最后一个支持JDK1.8的版本,此后的版本都要求JDK11以上
- 完全基于微服务架构:Activiti 7.x 完全基于微服务架构设计,将流程引擎拆分为独立的微服务,提供了更高的可伸缩性和灵活性。
- 基于云的流程引擎:Activiti 7.x 针对云环境进行了优化,支持云原生应用开发和部署,集成了容器化和云服务,如 Docker 和 Kubernetes。
- 支持流程执行分布式事务:Activiti 7.x 引入了分布式事务的支持,使得流程执行可以跨多个服务和资源进行事务管理,确保数据的一致性和可靠性。
- 改进的流程设计器和建模工具:Activiti 7.x 提供了改进的流程设计器和建模工具,增强了用户体验和建模的可视化能力。
Flowable
Flowable 是一个基于Activiti项目发展而来的BPMN和流程引擎框架。Flowable 6.x 版本主要在 Activiti 5.x 的基础上进行了扩展和改进,增加了 CMMN 和 DMN 的支持,并对表单引擎、高可用性和扩展性进行了改进,flowable6.x支持activiti5版本的迁移。Flowable 提供了更强大的流程建模和执行能力,支持与Spring、Spring Boot和Spring Cloud等框架集成。它还提供了灵活的表单引擎和内容管理功能。Flowable 的社区支持良好,提供了全面的文档和示例,其主要特性如下:
-
BPMN 2.0 支持:Flowable 完全支持 BPMN 2.0 规范,提供了丰富的符号和标记来建模和表示业务流程。它支持流程定义、流程实例管理、任务管理、网关、事件等 BPMN 元素的使用。
-
强大的流程引擎功能:Flowable 提供了完整的流程引擎功能,包括流程定义和部署、流程实例管理、任务管理、流程变量、流程执行监听器、历史数据记录等。它支持各种类型的活动,包括用户任务、服务任务、脚本任务、接收任务等。
-
高可用性和扩展性:Flowable 可以通过水平扩展和集群配置来实现高可用性和性能扩展。它支持分布式部署和多个流程引擎实例的协同工作,提供了可靠的集群部署解决方案。
-
表单引擎:Flowable 提供了强大的表单引擎,支持各种类型的任务表单,包括动态表单、静态表单和外部表单。它可以与前端框架(如 Angular、React、Vue.js)进行集成,实现动态表单的渲染和交互。
-
决策表引擎:Flowable 集成了 DMN(Decision Model and Notation)规范,支持决策表的建模和执行。它允许将业务规则和决策逻辑与流程引擎进行集成,提供更灵活和可维护的决策管理。
-
Spring 和 Spring Boot 集成:Flowable 提供了与 Spring 和 Spring Boot 框架的紧密集成,可以作为这些框架的一部分进行配置和部署。它支持与 Spring Security 进行集成,提供了安全认证和授权功能。
-
完善的 REST API:Flowable 提供了丰富的 REST API,支持通过 HTTP 协议与流程引擎进行交互。这使得其他系统和应用可以方便地与 Flowable 进行集成和交互。
-
异步和事件驱动:Flowable 支持异步和事件驱动的流程执行模式,可以通过消息队列和事件机制实现流程的异步执行和通信。这种模式使得流程引擎更具弹性和可伸缩性。
Flowable除了提供开源版本flowable-engine,它还提供了商业收费版本:Flowable Work、Flowable Orchestrate和Flowable Engage ,下面我们看看flowable各个版本差异。(1)flowable基于activiti 6衍生出来的版本,Flowable开源版最新版本是Flowable 7.0.0-M1,开源版本仅仅提供了流程引擎、CMMN引擎、DMN引擎功能,其它功能需要扩展开发。Flowable开源版本目前仍在持续发展,其github上源码工程较多,有技术能力的团队,可用选择Flowable进行扩展开发。(2)Flowable Orchestrate除了支持Flowable开源版本的功能,还支持Automation Models、Case & Process Instances、High Availability & Scalability等功能。(3)Flowable Work是一个功能强大的低代码自动化平台。它建立在我们引擎的开源版本上,但通过将三个开放标准BPMN、CMMN和DMN的强大功能与低代码功能相结合,将业务流程管理提升到了一个新的水平。 Flowable Work是一个基于SaaS化的商业收费版本。
Camunda
Camunda也是基于Activiti5的,最新版本是Camunda7.17,开发团队也是从Activiti中分裂出来的,发展轨迹和Flowable相似。通过压力测试验证Camunda BPMN引擎性能和稳定性更好,功能完善;除了BPMN,Camunda还支持CMMN(案例管理)和DMN(决策自动化)。Camunda不仅带有引擎,还有很多强大的工具,用于建模、任务管理、监控和用户管理等。
- 轻量级和高性能:Camunda 设计为轻量级和高性能的流程引擎,能够处理大规模的流程和高并发的场景。它具有快速启动和执行速度,并优化了资源消耗,适用于各种规模的应用。
- 强大的流程引擎功能:Camunda 提供了完整的流程引擎功能,包括流程定义和部署、流程实例管理、任务管理、执行监听器、变量管理、历史数据记录等。它支持各种类型的活动,如用户任务、服务任务、脚本任务等。
- 高度可定制和可扩展:Camunda 具有高度可定制和可扩展的特性,可以根据业务需求进行定制开发。它支持插件和扩展机制,允许用户自定义和集成额外的功能和组件。
- Spring 框架的集成:Camunda 可以与 Java 和 Spring 框架无缝集成。它提供了与 Spring Boot 和 Spring Cloud 的集成支持,使用户能够更方便地进行配置和部署。
- 丰富的 REST API:Camunda 提供了丰富的 REST API,使得其他系统和应用可以通过 HTTP 协议与流程引擎进行交互。这使得 Camunda 可以与其他系统进行集成,并支持流程的远程控制和调用。
- 支持分布式流程执行:Camunda 支持分布式流程执行,可以将流程实例和任务分布在不同的节点和服务器上执行,以提高性能和可扩展性。它使用异步和消息机制实现节点之间的通信和协作。
- 支持决策表和规则引擎:Camunda 集成了 DMN(Decision Model and Notation)规范和规则引擎,允许用户建模和执行决策表,将业务规则和决策逻辑与流程引擎无缝集成。
Activiti、Flowable和Camunda选型和对比
- 功能对比
- 性能对比
待完善