千千梦丶琪 发表于 2024-8-8 01:16:53

【03】Camunda7-引擎架构

Camunda7支持多种利用方式,便于用户根据不同的业务场景、利用需求构建本身的流程引擎或流程业务。
嵌入式流程引擎

流程引起被作为一个组件或库,添加/集成到一个自定义程序中,通过这种方式,流程引擎可随应用程序生命周期进行管理,同时,也可以在共享数据库之上运行多个嵌入式流程引擎。
https://img-blog.csdnimg.cn/direct/9c0b69aab8cb4882a37781fada71ebc1.png
分布式/容器管理的流程引擎

流程引擎在运行时容器(Servelt容器、ApplicationServer等)内启动。流程引擎作为容器提供服务,可以被部署在容器内部的所有程序共享。这个概念可以类比JMS消息队列,它由运行时提供,可以被所有应用程序利用。流程部署和应用程序之间存在一对一的映射:流程引擎跟踪应用程序部署的流程定义,并将执行委托给相关应用程序。
https://img-blog.csdnimg.cn/direct/f32550dd327148cbbe44d780dedb5178.png
独立运行的流程引擎

独立运行的流程引擎,这种环境程引擎作为网络服务提供。在网络上运行的不同应用程序可以通过长途通信通道与流程引擎进行交互。使流程引擎可长途访问的最简单方法是利用内置的 REST API。不同的通信通道(如SOAP Web服务或JMS)是可能的,但需要由用户实现。
https://img-blog.csdnimg.cn/direct/59109caf35d44c0e8b81f3722a0955c5.png
集群模式

为了提供纵向扩展或故障转移功能,可以将流程引擎分发到集群中的不同节点。然后,每个流程引擎实例都必须连接到共享数据库。单个流程引擎实例不会跨事务维护会话状态。每当流程引擎运行事务时,完整状态都会革新到共享数据库。如许就可以将在同一流程实例中工作的后续哀求路由到不同的集群节点。此模型非常简单易懂,在部署聚集安装时施加了有限的限制。就流程引擎而言,纵向扩展的设置和故障转移的设置之间没有区别(因为流程引擎在事务之间不保留会话状态)。
https://img-blog.csdnimg.cn/direct/ed04bec46a5b4eaf9403511f73ab30df.png
多租户模式

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


[*]利用不同的数据库架构或数据库进行表级数据分离
[*]利用租户标志进行行级数据分隔投产
这两种方式在数据隔离级别、维护工作量和可扩展性方面相互不同。两种方式的联合也是可能的。Camunda的API 提供对特定于每个租户的流程和相关数据的访问支持。
租户标识符+单引擎单数据源的多租户模式

多租户可以通过一个利用租户标识符(即租户 ID)的流程引擎来实现。所有租户的数据都存储在一个表(相同的数据库和Schema)中。隔离通过存储在列中的租户标识符实现。
https://img-blog.csdnimg.cn/direct/b1c2e4bf0430493eb038aa63a33a7ea6.png
租户标识符在Deployment上指定,并同步到通过Deployment创建的所有数据(比方,流程定义、流程实例、任务等)。为了访问特定租户的数据,流程引擎答应按租户标识符过滤查询或为下令指定租户标识符(比方,创建流程实例)。此外,流程引擎提供透明的访问限制,并联合答应省略租户标识符的 Identity Service。(请注意,并非所有API都支持清楚的租户隔离。比方,利用部署API,租户可以为另一个租户部署流程。因此,不应将此类API端点直接暴露给租户的用例。相反,自定义访问检查逻辑应构建在Camunda API之上。)此外,所有租户也可以共享相同的流程和决策定义,而无需为每个租户部署维护它们。在租户数量较多的环境下,共享定义可以简化部署的管理。
若要为单个租户部署流程定义,必须在Deployment上设置租户标识符。给定的标识符将同步到Deployment的所有定义,以便区分/标识它们属于某租户。
如果未设置租户标识符,则Deployment及其定义属于所有租户。在这种环境下,所有租户都可以访问Deployment和定义。(共享定义详细参见https://docs.camunda.org/manual/7.20/user-guide/process-engine/multi-tenancy/#shared-definitions-for-all-tenants)
流程引擎查询答应按一个或多个租户标识符进行筛选,查询特定租户的数据(比方,部署查询、流程定义查询)。如果未设置标识符,则效果包罗所有租户的数据。如果权限管理上不答应用户检察租户的数据,则租户的访问限制规则可能会影响查询效果。
多流程引擎多数据源模式

多租户可以通过为每个租户提供一套流程引擎/数据源来实现。每个流程引擎都设置为利用租户的不同数据源。租户的数据可以存储在不同的数据库中,可以存储在一个具有不同Schema的数据库中,也可以存储在一个具有不同表的Schema中。
https://img-blog.csdnimg.cn/direct/61ff379eda3f485cbde48ca5b2b4636c.png
流程引擎可以在同一台服务器上运行,以便所有流程引擎共享相同的计算资源,比方数据源(通过Schema或表隔离时)或用于异步作业执行的线程池。
流程引擎可以在设置文件中设置,也可以通过Java API进行设置。每个引擎都应具有与租户相关的名称,以便可以基于租户进行标识。比方,每个引擎都可以以其服务的租户定名。详细信息https://docs.camunda.org/manual/7.20/user-guide/process-engine/process-engine-bootstrapping/
数据库隔离。如果不同的租户应该在完全不同的数据库上工作,则它们必须利用不同的JDBC设置或不同的数据源。
Schema或表隔离。对于基于Schema或表的隔离,可以利用单个数据源,这意味着连接池等资源可以在多个引擎之间共享。为了实现这一点:
设置选项 databaseTablePrefix 可用于设置数据库访问。
请考虑打开设置 useSharedSqlSessionFactory。该设置控制每个流程引擎实例是否应解析和维护 mybatis 映射文件的当地副本,大概是否可以利用单个共享副本。由于映射需要大量堆 (>30MB),因此建议将其打开。如许,只需要分配一个副本。
useSharedSqlSessionFactory 设置的注意事项
useSharedSqlSessionFactory 设置会在构建后在静态字段中缓存 mybatis sql 会话工厂。利用此设置设置时,需要注意
   
[*]仅当利用该设置的所有流程引擎共享相同的数据源和事务工厂时,才能利用它
[*]字段中的引用一旦设置,就永久不会清除。这通常不是问题,但如果是问题,用户必须通过以下方式将其显式设置为 null 来手动清除该字段

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 【03】Camunda7-引擎架构