【03】Camunda7-引擎架构

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

嵌入式流程引擎

流程引起被作为一个组件或库,添加/集成到一个自定义程序中,通过这种方式,流程引擎可随应用程序生命周期进行管理,同时,也可以在共享数据库之上运行多个嵌入式流程引擎。

分布式/容器管理的流程引擎

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

独立运行的流程引擎

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

集群模式

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

多租户模式

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

  • 使用不同的数据库架构或数据库进行表级数据分离
  • 使用租户标记进行行级数据分隔投产

这两种方式在数据隔离级别、维护工作量和可扩展性方面彼此不同。两种方式的结合也是可能的。Camunda的API 提供对特定于每个租户的流程和相关数据的访问支持。

租户标识符+单引擎单数据源的多租户模式

多租户可以通过一个使用租户标识符(即租户 ID)的流程引擎来实现。所有租户的数据都存储在一个表(相同的数据库和Schema)中。隔离通过存储在列中的租户标识符实现。

租户标识符在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中。

流程引擎可以在同一台服务器上运行,以便所有流程引擎共享相同的计算资源,例如数据源(通过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 会话工厂。使用此配置设置时,需要注意

  1. 仅当使用该设置的所有流程引擎共享相同的数据源和事务工厂时,才能使用它
  2. 字段中的引用一旦设置,就永远不会清除。这通常不是问题,但如果是问题,用户必须通过以下方式将其显式设置为 null 来手动清除该字段
  • 20
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值