camunda7多租户技术架构和测试验证

多租户考虑的是单个 Camunda 安装应该为多个租户提供服务的情况,是实现SaaS化的重要技术手段。对于每个租户,应做出一定的隔离保证。例如,一个租户的流程实例不应干扰另一租户的流程实例。

多租户可以通过两种不同的方式实现。一种方法是每个租户使用一个流程引擎。另一种方法是仅使用一个流程引擎并将数据与租户标识符相关联。这两种方式在数据隔离级别、维护工作量和可扩展性方面有所不同。两种方式的组合也是可能的。

多租户架构1:具有租户标识符的单进程引擎

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

租户标识符在部署上指定,并传播到从部署创建的所有数据(例如,流程定义、流程实例、任务等)。为了访问特定租户的数据,流程引擎允许通过租户标识符过滤查询或为命令指定租户标识符(例如,创建流程实例)。此外,流程引擎与允许省略租户标识符的身份服务结合提供透明的访问限制。

请注意,并非所有 API 都实现了透明的租户分离。例如,使用部署 API,租户可以为另一个租户部署流程。因此,直接向租户公开此类 API 端点不是受支持的用例。自定义访问检查逻辑应该构建在 Camunda API 之上否则存在通过API接口访问其他租户数据的安全问题。

通过以下示例演示如何对共享流程引擎使用多租户。你将了解到:

  1. 如何使用租户 ID 部署流程定义
  2. 如何从具有租户 ID 的流程定义启动流程实例
  3. 如何通过 Camunda Web 应用程序使用多租户

1、设计一个流程并以租户发布

打开流程设计器,设计一个流程,并以tenant1租户发布


发布流程,注意填写租户ID为tenant1

发布成功后,我们打开camunda的数据库表,查看表里的记录,发现流程定义表act_re_procdef和流程部署表act_re_deployment中的TENANT_ID_字段都有了值。

2、在流程控制台添加租户

打开浏览器并转到http://localhost:8080/camunda/app/cockpit使用demo/demo登录

找到租户管理菜单:

进入租户管理界面,添加2个租户,分别命名为tenant1tenant2:

打开camunda的数据库租户表act_id_tenant,查看表里的记录,发现多了租户记录:

打开camunda的数据库租户表act_id_tenant_member,查看表里的记录,该表记录了租户和用户的关系:

接着,进入用户管理界面,添加1个用户张三,并把用户张三分配给租户tenant1即在tenant1租户下有1个张三用户:

3、通过租户下的用户发起流程

切换到 Cockpit 并使用新用户张三登录点击右上角发起流程,即以tenant1发起一个流程。

发起流程后,可以设置待办任务task过滤器,只查看tenant1租户的待办任务:

这时,我们再参考一下camnuda的数据库表中数据,看看是否带有租户ID的标识。

流程待办任务表act_ru_task中的TENANT_ID_字段中写入了tenant1值:

流程历史实例表act_hi_procinst中的TENANT_ID_字段中也写入了tenant1值:

4、通过API查询租户数据

特定于租户的数据的流程引擎查询(例如,部署查询、流程定义查询)允许按一个或多个租户标识符进行过滤。如果未设置标识符,则结果包含所有租户的数据。

要查找特定租户的部署,必须将租户标识符传递tenantIdInDeploymentQuery.

List<Deployment> deployments = repositoryService.createDeploymentQuery().tenantIdIn("tenant1", "tenant2").orderByTenantId().asc().list();

要通过为多个租户部署的流程定义的键创建实例,必须将租户标识符传递给ProcessInstantiationBuilder 。

runtimeService.createProcessInstanceByKey("key").processDefinitionTenantId("tenant1").execute();

这样,通过这个示例验证了具有共享流程引擎租户标识符的多租户模式,即通过数据库字段标识租户ID,部署一个流程实例和一个数据库实现多租户的架构。但这样的多租户架构有几个弊端:

  1. 单表数据量大的情况下,性能问题如何解决?
  2. 多个租户的数据都在一个表里,通过API可查询到,通过数据库管理工具也可查询,数据安全如何解决?
  3. 涉及到个性化定义,如何解决?

要解决以上问题,需要采用每个租户一个流程引擎和数据Schemas的架构。

多租户架构2、多流程实例和数据schema独立架构

多租户可以通过为每个租户提供一个流程引擎来实现。每个流程引擎被配置为使用连接租户数据的不同数据源。租户的数据可以存储在不同的数据库中,可以存储在具有不同架构的一个数据库中,也可以存储在具有不同表的一个架构中。

云程低代码平台采用了多流程实例和数据库隔离的多租户架构,可以通过官方网站的SaaS注册体验:http://www.yunchengxc.com

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/529457.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php导出excel文件

环境 php7.4hyperf3composer require phpoffice/phpspreadsheet代码 class IndexController extends AbstractController { /*** Inject* var Picture*/private $picture;public function index(){$res_data[]["robot" > 哈哈机器人,"order" > TES…

深入理解Java中的线程安全List:CopyOnWriteArrayList原理和应用

码到三十五 &#xff1a; 个人主页 心中有诗画&#xff0c;指尖舞代码&#xff0c;目光览世界&#xff0c;步履越千山&#xff0c;人间尽值得 ! 在Java并发编程中&#xff0c;线程安全的数据结构是至关重要的。其中&#xff0c;CopyOnWriteArrayList是一个线程安全的ArrayLis…

JDK的下载

Oracle官网下载链接&#xff1a; Java Archive | Oracle 选中指定版本&#xff0c;进行下载即可&#xff1a;

STM32CubeMX学习笔记18——SD卡(SDIO接口)

1、简介 1.1 SD卡简介 很多单片机系统都需要大容量存储设备&#xff0c;以存储数据&#xff08;常用的有U盘、FLASH芯片、SD卡等&#xff09;&#xff0c;比较而言SD卡是单片机大容量外部存储的首选&#xff0c;只需要少数几个IO口即可外扩一个容量从几十M到几十G的&#xff…

操作系统(1)——学习导论(Ⅲ)

目录 小程一言专栏链接: [link](http://t.csdnimg.cn/6grrU)本篇文章因内容需要&#xff0c;且依靠书中内容达不到小程想要的效果&#xff0c;so部分内容依赖其他网络资源 学习导论&#xff08;Ⅲ&#xff09;操作系统相关概念进程——Process线程——Thread调度——Scheduling…

超越DragGAN和DragDiffusion!StableDrag:基于点的图像编辑新框架(南大腾讯) 原创 Yutao Cui等 AI生成未来

超越DragGAN和DragDiffusion&#xff01;StableDrag:基于点的图像编辑新框架(南大&腾讯) 原创 Yutao Cui等 AI生成未来 文章链接&#xff1a;https://arxiv.org/pdf/2403.04437 开源地址&#xff1a;https://stabledrag.github.io/ 基于点的图像编辑自DragGAN出现以来就引…

qemu快速入门

前提&#xff1a; 我们做嵌入式软件的时候&#xff0c;往往可能会缺少嵌入式的硬件&#xff0c;那我们希望提前开始准备代码的话&#xff0c;就需要qemu这个开源软件&#xff0c;它可以模拟各种型号的芯片 。那么我们可以提前在这个模拟器上面去开发代码、验证、调试。 正片开始…

MySQL临时表创建出错(OS errno 13 - Permission denied)

一个客户向我抱怨&#xff1a;在MySQL查询小表没有问题&#xff0c;查询大表出错&#xff0c;下面是他发给我的出错的部分截屏&#xff08;客户的表名被我隐藏了&#xff09;。 这里的给出的信息已经比较明显了&#xff0c;是向/tmp目录中创建临时表失败&#xff08;临时表的路…

多核多cluster多系统之间缓存一致性概述

目录 1.思考和质疑2.怎样去维护多核多系统缓存的一致性2.1多核缓存一致性2.2多Master之间的缓存一致性2.3dynamIQ架构同一个core中的L1和L2 cache 3.MESI协议的介绍4.ACE维护的缓存一致性5.软件定义的缓存和替换策略6.动图示例 本文转自 周贺贺&#xff0c;baron&#xff0c;代…

基于4G的水质参数远程监测系统研究

基于4G的水质参数远程监测系统研究 摘 要 近年来随着我国经济飞速的发展&#xff0c;对水资源的破坏也日益严重。无论是生活需求用水还是工业废水的处理都存在这严重问题&#xff0c;由于水质净化技术的不成熟&#xff0c;对水质监测的实时性存在着很大的缺陷&#xff0c;水污…

Aspose.Words指定位置插入table

如果在创建书签&#xff0c;然后在书签位置插入表格&#xff0c;会出现格式错乱&#xff0c;在单元格位置里面有一个表格&#xff0c;不符合实际使用。正确做法是复制模板文件里面的表格行&#xff0c;然后插入若干行。 如图标记红色位置插入动态数据行&#xff0c;是先复制标…

基于springboot+vue的汽车改装方案网站(源码+论文)

目录 前言 一、功能设计 二、功能实现 三、库表设计 四、论文 前言 对于当今社会发展趋势越来越迅猛&#xff0c;传统汽车改装模式的没落,我认为这并不是不能避免的,但说实话,现在的生活方式与以往相比有太大的改变&#xff0c;人们的娱乐方式不仅仅再是读书看报。由于近些…