本技术涉及计算机信息,具体而言,涉及一种基于长事务的分布式柔性事务处理方法和装置。
背景技术:
1、在微服务架构的企业it系统中,可能存在多个业务子系统,例如采购子系统、库存子系统、销售子系统等,每个业务子系统都采用微服务架构构建,每个业务子系统内部都可以包括多个微服务,各个微服务具有各自独立部署的数据库,因此,这种企业it系统中的业务流程不可避免地会出现涉及跨多个业务子系统的数据库的分布式事务的业务场景。这些跨多个业务子系统的数据库的的分布式事务又往往是长事务(long transaction),即跨多个微服务的长链路的分布式事务。
2、现有技术中,通常基于传统saga模式来处理长事务,或者采用实现传统saga模式的第三方分布式事务中间件如seata中间件来实现。不论是哪种方式,都基本上采用中心化的事务协调器把一个长事务拆分为每个微服务的本地子事务以串行顺序调用的方式依次调用执行,当任意一个本地子事务出错时,回滚之前的本地子事务,达到各本地子事务的数据最终一致性。
3、然而,由于上述企业it系统中的多个业务子系统之间的业务负载往往并不均衡,在高并发的长事务的业务场景下,上述方案会导致部分业务子系统的微服务接口调用发生阻塞,导致整个长事务的调用链路频繁发生异常,进而影响分布式柔性事务的并发处理性能,从而导致各业务子系统的数据最终不一致的问题。因此,亟需一种改进的技术方案来解决上述问题。
技术实现思路
1、有鉴于此,本技术提出一种基于长事务的分布式柔性事务处理方法和装置,用于高并发的长事务的场景下,减少高负载的业务子系统中的微服务接口调用阻塞,减少跨多个业务子系统的长事务的请求链路异常,降低跨多个业务子系统的数据不一致问题,同时还可以显著提升跨多个业务子系统的长事务的并发处理性能。
2、第一方面,本技术提出一种基于长事务的分布式柔性事务处理方法,包括:
3、接收客户端的业务请求,根据所述业务请求涉及的多个业务子系统的数据写入序列,将所述业务请求拆分为与所述多个业务子系统分别对应的多个子业务请求;
4、根据所述业务请求和多个子业务请求,在全局事务表中创建与所述业务请求对应的全局事务,所述全局事务包括与所述多个子业务请求分别对应的多个中间事务,每个中间事务包括对应业务子系统中的多个微服务的数据写接口的请求链路,所述请求链路包括依次执行所述多个微服务的数据写接口的请求的多个本地子事务;
5、将所述多个中间事务对应提交给运行于多个服务器节点的事务协调器的多个运行实例,并行执行所述多个中间事务的请求链路;
6、所述事务协调器的多个运行实例中的每个运行实例实时捕捉执行对应中间事务的请求链路中的第一异常事件,并根据所述第一异常事件触发执行与所述对应中间事务关联的补偿处理逻辑。
7、在可选的实施方式中,所述根据所述业务请求涉及的多个业务子系统的数据写入序列,将所述业务请求拆分为与所述多个业务子系统分别对应的多个子业务请求,包括:
8、识别出所述业务请求涉及的多个业务子系统的数据写入序列包含的所述多个业务子系统中每个业务子系统的多个微服务的数据写接口的请求链路;
9、将所述业务请求拆分为分别包含所述多个业务子系统中每个业务子系统的多个微服务的数据写接口的请求链路的多个子业务请求。
10、在可选的实施方式中,所述将所述多个中间事务对应提交给运行于多个服务器节点的事务协调器的多个运行实例,并行执行所述多个中间事务的请求链路,包括:
11、获取所述事务协调器的多个运行实例分别运行的多个服务器节点的资源空闲率;
12、根据所述多个中间事务的预测负载度量值和所述多个服务器节点的资源空闲率的匹配关系,将所述多个中间事务对应提交给所述多个运行实例。
13、在可选的实施方式中,所述获取所述事务协调器的多个运行实例分别运行的多个服务器节点的资源空闲率,包括:
14、所述事务协调器的多个运行实例中的每个运行实例定时向注册中心发送所在服务器节点的资源空闲率;
15、全局事务管理器从所述注册中心获取所述事务协调器的多个运行实例分别运行的多个服务器节点的资源空闲率。
16、在可选的实施方式中,所述根据所述多个中间事务的预测负载度量值和所述多个服务器节点的资源空闲率的匹配关系,将所述多个中间事务对应提交给所述多个运行实例,还包括:
17、将所述多个中间事务的预测负载度量值和所述多个服务器节点的资源空闲率分别按照从大到小的顺序排序;
18、按照所述多个中间事务的预测负载度量值从大到小的顺序和所述多个服务器节点的资源空闲率从大到小的顺序之间的对应关系,将所述多个中间事务对应提交给所述多个运行实例。
19、在可选的实施方式中,所述事务协调器的多个运行实例中的每个运行实例实时捕捉执行对应中间事务的请求链路中的第一异常事件,并根据所述第一异常事件触发执行与所述对应中间事务关联的补偿处理逻辑,包括:
20、所述每个运行实例捕捉到执行对应中间事务的请求链路中的异常本地子事务,触发所述第一异常事件;
21、所述每个运行实例根据所述第一异常事件依次对所述异常本地子事务及在后本地子事务执行对应的正向补偿处理;
22、如果执行所述对应的正向补偿处理失败,则对所述对应中间事务的请求链路中的已完成本地子事务依次执行反向补偿处理,同时向所述多个运行实例中的其他运行实例广播第二异常事件,以使得所述其他运行实例对自身的对应中间事务的请求链路中的已完成本地子事务依次执行反向补偿处理。
23、在可选的实施方式中,所述方法还包括:
24、所述多个运行实例中的其他运行实例接收所述第二异常事件,根据所述第二异常事件中断对自身的对应中间事务的请求链路的执行;
25、所述其他运行实例对所述自身的对应中间事务的请求链路中的已完成本地子事务依次执行反向补偿处理。
26、在可选的实施方式中,所述方法还包括:
27、在所述多个服务器节点中的任一服务器节点执行分布式定时任务,以预定的周期扫描所述全局事务表中的所述全局事务,判断所述全局事务中是否存在超时中间事务;
28、如果存在超时中间事务,则触发第三异常事件,向运行于所述任一服务器节点的事务协调器的本地运行实例通知所述第三异常事件;
29、所述本地运行实例根据所述第三异常事件依次对所述超时中间事务中的异常本地子事务以及在后本地子事务执行对应的正向补偿处理;
30、如果执行所述对应的正向补偿处理失败,则对所述超时中间事务和所述全局事务中的其他中间事务的请求链路中的已完成本地子事务依次执行反向补偿处理。
31、在可选的实施方式中,所述方法还包括:
32、基于所述服务器节点的资源空闲率自适应调节运行于所述服务器节点的事务协调器的运行实例执行所述正向补偿处理的最大重试次数。
33、第二方面,本技术还提出一种基于长事务的分布式柔性事务处理装置,包括:
34、服务编排单元,用于接收客户端的业务请求,根据所述业务请求涉及的多个业务子系统的数据写入序列,将所述业务请求拆分为与所述多个业务子系统分别对应的多个子业务请求;
35、事务管理单元,用于根据所述业务请求和多个子业务请求,在全局事务表中创建与所述业务请求对应的全局事务,所述全局事务包括与所述多个子业务请求分别对应的多个中间事务,每个中间事务包括对应业务子系统中的多个微服务的数据写接口的请求链路,所述请求链路包括依次执行所述多个微服务的数据写接口的请求的多个本地子事务;
36、事务执行单元,用于将所述多个中间事务对应提交给运行于多个服务器节点的事务协调器的多个运行实例,并行执行所述多个中间事务的请求链路;
37、异常捕获单元,用于所述事务协调器的多个运行实例中的每个运行实例实时捕捉执行对应中间事务的请求链路中的第一异常事件,并根据所述第一异常事件触发执行与所述对应中间事务关联的补偿处理逻辑。
38、本技术至少可以达到如下有益效果:
39、本技术通过根据客户端的业务请求涉及的多个业务子系统的数据写入序列,将所述业务请求拆分为与所述多个业务子系统分别对应的多个子业务请求,并在全局事务表中创建与所述业务请求对应的全局事务,所述全局事务包括与所述多个子业务请求分别对应的多个中间事务,每个中间事务包括对应业务子系统中的多个微服务的数据写接口的请求链路,所述请求链路包括依次执行所述多个微服务的数据写接口的请求的多个本地子事务,将所述多个中间事务对应提交给运行于多个服务器节点的事务协调器的多个运行实例,并行执行所述多个中间事务的请求链路,同时每个运行实例实时捕捉执行对应中间事务的请求链路中的第一异常事件,并根据所述第一异常事件触发执行与所述对应中间事务关联的补偿处理逻辑。本技术实施例在高并发的长事务的应用场景下,一方面可以显著减少高负载的业务子系统中的微服务接口调用阻塞,减少跨多个业务子系统的长事务的请求链路异常,进而显著降低跨多个业务子系统的数据不一致问题;另一方面,还可以显著提升跨多个业务子系统的长事务的并发处理性能,提高微服务架构的企业it系统中跨多个业务子系统的长事务的服务质量。