一种基于组件依赖编排的跨租户数据克隆方法及系统与流程

摘要: 本发明属于多租户saas系统数据管理的,具体地涉及一种基于组件依赖编排的跨租户数据克隆方法及系统。背景技术:1、在多租户saas业务系统中,运营方通常需要维护一...
一种基于组件依赖编排的跨租户数据克隆方法及系统与流程

本发明属于多租户saas系统数据管理的,具体地涉及一种基于组件依赖编排的跨租户数据克隆方法及系统。

背景技术:

1、在多租户saas业务系统中,运营方通常需要维护一套高质量的演示数据,用于向潜在客户展示产品功能。以教育saas平台为例,运营方维护一所“演示学校”(演示租户),其中包含考试编排、答题、阅卷、成绩统计、教务管理、办公网盘等多个业务模块的完整级联数据。销售人员外出演示时,需要将这套演示数据复制到自己的独立租户中,并在其中进行新增班级、修改成绩、删除考试等任意操作以展示产品能力。

2、然而,上述场景面临一系列技术挑战。第一,若多个销售人员直接共享同一套演示数据并开放写权限,则多人操作会相互干扰、造成数据错乱且难以恢复。第二,演示数据分散在多个相互依赖的业务模块中,各模块的数据记录之间存在复杂的跨组件引用关系(例如考试记录引用了班级记录、成绩记录引用了学生记录),克隆后各条记录的主键发生变化,必须保证引用方记录中对被引用方的引用关系在新租户中依然正确。第三,存在依赖关系的数据必须按依赖先后顺序克隆(被依赖方先于依赖方克隆),而无依赖关系的数据应尽量并发克隆以提升效率。第四,当目标租户中的演示数据被改乱或过旧时,应能够清理旧数据并重新从最新演示数据克隆一份。

3、现有技术方案及其不足如下:

4、(一)直接共享同一套演示数据:仅开放只读权限无法满足演示中增删改的需求;若开放写权限则多人操作互相污染,且数据错乱后无法恢复。

5、(二)数据库整库导出/导入或整库物理复制:粒度粗,无法按业务模块选择性克隆;难以做跨租户的主键重映射,容易产生主键冲突;与在线业务耦合严重,且无法由各业务自治维护各自的克隆逻辑,新增业务模块需改动统一的导出脚本。

6、(三)中心化克隆程序统一读取所有业务表并写入:该中心程序必须了解所有业务的全部表结构和外键关系,业务表结构一旦变化就要同步修改中心程序,耦合度高、维护成本大、扩展性差;且难以处理跨模块的引用id重映射。

7、(四)逐表手工编写克隆脚本:实现成本高、易遗漏依赖关系、克隆顺序难以保证、id重映射易出错。

8、上述现有方案普遍存在三个共性缺陷:(a)无法在保证跨模块引用完整性的前提下完成主键重映射;(b)无法按依赖关系自动编排克隆顺序并对无依赖项并发执行;(c)中心化、强耦合,新增业务模块接入成本高。

9、因此,亟需一种能够在编排方不掌握任何具体业务表结构的前提下,实现跨租户数据克隆并保证跨组件引用完整性的方法及系统。

技术实现思路

1、为了解决上述技术问题,本发明提出一种基于组件依赖编排的跨租户数据克隆方法及系统,可在编排方不感知任何业务表结构的去中心化前提下,通过拓扑顺序驱动与中心映射表反查的闭环机制保证跨服务引用完整性,同时支持无依赖组件的并发克隆和部分失败场景的断点续克隆,最终实现低耦合、高可靠、可扩展的跨租户数据克隆。

2、第一方面,本发明提供以下技术方案,一种基于组件依赖编排的跨租户数据克隆方法,包括:

3、预先向克隆服务注册可克隆组件及其依赖关系,响应于对指定源租户的克隆发起指令,创建克隆任务并生成克隆任务标识;

4、依据所述依赖关系将待克隆的所有组件构造为有向图,对所述有向图进行拓扑排序分层,得到组件执行顺序,其中入度为零的组件构成同一层;

5、按照所述组件执行顺序,通过消息中间件向各业务端广播组件复制请求消息;

6、各业务端根据所述广播消息中的目标组件标识判断是否与本业务相关,若相关则执行克隆逻辑,读取源租户下属于本组件的数据,为每条记录生成新主键并写入目标租户;

7、各业务端克隆完成后,回调本次克隆产生的旧主键到新主键的映射集合;

8、克隆服务将所述映射集合持久化存储至数据映射表,下游业务端执行克隆时查询所述数据映射表将跨组件引用关系替换为对应的新主键。

9、相比现有技术,本发明的有益效果为:本发明在编排方不掌握任何业务表结构的去中心化前提下,通过“拓扑顺序驱动+中心映射表反查”的闭环机制保证跨服务引用完整性——执行顺序保证了下游反查时上游映射必然已就绪。同时,通过组件依赖建模与拓扑排序分层自动编排克隆顺序,被依赖者先行、无依赖者并发、成环即检出并安全失败;通过“广播+组件标识”的解耦架构实现克隆服务与业务端的完全解耦,新增业务模块仅需注册组件、绑定队列、实现监听即可零改动接入;通过基于执行状态记录实现部分失败场景的断点续克隆;通过中心映射精确定位实现先删后克隆的可重复同步。整套方法将依赖编排、引用完整性保证、并发调度、失败恢复和重新同步融为一体,特别适用于多租户saas系统中演示数据的分发与管理场景。

10、较佳的,所述对所述有向图进行拓扑排序分层的过程中,若存在尚未排出的组件但当前已无入度为零的节点,则判定存在循环依赖,立即终止克隆任务并标记为失败。

11、较佳的,同一层内的多个无依赖组件并发克隆,克隆服务以同一层全部组件回调齐备作为推进到下一层的条件。

12、较佳的,若所述目标组件标识与本业务不匹配,则业务端直接忽略所述广播消息。

13、较佳的,所述方法还包括非结构化数据的克隆:业务端调用文件服务的复制接口生成新文件,将旧文件标识到新文件标识的映射纳入所述映射集合。

14、较佳的,所述方法还包括重新同步流程:以目标租户标识定位上一次克隆任务及其数据映射记录;各业务端按所述数据映射记录中本目标租户的新主键集合删除上一次克隆产生的数据;删除完成后重新执行完整克隆流程。

15、较佳的,所述方法还包括部分失败恢复流程:当某组件的克隆回调指示失败时,记录失败组件及失败原因,在问题修复后从所述失败组件处重新开始克隆,已成功组件及其映射不再重复克隆。

16、第二方面,本发明提供以下技术方案,一种基于组件依赖编排的跨租户数据克隆系统,所述系统包括:

17、注册模块,用于预先向克隆服务注册可克隆组件及其依赖关系,响应于对指定源租户的克隆发起指令,创建克隆任务并生成克隆任务标识;

18、分层模块,用于依据所述依赖关系将待克隆的所有组件构造为有向图,对所述有向图进行拓扑排序分层,得到组件执行顺序,其中入度为零的组件构成同一层;

19、广播模块,用于按照所述组件执行顺序,通过消息中间件向各业务端广播组件复制请求消息;

20、克隆模块,用于各业务端根据所述广播消息中的目标组件标识判断是否与本业务相关,若相关则执行克隆逻辑,读取源租户下属于本组件的数据,为每条记录生成新主键并写入目标租户;

21、回调模块,用于各业务端克隆完成后,回调本次克隆产生的旧主键到新主键的映射集合;

22、替换模块,用于克隆服务将所述映射集合持久化存储至数据映射表,下游业务端执行克隆时查询所述数据映射表将跨组件引用关系替换为对应的新主键。

23、第三方面,本发明提供以下技术方案,一种计算机,包括存储器、处理器以及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如上述的基于组件依赖编排的跨租户数据克隆方法。

24、第四方面,本发明提供以下技术方案,一种存储介质,所述存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如上述的基于组件依赖编排的跨租户数据克隆方法。