1.本发明涉及计算机技术领域,尤其涉及一种基于独立事务协调器的分布式事务处理方法、装置及介质。
背景技术:
2.在高速增长的访问量和数据量的背景下,微服务、soa以及数据库分库分表等架构模式正在被大规模使用,为完成一个业务功能,可能需要横跨多个服务或者横跨多个数据节点,对于事务的处理不可避免地会面临以下的问题:
3.1、无法保证原子性,事务中的原子性是不可分割的单位,在分布式环境下,传统单机数据库事务无法做到多服务节点之间的操作要么都成功,要么都失败。
4.2、无法保证一致性,传统单机数据库事务只能保障单节点业务逻辑的数据一致性,不能保障在分布式环境下多节点的业务数据中间状态不可被观察,因此存在读到脏数据的可能,从而导致数据不一致的问题。
5.3、无法保证隔离性,传统单机数据库的事务隔离只能针对单一数据库,分布式环境下,存在多节点多数据库并存的情况,因此无法控制并发中对使用的数据进行全局的安全隔离。
6.针对传统单机数据库事务无法处理分布式环境中产生的分布式事务问题,目前的实现方案主要有:
7.1、参考图1,基于两阶段提交(2pc)的xa协议,通过定义事务管理器和资源管理器之间的接口,在事务管理器以及一个或多个资源管理器之间形成通信桥梁。事务管理器控制着全局事务,管理事务生命周期,并协调多个资源(如数据库、队列)在第一阶段做准备,第二阶段做提交或者回滚。xa两阶段提交存在同步阻塞的问题,当某一个参与者节点出现通信超时,其余参与者都会被动阻塞占用资源不能释放。
8.2、参考图2,使用三阶段提交(3pc),这是针对两阶段提交的缺点而提出的优化方案。同时在协调者和参与者中都引入超时机制,并在两阶段提交(2pc)的第一阶段和第二阶段中插入一个准备阶段,保证了在最后提交阶段之前各参与节点的状态是一致的。
9.3、参考图3使用柔性事务tcc两阶段补偿模式,约定事务参与者都需要实现try-confirm-cancel三个接口。在try接口尝试执行事务,完成业务检查,预留必要的资源;confirm接口真正执行业务,不做业务资源检查;cancel接口释放try阶段预留的业务资源。
10.现有技术的缺点为:
11.1、xa两阶段提交存在同步阻塞的问题,当某一个参与者节点出现通信超时,其余参与者都会被动阻塞占用资源不能释放。
12.2、xa两阶段提交存在单点故障的问题,当协调者在二阶段的提交过程中发生了故障,参与者们(rms)会一直锁定事务资源阻塞等待下去,无法继续完成事务操作。
13.3、xa两阶段提交协议存在数据不一致的问题,两阶段提交的阶段二中,当协调者向参与者发送commit请求之后,发生了局部网络异常,导致只有一部分参与者接受到了
commit请求。而在这部分参与者接到commit请求之后就会执行commit操作。但是其他部分未接到commit请求的机器则无法执行事务提交。于是整个分布式系统便出现了数据不一致性的现象。
14.4、三阶段提交协议(3pc)的数据不一致问题依然存在,当在参与者收到precommit请求后等待docommit指令时,此时如果协调者请求中断事务,而协调者无法与参与者正常通信,会导致参与者继续提交事务,造成数据不一致。
技术实现要素:
15.本发明实施例的主要目的在于提出一种基于独立事务协调器的分布式事务处理方法、装置及介质,降低了分布式事务处理的故障率。
16.本发明的一方面提供了1、一种基于独立事务协调器的分布式事务处理方法,其特征在于,包括:
17.创建集群,每个所述集群包括对应的事务协调器,通过所述事务协调器对分布式产生的日志数据进行存储,以及,对所述分布式系统进行监控;
18.通过sdk对分布式系统中的事务执行定义事务边界、注册事务分支、注册事务资源和管理全局事务锁管理,以及,根据请求,查询所述分布式系统的事务资源并上报;
19.采用自动方式对所述事务执行提交。
20.根据所述的基于独立事务协调器的分布式事务处理方法,其中创建集群,每个所述集群包括对应的事务协调器,通过所述事务协调器对分布式产生的日志数据进行存储,以及,对所述分布式系统进行监控包括:基于raft协议进行日志数据的存储,以至少三个节点的奇数节点组成一个有状态集群,集群之间的事务消息通过日志复制实现数据同步;或者,以个数大于一的节点群组成无状态集群,通过无状态集群执行所述日志的集中存储;以及,监控分布式系统中的资源、jvm参数、网络、以及事务执行状态,同时对接监控预警平台实时地监控事务协调器的运行状态。
21.根据所述的基于独立事务协调器的分布式事务处理方法,其中事务协调器为独立进程,所述事务协调器的节点隶属于一个集群,一个集群隶属于一个服务分组。
22.根据所述的基于独立事务协调器的分布式事务处理方法,其中对分布式系统中的事务执行定义事务边界、注册事务分支、注册事务资源和管理全局事务锁管理,以及,根据请求,查询所述分布式系统的事务资源并上报还包括:根据请求,自动扫描出所述分布式系统所有的所述事务资源,并协调各个所述事务资源在全局事务进行到提交或者回滚阶段时,执行对应处理。
23.根据所述的基于独立事务协调器的分布式事务处理方法,其中采用自动方式对所述事务执行提交包括:根据所述事务资源接收的数据库操作请求,生成对应的数据镜像查询语句,使用数据镜像查询语句查询出操作请求前的数据前置镜像,并将前置镜像数据执行保存,前置镜像数据保存完毕后,执行操作请求;并在后续查询并将后置镜像数据执行保存,执行分支事务的本地提交;当分支事务收到全局事务提交的通知时,删除前置镜像数据以及后置镜像数据,删除方式可以采用异步处理;当收到全局的回滚请求时,分支事务的事务资源通过镜像查询语句查询当前数据库中的数据是否与后置镜像中记录的一致,如果一致,则使用前置镜像数据对相关的数据进行回滚,否则告警,其中全局事务包括多个分支事
务。
24.根据所述的基于独立事务协调器的分布式事务处理方法,其中事务的提交还包括采用tcc模式,其中tcc模式包括:在业务编码时通过在方法前添加注解来标注tcc事务资源;应用启动过程中扫描到该注解,通过事务协调器注册事务分支资源;在发起全局事务并调用该事务分支资源时,识别注解,根据注解注册事务分支信息;业务对应的事务执行提交或回滚阶段时,发起事务分支的提交或回滚,事务资源管理器收到分支提交或回滚请求时,协调tcc事务资源执行对应处理。
25.根据所述的基于独立事务协调器的分布式事务处理方法,其中事务的提交还包括采用saga模式,其中saga模式包括:业务编码时通过在方法前添加注解标注saga事务资源;在应用启动过程中扫描到注解,执行事务分支资源的注册;在发起全局事务并调用该事务分支资源时,事务管理器识别到注解,注册事务分支信息;若任意事务分支的正向操作执行失败,执行逆向地退回去执行前面各参与者的反向补偿操作,回滚已提交的参与者,使分布式事务回到初始状态。
26.本发明的技术方案还包括一种基于独立事务协调器的分布式事务处理装置,包括:事务协调模块,用于创建集群,每个所述集群包括对应的事务协调器,通过所述事务协调器对分布式产生的日志数据进行存储,以及,对所述分布式系统进行监控;事务管理模块,用于通过sdk对分布式系统中的事务执行定义事务边界、注册事务分支、注册事务资源和管理全局事务锁管理,以及,根据请求,查询所述分布式系统的事务资源并上报;事务提交模块,用于采用自动方式对所述事务执行提交。
27.本发明实施例的另一方面提供了一种电子设备,包括处理器以及存储器;
28.所述存储器用于存储程序;
29.所述处理器执行所述程序实现如前文所描述的方法。
30.本发明实施例还公开了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器可以从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行前文所描述的方法。
31.本发明的有益效果为:本发明把事务协调器作为独立的进程,应用以sdk的方式简单方便地接入分布式事务管理,事务协调器可以以集群的方式部署,不会像xa协议那样存在单点故障问题,同时事务协调器拥有超时机制,保证了事务资源不会出现长时间同步阻塞的情况。实现了自动提交的事务模式,对业务逻辑的无侵入,相对于xa协议嵌入业务代码实现的方式来说极大地降低了业务的开发学习成本;基于注解的方式提供了tcc事务资源、saga事务资源的快速实现,由此把资源锁的控制交给具体业务来把握,资源锁粒度的大小可控,不会导致整个资源被锁定。同时业务逻辑基于confirm和cancel接口实现幂等性,可保证事务在最终完成确认或者取消时数据的一致性,相对xa协议和三阶段提交协议来说,数据的最终一致性可控,降低了事务处理的故障率。
32.本发明的附加方面和优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本发明的实践了解到。
附图说明
33.本发明的上述和/或附加的方面和优点从结合下面附图对实施例的描述中将变得明显和容易理解,其中:
34.图1是现有技术的两阶段提交的xa协议示意图。
35.图2是现有技术的三阶段提交的协议示意图。
36.图3是现有技术的tcc两阶段补偿模式示意图。
37.图4是本发明实施例的基于独立事务协调器的分布式事务处理方法的流程示意图。
38.图5a,图5b是本发明实施例的事务信息存储示意图。
39.图6是本发明实施例的集群示意图。
40.图7是本发明实施例的一种事务监控系统示意图。
41.图8是本发明实施例的sdk管理示意图。
42.图9a,9b,9c为本发明实施例的全局与分支事务的不同状态的流程示意图。
43.图10为本发明实施例的tcc事务模式示意图。
44.图11为本发明实施例的saga事务模式示意图。
45.图12是本发明实施例的基于独立事务协调器的分布式事务处理分析装置图。
具体实施方式
46.下面详细描述本发明的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。在后续的描述中,使用用于表示元件的诸如“模块”、“部件”或“单元”的后缀仅为了有利于本发明的说明,其本身没有特有的意义。因此,“模块”、“部件”或“单元”可以混合地使用。“第一”、“第二”等只是用于区分技术特征为目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量或者隐含指明所指示的技术特征的先后关系。在本后续的描述中,对方法步骤的连续标号是为了方便审查和理解,结合本发明的整体技术方案以及各个步骤之间的逻辑关系,调整步骤之间的实施顺序并不会影响本发明技术方案所达到的技术效果。下面通过参考附图描述的实施例是示例性的,仅用于解释本发明,而不能理解为对本发明的限制。
47.图4是本发明实施例的基于独立事务协调器的分布式事务处理方法的流程示意图。其流程包括:
48.s100,创建集群,每个集群包括对应的事务协调器,通过事务协调器对分布式产生的日志数据进行存储,以及,对分布式系统进行监控;
49.s200,对分布式系统中的事务执行定义事务边界、注册事务分支、注册事务资源和管理全局事务锁管理,以及,根据请求,查询分布式系统的事务资源并上报;
50.s300,采用自动方式对事务执行提交。
51.图5a,图5b是本发明实施例的事务信息存储示意图。参考图5a和图5b,本发明的实施例将事务协调器(server)设计为一个单独运行的进程,具有高可用、可扩展的特点。事务管理器和资源管理器(sdk)通过网络与事务协调器进行通信,完成事务的开启、提交和回滚。事务协调器的主要模块有以下几点:
52.事务信息存储模块:此模块负责存储事务信息,存储方式主要分为两类,参考图5a,一是基于raft协议进行日志文件的存储,以至少三个节点的奇数个节点组成一个有状态集群,集群之间的事务消息通过日志复制实现数据同步;参考图5b二是基于集中式的存储,如关系型数据库或者nosql如redis等,以个数大于1的节点群成一个无状态集群。
53.图6是本发明实施例的集群示意图,本实施的模块负责构建集群,一个事务协调器进程的节点隶属于一个集群,一个集群隶属于一个服务分组;集群模式有两种,有状态raft集群和无状态集群。
54.图7是本发明实施例的一种事务监控系统示意图,本实施例的模块负责监控系统资源、jvm参数、网络、以及运行过程中相应事务的执行状态,同时对接监控预警平台实时地监控事务协调器内部的运行状态,通过对监控指标的观察预判可能出现的问题,以预警的方式,在系统或者服务在发生故障时能够快速通知相关的人员进行处理,将问题的影响降到最低。
55.图8是本发明实施例的sdk管理示意图,sdk包含事务管理器、资源管理器、基础功能层。其中,基础功能层为事务管理器和资源管理器提供基本的功能支持,事务管理器与资源管理器除了其本身有各自的核心功能外,事务管理器还负责资源管理器的生命周期管理。
56.事务管理器:在事务处理中充当着事务管理的作用,主要功能是定义事务边界、注册事务分支、注册事务资源和管理全局事务锁。
57.资源管理器:主要负责在其运行环境中,自动扫描出该运行环境下所有的事务资源,如关系型数据库datasource、tcc服务、saga服务等,并协调各个事务资源在全局事务进行到提交或者回滚阶段时,作出相应的处理,例如当全局事务提交时,tcc事务资源应该进行confirm处理。
58.图9a,9b,9c为本发明实施例的全局与分支事务的不同状态的流程示意图。
59.参考图9a,在一个全局事务中,各个事务分支所对应的事务资源根据其收到的sql语句,生成对应的数据镜像查询语句,使用该数据镜像查询语句查询出sql操作前的数据前置镜像(front image),并将前置镜像数据保存在该分支数据库,前置镜像数据保存完毕后,执行分支sql,并在之后查询数据后置镜像(after image)并将后置镜像数据保存到数据库中,最终执行分支事务的本地提交。
60.参考图9b,当分支事务收到全局事务提交的通知时,仅仅需要删除前置镜像数据以及后置镜像数据,并且可以异步做。
61.参考图9c,当收到全局的回滚请求时,分支事务的事务资源通过镜像查询语句查询当前数据库中的数据是否与后置镜像中记录的一致,如果一致,则使用前置镜像数据对相关的数据进行回滚,否则告警,进行人工干预。
62.图10为本发明实施例的tcc事务模式示意图,tcc是两阶段提交的分布式事务解决方案,可用于解决跨数据库、跨服务业务操作的数据一致性问题;tcc其try、confirm、cancel 3个方法均由业务编码实现的,一般try操作作为一阶段负责资源的检查和预留;confirm操作作为二阶段提交操作,执行真正的业务;cancel是二阶段回滚操作,执行预留资源的取消,使资源回到初始状态。
63.tcc模式的运行逻辑:业务编码时通过在方法前添加注解@tcc来标注一个tcc事务
资源;事务资源管理器在应用启动过程中扫描到该注解,先往事务协调器注册一个事务分支资源;在发起全局事务并调用该事务分支资源时,事务管理器识别到@tcc注解,便向事务协调器注册事务分支信息,事务管理器进行到提交或回滚阶段时,通知事务协调器发起事务分支的提交或回滚,事务资源管理器收到分支提交或回滚请求时,协调tcc事务资源作出相应处理,当请求为提交时,调起confirm方法,请求为回滚时,调起cancel方法。
64.图11为本发明实施例的saga事务模式示意图,saga是一种补偿协议,在saga模式下,分布式事务内有多个参与者,每一个参与者都拥有一个可以冲正的补偿服务,需要用户根据业务场景实现其正向操作和逆向回滚操作。
65.saga模式的运行逻辑:业务编码时通过在方法前添加注解@saga来标注一个saga事务资源;事务资源管理器在应用启动过程中扫描到该注解,先往事务协调器注册一个事务分支资源;在发起全局事务并调用该事务分支资源时,事务管理器识别到@saga注解,便向事务协调器注册事务分支信息,如果任何一个事务分支的正向操作执行失败,那么事务管理器通知事务协调器,同步逆向地退回去执行前面各参与者的反向补偿操作,回滚已提交的参与者,使分布式事务回到初始状态。
66.图12是本发明实施例的基于独立事务协调器的分布式事务处理分析装置图。所示所示,本发明实施例还提供了一种基于独立事务协调器的分布式事务处理分析装置,该装置包括了事务协调模块1201、事务管理模块1202、事务提交模块1203。
67.事务协调模块,用于创建集群,每个集群包括对应的事务协调器,通过事务协调器对分布式产生的日志数据进行存储,以及,对分布式系统进行监控;
68.事务管理模块,用于通过sdk对分布式系统中的事务执行定义事务边界、注册事务分支、注册事务资源和管理全局事务锁管理,以及,根据请求,查询分布式系统的事务资源并上报;
69.事务提交模块,用于采用自动方式对事务执行提交。
70.示例性地,在装置中的事务协调模块、事务管理模块及事务提交模块的协同下,实施例装置可以实现前述的任意一种基于独立事务协调器的分布式事务处理方法,即创建集群,每个集群包括对应的事务协调器,通过事务协调器对分布式产生的日志数据进行存储,以及,对分布式系统进行监控;对分布式系统中的事务执行定义事务边界、注册事务分支、注册事务资源和管理全局事务锁管理,以及,根据请求,查询分布式系统的事务资源并上报;采用自动方式对事务执行提交。本发明把事务协调器作为独立的进程,应用以sdk的方式简单方便地接入分布式事务管理,事务协调器可以以集群的方式部署,不会像xa协议那样存在单点故障问题,同时事务协调器拥有超时机制,保证了事务资源不会出现长时间同步阻塞的情况。本发明也实现了自动提交的事务模式,对业务逻辑的无侵入,相对于xa协议嵌入业务代码实现的方式来说极大地降低了业务的开发学习成本;本发明基于注解的方式提供了tcc事务资源、saga事务资源的快速实现,由此把资源锁的控制交给具体业务来把握,资源锁粒度的大小可控,不会导致整个资源被锁定。同时业务逻辑基于confirm和cancel接口实现幂等性,可保证事务在最终完成确认或者取消时数据的一致性,相对xa协议和三阶段提交协议来说,数据的最终一致性可控。
71.本发明实施例还提供了一种电子设备,该电子设备包括处理器以及存储器;
72.存储器存储有程序;
73.处理器执行程序以执行前述的基于独立事务协调器的分布式事务处理方法;该电子设备具有搭载并运行本发明实施例提供的基于独立事务协调器的分布式事务处理的软件系统的功能,例如,个人计算机(personal computer,pc)、手机、智能手机、个人数字助手(personal digital assistant,pda)、可穿戴设备、掌上电脑ppc(pocket pc)、平板电脑等。
74.本发明实施例还提供了一种计算机可读存储介质,存储介质存储有程序,程序被处理器执行实现如前面的基于独立事务协调器的分布式事务处理方法。
75.在一些可选择的实施例中,在方框图中提到的功能/操作可以不按照操作示图提到的顺序发生。例如,取决于所涉及的功能/操作,连续示出的两个方框实际上可以被大体上同时地执行或所述方框有时能以相反顺序被执行。此外,在本发明的流程图中所呈现和描述的实施例以示例的方式被提供,目的在于提供对技术更全面的理解。所公开的方法不限于本文所呈现的操作和逻辑流程。可选择的实施例是可预期的,其中各种操作的顺序被改变以及其中被描述为较大操作的一部分的子操作被独立地执行。
76.本发明实施例还公开了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器可以从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行前述的基于独立事务协调器的分布式事务处理方法。
77.此外,虽然在功能性模块的背景下描述了本发明,但应当理解的是,除非另有相反说明,所述的功能和/或特征中的一个或多个可以被集成在单个物理装置和/或软件模块中,或者一个或多个功能和/或特征可以在单独的物理装置或软件模块中被实现。还可以理解的是,有关每个模块的实际实现的详细讨论对于理解本发明是不必要的。更确切地说,考虑到在本文中公开的装置中各种功能模块的属性、功能和内部关系的情况下,在工程师的常规技术内将会了解该模块的实际实现。因此,本领域技术人员运用普通技术就能够在无需过度试验的情况下实现在权利要求书中所阐明的本发明。还可以理解的是,所公开的特定概念仅仅是说明性的,并不意在限制本发明的范围,本发明的范围由所附权利要求书及其等同方案的全部范围来决定。
78.所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-only memory)、随机存取存储器(ram,random access memory)、磁碟或者光盘等各种可以存储程序代码的介质。
79.在流程图中表示或在此以其他方式描述的逻辑和/或步骤,例如,可以被认为是用于实现逻辑功能的可执行指令的定序列表,可以具体实现在任何计算机可读介质中,以供指令执行系统、装置或设备(如基于计算机的系统、包括处理器的系统或其他可以从指令执行系统、装置或设备取指令并执行指令的系统)使用,或结合这些指令执行系统、装置或设备而使用。就本说明书而言,“计算机可读介质”可以是任何可以包含、存储、通信、传播或传输程序以供指令执行系统、装置或设备或结合这些指令执行系统、装置或设备而使用的装
置。
80.计算机可读介质的更具体的示例(非穷尽性列表)包括以下:具有一个或多个布线的电连接部(电子装置),便携式计算机盘盒(磁装置),随机存取存储器(ram),只读存储器(rom),可擦除可编辑只读存储器(eprom或闪速存储器),光纤装置,以及便携式光盘只读存储器(cdrom)。另外,计算机可读介质甚至可以是可在其上打印所述程序的纸或其他合适的介质,因为可以例如通过对纸或其他介质进行光学扫描,接着进行编辑、解译或必要时以其他合适方式进行处理来以电子方式获得所述程序,然后将其存储在计算机存储器中。
81.应当理解,本发明的各部分可以用硬件、软件、固件或它们的组合来实现。在上述实施方式中,多个步骤或方法可以用存储在存储器中且由合适的指令执行系统执行的软件或固件来实现。例如,如果用硬件来实现,和在另一实施方式中一样,可用本领域公知的下列技术中的任一项或他们的组合来实现:具有用于对数据信号实现逻辑功能的逻辑门电路的离散逻辑电路,具有合适的组合逻辑门电路的专用集成电路,可编程门阵列(pga),现场可编程门阵列(fpga)等。
82.在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。
83.尽管已经示出和描述了本发明的实施例,本领域的普通技术人员可以理解:在不脱离本发明的原理和宗旨的情况下可以对这些实施例进行多种变化、修改、替换和变型,本发明的范围由权利要求及其等同物限定。
84.以上是对本发明的较佳实施进行了具体说明,但本发明并不限于所述实施例,熟悉本领域的技术人员在不违背本发明精神的前提下还可做出种种的等同变形或替换,这些等同的变形或替换均包含在本技术权利要求所限定的范围内。
转载请注明原文地址:https://tc.8miu.com/read-224.html