camunda开源工作流平台技术架构

Camunda Platform 是一个基于 Java 的BPMN(流程引擎)、DMN(规则引擎)、CMMN(案例管理)的开源框架。主要组件是用 Java 编写的,主要专注于为 Java 开发人员提供在 JVM 上设计、实现和运行业务流程和工作流所需的工具(开源流程引擎、规则引擎等)。尽管如此,我们也希望将流程引擎技术提供给非 Java 开发人员。这就是为什么Camunda Platform还提供REST API,允许您构建连接到远程流程引擎的应用程序。Camunda7和Camunda8在架构上有重大差异,关于Camunda8的架构,以及Camunda7和Camunda8对比差别,请参考:https://lowcode.blog.csdn.net/article/details/129764438

文本重点介绍Camunda7版本的架构。

Camunda Platform 既可以用作独立的流程引擎服务器,也可以嵌入到自定义 Java 应用程序中。可嵌入性要求是Camunda Platform中许多架构决策的核心。例如,我们使流程引擎组件成为轻量级组件,尽可能少地依赖第三方库。此外,可嵌入性激发了编程模型的选择,例如流程引擎参与 Spring Managed 或 JTA 事务的能力以及线程模型

1、流程引擎架构

01-流程引擎架构(1)

  • Process Engine Public API:面向服务的 API,允许 Java 应用程序与 Process Engine 进行交互。流程引擎的不同职责(即流程存储库、运行时流程交互、任务管理等)被分离到各个服务中。公共 API 具有命令式访问模式:进入进程引擎的线程通过命令拦截器进行路由,该拦截器用于设置线程上下文,例如事务。
  • BPMN 2.0 核心引擎:这是流程引擎的核心。它具有用于图形结构的轻量级执行引擎(PVM - Process Virtual Machine)、一个将 BPMN 2.0 XML 文件转换为 Java 对象的 BPMN 2.0 解析器以及一组 BPMN 行为实现(为 BPMN 2.0 结构(如网关或服务任务)提供实现)。
  • 作业执行器:作业执行器负责处理进程中的异步后台工作,例如计时或异步延续。
  • 持久层:进程引擎具有一个持久层,负责将进程实例状态持久化到关系数据库。我们使用 MyBatis 映射引擎进行对象关系映射,支持常见的数据库有mysql、oracle、db2、pg等,国产化信创数据库需要自己扩展实现,具体参考:https://lowcode.blog.csdn.net/article/details/109052520。

2、Camunda 平台架构

Camunda Platform是一个灵活的框架,可以部署在不同的场景中。本部分概述了最常见的部署方案。

2.1、嵌入式流程引擎

02-嵌入式架构(1)

在这种情况程引擎将作为应用程序库添加到自定义应用程序中,前提条件是你的应用程序和camunda技术栈要一致。这样,流程引擎就可以在应用程序生命周期中轻松启动和停止。比如:OA办公自动化项目中的工作流引擎,ERP项目的流程引擎。

2.2、共享的、容器管理的流程引擎

03-共享架构(1)

在这种情况下,进程引擎在运行时容器(Servlet 容器、Application Server 等)内启动。流程引擎作为容器服务提供,可以由容器内部署的所有应用程序共享。这个概念可以比作 JMS 消息队列,它由运行时提供,可以被所有应用程序使用。流程部署和应用程序之间存在一对一的映射:流程引擎跟踪应用程序部署的流程定义,并将执行委托给相关应用程序。在当前微服务云原生技术背景下,这种部署架构不推荐使用。

2.3、独立(远程)流程引擎服务器

04-分布式架构(1)

在这种情况程引擎作为网络服务提供。在网络上运行的不同应用程序可以通过远程通信通道与流程引擎进行交互。使流程引擎可远程访问的最简单方法是使用内置的 REST API。不同的通信通道(如SOAP Web服务或JMS)是可能的,但需要由用户实现。这种部署架构可以理解为微服务架构,camunda流程引擎独立部署为一个服务,应用程序通过rest服务调用流程引擎。

3、集群部署架构

为了提供纵向扩展或故障转移功能,可以将流程引擎分发到集群中的不同节点。然后,每个进程引擎实例都必须连接到共享数据库。

05-集群部署架构(1)

单个流程引擎实例不会跨事务维护会话状态。每当流程引擎运行事务时,完整状态都会刷新到共享数据库。这样就可以将在同一流程实例中工作的后续请求路由到不同的集群节点。此模型非常简单易懂,在部署群集安装时施加了有限的限制。就流程引擎而言,纵向扩展的设置和故障转移的设置之间没有区别(因为流程引擎在事务之间不保留会话状态)。

3.1、群集环境中的会话状态

Camunda Platform 不提供开箱即用的负载平衡功能或会话复制功能。负载平衡功能需要由第三方系统提供(比如:nginx),会话复制需要由主机应用程序服务器提供。

在群集设置中,如果用户要登录 Web 应用程序,则需要采取额外的步骤来确保不会要求用户多次登录。存在两种选择:

  1. 可以在负载平衡解决方案中配置和启用“粘性会话”。这将确保来自给定用户的所有请求在可配置的时间段内定向到同一实例。
  2. 可以在应用程序服务器中启用会话共享,以便应用程序服务器实例共享会话状态。这将允许用户连接到集群中的多个实例,而无需多次登录。

如果上述方法均未在群集设置中实现,则与多个节点的连接将导致多个登录请求。

3.2、群集环境中的作业执行程序

进程引擎作业执行器也是群集的,并在每个节点上运行。这样,就流程引擎而言,没有单点故障。作业执行程序可以在同类集群和异构集群中运行。

3.3、时区的设置

以下是对群集中时区使用的一些限制。

https://docs.camunda.org/manual/7.19/user-guide/process-engine/time-zones/#cluster-setup

4、多租户模型

为了通过一个 Camunda 安装为多个独立方提供服务,流程引擎支持多租户。支持以下多租户模型:

多租户户方案一:使用不同的数据库架构或数据库进行表级数据分离。每个租户使用独立的数据库用户或者实例或者表空间,这样性能是最好的,也容易扩展维护。

06-多租户架构1(1)

多租户方案二:使用租户标记进行行级数据分隔。该方式可能存在数据量大导致出现性能问题,需要结合分库分表方案解决。

07-多租户架构2(1)

用户应选择适合其数据分离需求的模型。Camunda 的 API 提供对特定于每个租户的流程和相关数据的访问。更多详细信息可以在多租户部分找到。

https://docs.camunda.org/manual/7.19/user-guide/process-engine/multi-tenancy/

5、Web 应用程序架构

Camunda Platform Web 应用程序基于 RESTful 架构。

使用的框架:

  • 基于 JAX-RS 的 Rest API
  • AngularJS
  • RequireJS
  • jQuery
  • Twitter Bootstrap

Camunda 其他自定义开发框架:

  • camunda-bpmn.js:Camunda BPMN 2.0 JavaScript 库
  • ngDefine:将 AngularJS 集成到 RequireJS 支持的应用程序中
  • angular-data-depend:用于实现复杂、数据密集型 AngularJS 应用程序的工具包

 

Camunda 提供了一套基于AngularJS开发的前端UI界面,但开源版本的功能有限,而且也不适合中国人操作系统,这部分需要项目中自己扩展开发实现。

这就是camunda自带的待办任务处理界面:

08-待办任务处理界面

我们可以用vue开发自己的用户界面:

09-vue开发的界面

更多功能体验请访问:http://www.yunchengxc.com

6、RPA架构

机器人流程自动化 (RPA) 编排是一个利用多个 Camunda 产品模块功能的用例。它允许使用 RPA 技术和(无人值守)机器人自动编排任务。目前,Camunda Platform 积极支持 UiPath 和 Automation Anywhere,但未来版本将支持更多 RPA 供应商。

10-rpa架构(1)

Camunda Automation Platform 7.19 是保持与 Camunda RPA bridge接器兼容性的最后一个版本。Camunda 自动化平台 7.19 和 Camunda RPA 桥将再维护 18 个月,到 2024 年 10 月以后,Camunda 停止维护 Camunda RPA bridge组件。Camunda RPA Bridge 在 Camunda 8 中被 RPA 开箱即用的连接器所取代。

RPA 仅限企业版,RPA 编排需要有效的企业许可证。您可以获取企业试用许可证,用于在本地测试 RPA Bridge 和 Cawemo。

https://docs.camunda.org/get-started/archive/rpa/

7、实现的标准规范

Camunda 在业务流程管理范围内实现了三个不同的标准:BPMN 2.0、CMMN 1.1 和 DMN 1.3。 这三个标准由对象管理小组Object Management Group 在Camunda的积极合作下定义。

BPMN:业务流程模型和表示法 (BPMN) 是工作流和流程自动化的标准。 Camunda 支持 BPMN 的 2.0 版本。

https://docs.camunda.org/manual/7.20/reference/bpmn20/

CMMN:案例管理模型和符号 (CMMN) 是案例管理的标准。 Camunda 支持 CMMN 的 1.1 版本。

https://docs.camunda.org/manual/7.20/reference/cmmn11/

DMN:决策模型和表示法 (DMN) 是业务决策管理的标准。 Camunda 支持 DMN 的 1.1 版本。

https://docs.camunda.org/manual/7.20/reference/dmn/

 

posted @ 2024-07-06 14:46  大龄码农有梦想  阅读(14)  评论(0编辑  收藏  举报