开源流程引擎Camunda技术架构

Camunda是一个基于JAVA的框架,支持用于工作流和流程自动化的BPMN、用于案例管理的CMMN和用于业务决策管理的DMN 。
本篇文章我们仅考虑BPMN流程引擎,先不涉及CMMN和DMN引擎 。就流程引擎而言,Camunda是一个灵活的工作流框架,它的核心是一个在Java虚拟机内部运行的原生BPMN 2.0流程引擎,因此它可以嵌入到任何Java应用程序或运行时容器中 。Camunda与Java EE 集成,并可以与Spring Framework和Spring Boot完美匹配 。
一、Camunda的总体架构Camunda BPMS到底包括哪些功能,我们拿官方的一张架构图进行解读分析 。

开源流程引擎Camunda技术架构

文章插图
 
1.从BPM应用维度看
Camunda分为流程设计和流程运行两个阶段,见图中最下方的蓝色大箭头,Model和Execute,按照这两个阶段,Camunda划分为两大部分功能,对应设计阶段的功能有 Modeler,对应运行阶段的功能有Engine、TaskList、Cockpit、Admin 。
2.从BPM功能维度看
Camunda包括了流程设计器(Modeler)、流程引擎(Engine)、API接口(REST/Java API)、任务列表(TaskList)、流程管理控制台(Cockpit)、系统管理工具(Admin) 。在Camunda商业产品中还包括了流程监控预警工具(Optimize)、流程协同设计工具(Cawemo) 。这里重点先说一下Camunda流程设计器,支持两种模式,一种是富客户端的流程建模工具Camunda Modeler,需要在客户端安装;另一种是基于浏览器的流程设计器bpmn.io,这两款软件均开源 。
3.从BPM角色维度看
Camunda分为业务分析师、流程开发工程师、最终用户、流程管理员、系统管理员这几个角色,每个角色对应BPMS不同的功能 。业务分析师、流程开发工程师使用流程设计器(Modeler)进行流程建模,最终用户使用任务列表(TaskList)进行流程发起和审批,流程管理员使用流程管理控制台(Cockpit)进行流程管理,比如流程暂停恢复、流程异常干预等,系统管理员使用系统管理工具(Admin)进行系统管理,比如组织用户管理、权限管理等 。
 
二、Camunda的集成能力1.支持与Spring框架集成
Camunda支持与spring框架集成,把 camunda-engine-spring框架引入到项目的maven模块内,它可以与Spring 3、4或5版本一起使用,具体集成过程后面有文章单独介绍 。
2.支持与spring boot集成
后面文章专题介绍
3.支持与CDI and Java EE 集成
CDI (Context and Dependency Injection)是 Java EE6的标准和依赖注入,Camunda通过camunda-engine-cdi模块集成可利用camunda引擎的配置和cdi的可扩展性 。
4.支持与Runtime Container 集成
支持与Tomcat、JBoss等常见的运行容器集成 。
 
三、Camunda支持的部署架构Camunda BPM是一个灵活的框架,支持嵌入式、分布式、集群等多种部署模式 。
1.嵌入式部署
流程引擎以Jar包方式添加到应用程序中,通过这种方式,可以在应用程序生命周期中轻松启动和停止流程引擎 。
开源流程引擎Camunda技术架构

文章插图
 
2.基于web容器启动,多应用共享
流程引擎在运行时容器(Servlet容器、应用程序服务器等)中启动,流程引擎作为容器服务提供,可以由容器内部署的所有应用程序共享 。这种方式在实际应用场景中不多见 。
开源流程引擎Camunda技术架构

文章插图
 
【开源流程引擎Camunda技术架构】3.独立部署,多应用共享
在这种情况下,流程引擎独立部署,通过网络提供服务,网络上运行的不同应用程序可以通过远程通信通道与进程引擎交互,远程访问流程引擎的最简单方法是使用内置的REST服务接口 。在企业级流程中心部署架构中,这是一种最常见的部署模式,在现在的微服务部署架构中,也可以采取这种方式 。
开源流程引擎Camunda技术架构

文章插图
 
4.集群部署
为了提供扩展或故障转移功能,流程引擎可以分布到集群中的不同节点,每个流程引擎实例都必须连接到共享数据库 。Camunda BPM不提供现成的负载平衡功能,可以采用Nginx等第三方负载均衡软件实现 。
四、Camunda依赖的第三方类库本文介绍了第三方库及其在Camunda中的使用 。对于Camunda的每个组件,都列出了第三方库 。对于每个库,都解释了该库是必需的依赖项还是可选的依赖项 。必需的依赖是Camunda提供核心功能所依赖的库 。在下面的列表中标记为(Required Dependency) 。可选的依赖项是可以与Camunda集成的库 。在下面的列表中标记为(可选依赖项) 。


推荐阅读