CN116775227A - 分布式事务处理方法及*** - Google Patents

分布式事务处理方法及*** Download PDF

Info

Publication number
CN116775227A
CN116775227A CN202210237149.6A CN202210237149A CN116775227A CN 116775227 A CN116775227 A CN 116775227A CN 202210237149 A CN202210237149 A CN 202210237149A CN 116775227 A CN116775227 A CN 116775227A
Authority
CN
China
Prior art keywords
transaction
saga
event
sub
distributed
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202210237149.6A
Other languages
English (en)
Inventor
李高翔
庄双林
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
China Mobile Communications Group Co Ltd
China Mobile Financial Technology Co Ltd
China Mobile Group Electronic Commerce Co Ltd
Original Assignee
China Mobile Communications Group Co Ltd
China Mobile Financial Technology Co Ltd
China Mobile Group Electronic Commerce Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by China Mobile Communications Group Co Ltd, China Mobile Financial Technology Co Ltd, China Mobile Group Electronic Commerce Co Ltd filed Critical China Mobile Communications Group Co Ltd
Priority to CN202210237149.6A priority Critical patent/CN116775227A/zh
Publication of CN116775227A publication Critical patent/CN116775227A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/466Transaction processing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/465Distributed object oriented systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/546Message passing systems or structures, e.g. queues
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/54Indexing scheme relating to G06F9/54
    • G06F2209/547Messaging middleware

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Multi Processors (AREA)
  • Computer And Data Communications (AREA)

Abstract

本申请提供分布式事务处理方法及***。所述方法包括:分布式事务服务接收由初始服务发出的SAGA事务开启请求,向分布式消息中间件发送创建SAGA事务事件,并向初始服务返回事务ID;分布式事务服务接收子服务根据事务ID发出的SAGA子事务开启请求,并向分布式消息中间件发送创建SAGA子事务事件;分布式事务服务接收子服务发出的SAGA事务结束请求,向分布式消息中间件发送SAGA子事务结束事件;分布式事务服务接收由流处理***发出的事件流处理结果,并根据事件流处理结果结束SAGA事务。本申请实施例提供的分布式事务处理方法及***,能够避免对数据库的强依赖,有效提升业务的整体TPS。

Description

分布式事务处理方法及***
技术领域
本申请涉及事务处理技术领域,具体涉及一种分布式事务处理方法及***。
背景技术
分布式事务是指当事务的参与者、事务资源以及事务管理器存在于分布式***的不同节点中时,需要有一个全局的事务来保证这些操作要么全部成功,要么全部失败,从而保证数据在分布式***中的一致性。SAGA事务(又称Long-running-transaction,长事务)是目前常见的分布式事务的解决方案之一,其核心思路是将长事务拆分为多个本地短事务,由SAGA事务协调器协调,如果正常结束就事务成功,如果某个步骤失败,则根据相反顺序依次调用补偿操作。在目前的SAGA事务***中,一般流程为:客户端不断向服务端发送事务事件,事务管理器持久化事务事件到数据库,之后通过定时扫描数据库的方式判断事务状态并协调客户端发起事务回滚。可见,现有的事务***高度依赖关系型数据库,而在大型分布式***中,数据库是最容易到达性能瓶颈的***,同时数据库难以进行水平扩展,并且其工作原理(如果有一项步骤失败,则前期执行的所有步骤工作均将回滚)严重影响业务的整体TPS(TransactionPerSecond,每秒事务处理量)。
发明内容
本申请实施例提供一种分布式事务处理方法,用以解决现有事务处理方法强依赖数据库,严重影响业务的整体TPS的技术问题。
第一方面,本申请实施例提供一种分布式事务处理方法,包括:
接收由初始服务发出的SAGA事务开启请求,向分布式消息中间件发送创建SAGA事务事件,并向初始服务返回事务ID;
接收子服务根据所述事务ID发出的SAGA子事务开启请求,并向分布式消息中间件发送创建SAGA子事务事件;
接收子服务执行SAGA子事务后发出的SAGA事务结束请求,向分布式消息中间件发送SAGA子事务结束事件,并返回响应至初始服务;
接收由流处理***发出的根据所述创建SAGA事务事件、所述创建SAGA子事务事件、以及所述SAGA子事务结束事件得到的事件流处理结果,并根据所述事件流处理结果结束SAGA事务。
在一个实施例中,所述接收子服务执行SAGA子事务后发出的SAGA事务结束请求,向分布式消息中间件发送SAGA子事务结束事件,具体为以下任一项:
接收子服务成功执行SAGA子事务后发出的SAGA事务结束请求,向分布式消息中间件发送SAGA子事务成功事件;
接收子服务执行SAGA子事务失败后发出的SAGA事务结束请求,向分布式消息中间件发送SAGA子事务失败事件。
在一个实施例中,所述接收由流处理***发出的根据所述创建SAGA事务事件、所述创建SAGA子事务事件、以及所述SAGA子事务结束事件得到的事件流处理结果,并根据所述事件流处理结果结束SAGA事务,具体为以下任一项:
接收由流处理***发出的根据所述创建SAGA事务事件、所述创建SAGA子事务事件、以及所述SAGA子事务结束事件得到的SAGA事务成功结果,结束SAGA事务;
接收由流处理***发出的根据所述创建SAGA事务事件、所述创建SAGA子事务事件、以及所述SAGA子事务结束事件得到的SAGA事务失败结果,根据所述SAGA事务失败结果发起事务补偿,并在接收到事务补偿结果后结束SAGA事务。
第二方面,本申请实施例提供另一种分布式事务处理方法,包括:
接收分布式事务服务发送的创建SAGA事务事件;
接收分布式事务服务发送的创建SAGA子事务事件;
接收分布式事务服务发送的SAGA子事务结束事件;
根据所述创建SAGA事务事件、所述创建SAGA子事务事件、以及所述SAGA子事务结束事件,得到事件流处理结果;
将所述事件流处理结果发送至分布式事务服务,并将事务数据持久化至事务数据库。
在一个实施例中,所述根据所述创建SAGA事务事件、所述创建SAGA子事务事件、以及所述SAGA子事务结束事件,得到事件流处理结果,包括:
根据所述创建SAGA事务事件、所述创建SAGA子事务事件、以及所述SAGA子事务结束事件,得到全局事务状态;
根据所述全局事务状态处理事务数据,得到事件流处理结果。
在一个实施例中,所述根据所述全局事务状态处理事务数据,包括:
若所述全局事务状态为全局事务成功状态,则将成功状态的事务数据发送至成功事务主题,以供进行数据持久化处理;
若所述全局事务状态为全局事务失败状态,则将失败状态的事务数据发送至失败事务主题,以供分布式事务服务发起事务补偿;
若所述全局事务状态为全局事务未完成状态,则将未完成状态的事务数据存储于本地存储库,以供进行数据后续处理。
第三方面,本申请实施例提供一种分布式事务处理***,包括:初始服务、子服务、分布式事务服务、以及分布式消息及流处理组件,
所述初始服务分别与所述子服务以及所述分布式事务服务连接,所述子服务与所述分布式事务服务连接,所述分布式事务服务与所述分布式消息及流处理组件连接,所述分布式消息及流处理组件包括分布式消息中间件和流处理程序,所述分布式消息中间件和所述流处理程序之间呈绑定关系,
所述分布式事务服务用于执行第一方面所述的分布式事务处理方法,以及所述分布式消息及流处理组件用于第二方面所述的分布式事务处理方法。
第四方面,本申请实施例提供一种网络设备,包括存储器,收发机,处理器;
存储器,用于存储计算机程序;收发机,用于在所述处理器的控制下收发数据;处理器,用于读取所述存储器中的计算机程序并执行以下操作:
接收由初始服务发出的SAGA事务开启请求,向分布式消息中间件发送创建SAGA事务事件,并向初始服务返回事务ID;
接收子服务根据所述事务ID发出的SAGA子事务开启请求,并向分布式消息中间件发送创建SAGA子事务事件;
接收子服务执行SAGA子事务后发出的SAGA事务结束请求,向分布式消息中间件发送SAGA子事务结束事件,并返回响应至初始服务;
接收由流处理***发出的根据所述创建SAGA事务事件、所述创建SAGA子事务事件、以及所述SAGA子事务结束事件得到的事件流处理结果,并根据所述事件流处理结果结束SAGA事务。
第五方面,一种网络设备,包括存储器,收发机,处理器;
存储器,用于存储计算机程序;收发机,用于在所述处理器的控制下收发数据;处理器,用于读取所述存储器中的计算机程序并执行以下操作:
接收分布式事务服务发送的创建SAGA事务事件;
接收分布式事务服务发送的创建SAGA子事务事件;
接收分布式事务服务发送的SAGA子事务结束事件;
根据所述创建SAGA事务事件、所述创建SAGA子事务事件、以及所述SAGA子事务结束事件,得到事件流处理结果;
将所述事件流处理结果发送至分布式事务服务,并将事务数据持久化至事务数据库。
第六方面,本申请实施例提供一种电子设备,包括处理器和存储有计算机程序的存储器,所述处理器执行所述程序时实现第一方面或第二方面所述的分布式事务处理方法。
第七方面,本申请实施例提供一种计算机程序产品,包括计算机程序,所述计算机程序被处理器执行时实现第一方面或第二方面所述的分布式事务处理方法。
本申请实施例提供的分布式事务处理方法及***,通过引入分布式消息中间件,接收分布式事务服务发出的创建SAGA事务事件、创建SAGA子事务事件、以及SAGA子事务结束事件,能够将事务的中间状态保存在消息队列中,并且在流处理***根据创建SAGA事务事件、创建SAGA子事务事件、以及SAGA子事务结束事件得到事件流处理结果后再结束SAGA事务以及将事务数据持久化至事务数据库,能够避免对数据库的强依赖,为数据库的水平扩展提供空间,且缩短了业务流程,有效提升业务的整体TPS。
附图说明
为了更清楚地说明本申请或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本申请实施例提供的一种分布式事务处理方法的流程示意图;
图2是本申请实施例提供的另一种分布式事务处理方法的流程示意图;
图3示出SAGA事务事件流的处理流程;
图4示出SAGA事务成功时的事务处理流程;
图5示出SAGA事务失败时的事务处理流程;
图6是本申请实施例提供的一种网络设备的结构示意图;
图7是本申请实施例提供的另一种网络设备的结构示意图;
图8是本申请实施例提供的电子设备的结构示意图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
图1为本申请实施例提供的一种分布式事务处理方法的流程示意图。
参照图1,本申请实施例提供的一种分布式事务处理方法,可以包括:
S110、接收由初始服务发出的SAGA事务开启请求,向分布式消息中间件发送创建SAGA事务事件,并向初始服务返回事务ID。
S120、接收子服务根据所述事务ID发出的SAGA子事务开启请求,并向分布式消息中间件发送创建SAGA子事务事件。
S130、接收子服务执行SAGA子事务后发出的SAGA事务结束请求,向分布式消息中间件发送SAGA子事务结束事件,并返回响应至初始服务。
S140、接收由流处理***发出的根据所述创建SAGA事务事件、所述创建SAGA子事务事件、以及所述SAGA子事务结束事件得到的事件流处理结果,并根据所述事件流处理结果结束SAGA事务。
需要说明的是,本发明提供的一种分布式事务处理方法的执行主体可以是任何网络侧设备,例如分布式事务服务。
在步骤S110中,分布式事务服务会接收由初始服务发出的SAGA事务开启请求,向分布式消息中间件发送创建SAGA事务事件,并向初始服务返回事务ID。
需要说明的是,初始服务会向分布式事务服务发出SAGA事务开启请求,然后由分布式事务服务接收,再向分布式消息中间件发送创建SAGA事务事件,并向初始服务返回事务ID。
在步骤S120中,分布式事务服务会接收子服务根据所述事务ID发出的SAGA子事务开启请求,并向分布式消息中间件发送创建SAGA子事务事件。
需要说明的是,根据事务ID可以设置若干子服务分别按照时间顺序执行子事务。
在步骤S130中,分布式事务服务会接收子服务执行SAGA子事务后发出的SAGA事务结束请求,向分布式消息中间件发送SAGA子事务结束事件,并返回响应至初始服务。
需要说明的是,每一个子服务执行完毕SAGA子事务后,均会向分布式事务服务发出SAGA事务结束请求,再由分布式事务服务向分布式消息中间件发送对应的SAGA子事务结束事件。
具体的,所述接收子服务执行SAGA子事务后发出的SAGA事务结束请求,向分布式消息中间件发送SAGA子事务结束事件,可以为以下任一项:
接收子服务成功执行SAGA子事务后发出的SAGA事务结束请求,向分布式消息中间件发送SAGA子事务成功事件;
接收子服务执行SAGA子事务失败后发出的SAGA事务结束请求,向分布式消息中间件发送SAGA子事务失败事件。
需要说明的是,子服务在执行SAGA子事务后,会根据执行结果的状态(执行成功或执行失败)来向分布式事务服务发出SAGA事务结束请求,再由分布式事务服务向分布式消息中间件发送对应的SAGA子事务结束事件。
在步骤S140中,分布式事务服务会接收由流处理***发出的根据所述创建SAGA事务事件、所述创建SAGA子事务事件、以及所述SAGA子事务结束事件得到的事件流处理结果,并根据所述事件流处理结果结束SAGA事务。
具体的,所述接收由流处理***发出的根据所述创建SAGA事务事件、所述创建SAGA子事务事件、以及所述SAGA子事务结束事件得到的事件流处理结果,并根据所述事件流处理结果结束SAGA事务,可以为以下任一项:
接收由流处理***发出的根据所述创建SAGA事务事件、所述创建SAGA子事务事件、以及所述SAGA子事务结束事件得到的SAGA事务成功结果,结束SAGA事务;
接收由流处理***发出的根据所述创建SAGA事务事件、所述创建SAGA子事务事件、以及所述SAGA子事务结束事件得到的SAGA事务失败结果,根据所述SAGA事务失败结果发起事务补偿,并在接收到事务补偿结果后结束SAGA事务。
需要说明的是,本申请实施例提供的一种分布式事务处理方法通过引入分布式消息中间件,将事务的中间状态保存在消息队列中,在事务最终状态明确后通过批量写入的方式持久化到数据库,解决了数据库性能瓶颈的问题;避免对数据库的强依赖,解决了数据库难以水平扩展的问题;将二阶段事务处理异步化,缩短了业务流程,有效提升业务的整体TPS。
图2为本申请实施例提供的另一种分布式事务处理方法的流程示意图。
参照图2,本申请实施例提供的另一种分布式事务处理方法,可以包括:
S110’、接收分布式事务服务发送的创建SAGA事务事件。
S120’、接收分布式事务服务发送的创建SAGA子事务事件。
S130’、接收分布式事务服务发送的SAGA子事务结束事件。
S140’、根据所述创建SAGA事务事件、所述创建SAGA子事务事件、以及所述SAGA子事务结束事件,得到事件流处理结果。
S150’、将所述事件流处理结果发送至分布式事务服务,并将事务数据持久化至事务数据库。
需要说明的是,本发明提供的另一种分布式事务处理方法的执行主体可以是任何网络侧设备,例如分布式消息及流处理组件,所述分布式消息及流处理组件包括分布式消息中间件和流处理程序,流处理程序与分布式消息中间件之间的关系为强绑定关系。
在步骤S110’中,分布式消息及流处理组件会接收分布式事务服务发送的创建SAGA事务事件。
需要说明的是,其中由分布式消息中间件接收分布式事务服务发送的创建SAGA事务事件。
在步骤S120’中,分布式消息及流处理组件会接收分布式事务服务发送的创建SAGA子事务事件。
需要说明的是,其中由分布式消息中间件接收分布式事务服务发送的创建SAGA子事务事件。
在步骤S130’中,分布式消息及流处理组件会接收分布式事务服务发送的SAGA子事务结束事件。
需要说明的是,其中由分布式消息中间件接收分布式事务服务发送的SAGA子事务结束事件。
在步骤S140’中,分布式消息及流处理组件会根据所述创建SAGA事务事件、所述创建SAGA子事务事件、以及所述SAGA子事务结束事件,得到事件流处理结果。
需要说明的是,分布式消息中间件接收分布式事务服务发送的创建SAGA事务事件、创建SAGA子事务事件、以及SAGA子事务结束事件后,会由流处理程序处理事件流,并得到事件流处理结果。
具体的,所述根据所述创建SAGA事务事件、所述创建SAGA子事务事件、以及所述SAGA子事务结束事件,得到事件流处理结果,可以包括:
根据所述创建SAGA事务事件、所述创建SAGA子事务事件、以及所述SAGA子事务结束事件,得到全局事务状态;
根据所述全局事务状态处理事务数据,得到事件流处理结果。
需要说明的是,所述根据所述全局事务状态处理事务数据,包括:
若所述全局事务状态为全局事务成功状态,分布式消息及流处理组件会将成功状态的事务数据发送至成功事务主题,以供进行数据持久化处理;
若所述全局事务状态为全局事务失败状态,分布式消息及流处理组件会将失败状态的事务数据发送至失败事务主题,以供分布式事务服务发起事务补偿;
若所述全局事务状态为全局事务未完成状态,分布式消息及流处理组件会将未完成状态的事务数据存储于本地存储库,以供进行数据后续处理。
在步骤S150’中,分布式消息及流处理组件会将所述事件流处理结果发送至分布式事务服务,并将事务数据持久化至事务数据库。
需要说明的是,事件流处理结果可以是表示全局事务执行成功的事件流处理结果,也可以是表示全局事务执行失败的事件流处理结果,当分布式事务服务接收到表示全局事务执行成功的事件流处理结果时,可以立即结束SAGA事务,当分布式事务服务接收到表示全局事务执行失败的事件流处理结果时,可以根据表示全局事务执行失败的事件流处理结果来发起事务补偿,并在接收到事务补偿结果后才结束SAGA事务。
需要说明的是,本发明实施例提供的分布式事务处理方法通过增加分布式消息中间件(例如Kafka、Pulsa等)以及流处理程序(例如KafkaStream、Flink等)实现,其中,分布式消息中间件负责持久化事务数据(如事务消息),保证消息的持久化及消费的唯一性;流处理程序负责业务逻辑,实现SAGA分布式事务处理的流程。
为了更加清晰地阐述本发明实施例提供的分布式事务处理方法,现结合图3-5从整体上进一步进行描述。
本发明实施例提供的分布式事务处理方法,改进了现有***中分布式事务服务客户端和服务端处理SAGA事务的流程,将事务补偿处理异步化,提升了处理效率。
(一)SAGA分布式事务事件流处理流程
参照图3,整个流处理程序主要分为四部分,分布式事务服务通过流处理程序异步消费事务事件流并得到事件流处理结果:
1.1、事务事件流处理
(1)服务端程序订阅事务事件主题开始事务事件的流处理流程;
(2)同一个全局SAGA事务的事务ID相同,故按事务ID分组聚合,每个事务ID聚合后形成一组事务事件集合;
(3)将聚合后的事务事件集合存储在本地存储(LevelDB或内存)中;
(4)根据事务事件集合的状态判断全局事务状态;
(5)若全局事务状态为全局事务成功状态,则将成功事务的数据发送到成功事务主题;若全局事务状态为全局事务失败状态或全局事务超时状态,则将失败事务或超时事务的数据发送到失败事务主题;若全局事务状态为全局事务未完成状态,则数据留存在本地存储中等待下次处理。
1.2、成功事务流处理
(1)服务端程序订阅成功事务主题开始成功事务的流处理流程;
(2)成功事务数据加工(设置成功事务数据状态等相关字段等),存储事务集合到成功事务的本地存储中;
(3)流处理程序批量将本地存储的事务集合写入事务数据库。
1.3、失败事务流处理
(1)服务端程序订阅失败事务主题开始失败事务的流处理流程;
(2)失败事务数据加工(设置失败事务数据状态等相关字段等),将事务ID发送到回调事务主题用以发起SAGA补偿回调。
(3)在进行失败事务的处理时,会优先执行失败子事务ID对应的子事务,并在这些前期失败的子事务能够成功后再执行其他子事务。
1.4、回调事务流处理
(1)服务端程序订阅回调事务主题开始回调事务的流处理流程;
(2)回调事务数据加工(设置回调事务数据状态等相关字段等),根据事务状态调用补偿方法;
(3)发起补偿调用后,判断业务端返回状态,返回失败,则将事务ID重新写回回调事务主题等待下次处理;若返回成功,则更新事务状态,将事务集合写入事务数据库。
(二)当SAGA事务成功时的事务处理流程
参照图4,当SAGA事务成功时,事务处理流程如图所示:
2.1、初始服务向分布式事务服务发出SAGA事务开启请求,分布式事务服务收到请求后向分布式消息中间件发送创建SAGA全局事务事件,成功后返回事务ID。
2.2、按业务流程,子服务1向分布式事务服务发送SAGA子事务1开启请求,分布式事物服务收到请求后向分布式消息中间件发送创建SAGA子事务1事件,成功后返回;之后子服务1开始执行SAGA子事务1,SAGA子事务1执行成功后,子服务1向分布式事务服务发出SAGA子事务1结束请求,分布式事物服务收到请求后向分布式消息中间件发送SAGA子事务1成功事件。
2.3、子服务2向分布式事务服务发送SAGA子事务2开启请求,分布式事物服务收到请求后向分布式消息中间件发送创建SAGA子事务2事件,成功后返回;之后子服务2开始执行SAGA子事务2,SAGA子事务2执行成功后,子服务2向分布式事务服务发送SAGA子事务2结束请求,分布式事物服务收到请求后向分布式消息中间件发送SAGA子事务2成功事件。
2.4、初始服务在子事务全部执行完毕后结束业务端的处理,成功返回。
2.5、分布式事务服务通过流处理程序异步消费事务事件流、处理事务结果、并得到事件流处理结果,分布式事务服务根据成功的事件流处理结果结束整个SAGA事务,流处理程序将成功状态的SAGA事务及子事务数据持久化至事务数据库(例如关系型数据库)。
(三)参照图5,当SAGA事务失败时的事务处理流程如下。
3.1、和成功流程类似,假设在子事务2时业务失败,则整个SAGA事务失败,初始服务在子事务全部执行完毕后结束业务端的处理,SAGA全局事务失败。
3.2、分布式事务服务通过流处理程序异步消费事务事件流、处理事务、并得到事件流处理结果,根据失败的事件流处理结果依次向客户端发起事务补偿消息,客户端将补偿结果反馈给分布式事务服务,分布式事务服务在接收到反馈的事务补偿结果后结束整个SAGA事务,流处理程序将失败状态的SAGA事务及子事务数据持久化进至事务数据库(例如关系型数据库)。
本申请实施例提供的分布式事务处理方法能够带来至少如下优势。
优势一:分布式事务服务的实例本身没有状态,依托于带副本机制的消息队列,如Kafka的Replication机制,通过本申请实施例提供的分布式事务处理方法实现分布式事务服务能够很简单地实现高可用。
优势二:通过在发送至消息队列时进行分片,如Kafka的Topic分片机制,可以预先规划对事务数据的分片以提高***并行度,当***容量不足时,扩展消息队列的集群即可实现不停机扩容并迁移数据。
优势三:实现本申请实施例提供的分布式事务处理方法的***在接收客户端事务事件时,直接发送到Kafka集群,再通过流处理的方式实现事务状态的判断,在处理成功前不需要依赖数据库或扫描数据,全部中间数据都在内存中计算,所有的中间数据都持久化在Kafka,在处理SAGA事务失败时,事务结束后直接返回应用,失败事务的补偿异步处理,提高了业务整体TPS。
优势四:利用流处理中开启窗口再聚合的方式处理窗口范围内的事务消息,可以允许一定时间范围内的乱序消息和消息缺失,消息容错性能好。
进一步的,本申请实施例还提供一种分布式事务处理***,包括:初始服务、子服务、分布式事务服务、以及分布式消息及流处理组件,
所述初始服务分别与所述子服务以及所述分布式事务服务连接,所述子服务与所述分布式事务服务连接,所述分布式事务服务与所述分布式消息及流处理组件连接,所述分布式消息及流处理组件包括分布式消息中间件和流处理程序,所述分布式消息中间件和所述流处理程序之间呈绑定关系,
所述分布式事务服务用于执行上述本申请实施例提供的一种分布式事务处理方法(图1所示的分布式事务处理方法),以及所述分布式消息及流处理组件用于执行上述本申请实施例提供的另一种分布式事务处理方法(图2所示的分布式事务处理方法)。
图6为根据本申请实施例提供的一种网络设备的结构示意图,参照图6,本申请实施例提供的一种网络设备,可以包括:存储器610,收发机620以及处理器630;
存储器610用于存储计算机程序;收发机620,用于在所述处理器630的控制下收发数据;处理器630,用于读取所述存储器610中的计算机程序并执行以下操作:
接收由初始服务发出的SAGA事务开启请求,向分布式消息中间件发送创建SAGA事务事件,并向初始服务返回事务ID;
接收子服务根据所述事务ID发出的SAGA子事务开启请求,并向分布式消息中间件发送创建SAGA子事务事件;
接收子服务执行SAGA子事务后发出的SAGA事务结束请求,向分布式消息中间件发送SAGA子事务结束事件,并返回响应至初始服务;
接收由流处理***发出的根据所述创建SAGA事务事件、所述创建SAGA子事务事件、以及所述SAGA子事务结束事件得到的事件流处理结果,并根据所述事件流处理结果结束SAGA事务。
其中,在图6中,总线架构可以包括任意数量的互联的总线和桥,具体由处理器630代表的一个或多个处理器和存储器610代表的存储器的各种电路链接在一起。总线架构还可以将诸如***设备、稳压器和功率管理电路等之类的各种其他电路链接在一起,这些都是本领域所公知的,因此,本文不再对其进行进一步描述。总线接口提供接口。收发机620可以是多个元件,即包括发送机和接收机,提供用于在传输介质上与各种其他装置通信的单元。处理器630负责管理总线架构和通常的处理,存储器610可以存储处理器630在执行操作时所使用的数据。
在一种实施例中,所述接收子服务执行SAGA子事务后发出的SAGA事务结束请求,向分布式消息中间件发送SAGA子事务结束事件,具体为以下任一项:
接收子服务成功执行SAGA子事务后发出的SAGA事务结束请求,向分布式消息中间件发送SAGA子事务成功事件;
接收子服务执行SAGA子事务失败后发出的SAGA事务结束请求,向分布式消息中间件发送SAGA子事务失败事件。
在一种实施例中,所述接收由流处理***发出的根据所述创建SAGA事务事件、所述创建SAGA子事务事件、以及所述SAGA子事务结束事件得到的事件流处理结果,并根据所述事件流处理结果结束SAGA事务,具体为以下任一项:
接收由流处理***发出的根据所述创建SAGA事务事件、所述创建SAGA子事务事件、以及所述SAGA子事务结束事件得到的SAGA事务成功结果,结束SAGA事务;
接收由流处理***发出的根据所述创建SAGA事务事件、所述创建SAGA子事务事件、以及所述SAGA子事务结束事件得到的SAGA事务失败结果,根据所述SAGA事务失败结果发起事务补偿,并在接收到事务补偿结果后结束SAGA事务。
图7为根据本申请实施例提供的另一种网络设备的结构示意图,参照图7,本申请实施例提供的另一种网络设备,可以包括:存储器710,收发机720以及处理器730;
存储器710用于存储计算机程序;收发机720,用于在所述处理器730的控制下收发数据;处理器730,用于读取所述存储器710中的计算机程序并执行以下操作:
接收分布式事务服务发送的创建SAGA事务事件;
接收分布式事务服务发送的创建SAGA子事务事件;
接收分布式事务服务发送的SAGA子事务结束事件;
根据所述创建SAGA事务事件、所述创建SAGA子事务事件、以及所述SAGA子事务结束事件,得到事件流处理结果;
将所述事件流处理结果发送至分布式事务服务,并将事务数据持久化至事务数据库。
在一种实施例中,所述根据所述创建SAGA事务事件、所述创建SAGA子事务事件、以及所述SAGA子事务结束事件,得到事件流处理结果,包括:
根据所述创建SAGA事务事件、所述创建SAGA子事务事件、以及所述SAGA子事务结束事件,得到全局事务状态;
根据所述全局事务状态处理事务数据,得到事件流处理结果。
在一种实施例中,所述根据所述全局事务状态处理事务数据,包括:
若所述全局事务状态为全局事务成功状态,则将成功状态的事务数据发送至成功事务主题,以供进行数据持久化处理;
若所述全局事务状态为全局事务失败状态,则将失败状态的事务数据发送至失败事务主题,以供分布式事务服务发起事务补偿;
若所述全局事务状态为全局事务未完成状态,则将未完成状态的事务数据存储于本地存储库,以供进行数据后续处理。
在此需要说明的是,本申请实施例提供的终端以及网络设备,能够实现上述方法实施例所实现的所有方法步骤,且能够达到相同的技术效果,在此不再对本实施例中与方法实施例相同的部分及有益效果进行具体赘述。
图8示例了一种电子设备的实体结构示意图,如图8所示,该电子设备可以包括:处理器(processor)810、通信接口(Communication Interface)820、存储器(memory)830和通信总线840,其中,处理器810,通信接口820,存储器830通过通信总线840完成相互间的通信。处理器810可以调用存储器830中的计算机程序,以执行分布式事务处理方法的步骤,例如包括:
接收由初始服务发出的SAGA事务开启请求,向分布式消息中间件发送创建SAGA事务事件,并向初始服务返回事务ID;
接收子服务根据所述事务ID发出的SAGA子事务开启请求,并向分布式消息中间件发送创建SAGA子事务事件;
接收子服务执行SAGA子事务后发出的SAGA事务结束请求,向分布式消息中间件发送SAGA子事务结束事件,并返回响应至初始服务;
接收由流处理***发出的根据所述创建SAGA事务事件、所述创建SAGA子事务事件、以及所述SAGA子事务结束事件得到的事件流处理结果,并根据所述事件流处理结果结束SAGA事务。
或者可以执行另一种分布式事务处理方法的步骤,例如包括:
接收分布式事务服务发送的创建SAGA事务事件;
接收分布式事务服务发送的创建SAGA子事务事件;
接收分布式事务服务发送的SAGA子事务结束事件;
根据所述创建SAGA事务事件、所述创建SAGA子事务事件、以及所述SAGA子事务结束事件,得到事件流处理结果;
将所述事件流处理结果发送至分布式事务服务,并将事务数据持久化至事务数据库。
此外,上述的存储器830中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
另一方面,本申请实施例还提供一种计算机程序产品,所述计算机程序产品包括计算机程序,所述计算机程序可存储在非暂态计算机可读存储介质上,所述计算机程序被处理器执行时,计算机能够执行上述各实施例所提供的分布式事务处理方法的步骤,例如包括:
接收由初始服务发出的SAGA事务开启请求,向分布式消息中间件发送创建SAGA事务事件,并向初始服务返回事务ID;
接收子服务根据所述事务ID发出的SAGA子事务开启请求,并向分布式消息中间件发送创建SAGA子事务事件;
接收子服务执行SAGA子事务后发出的SAGA事务结束请求,向分布式消息中间件发送SAGA子事务结束事件,并返回响应至初始服务;
接收由流处理***发出的根据所述创建SAGA事务事件、所述创建SAGA子事务事件、以及所述SAGA子事务结束事件得到的事件流处理结果,并根据所述事件流处理结果结束SAGA事务。
或者可以执行另一种分布式事务处理方法的步骤,例如包括:
接收分布式事务服务发送的创建SAGA事务事件;
接收分布式事务服务发送的创建SAGA子事务事件;
接收分布式事务服务发送的SAGA子事务结束事件;
根据所述创建SAGA事务事件、所述创建SAGA子事务事件、以及所述SAGA子事务结束事件,得到事件流处理结果;
将所述事件流处理结果发送至分布式事务服务,并将事务数据持久化至事务数据库。
另一方面,本申请实施例还提供一种处理器可读存储介质,所述处理器可读存储介质存储有计算机程序,所述计算机程序用于使处理器执行上述各实施例所提供的分布式事务处理方法的步骤,例如包括:
接收由初始服务发出的SAGA事务开启请求,向分布式消息中间件发送创建SAGA事务事件,并向初始服务返回事务ID;
接收子服务根据所述事务ID发出的SAGA子事务开启请求,并向分布式消息中间件发送创建SAGA子事务事件;
接收子服务执行SAGA子事务后发出的SAGA事务结束请求,向分布式消息中间件发送SAGA子事务结束事件,并返回响应至初始服务;
接收由流处理***发出的根据所述创建SAGA事务事件、所述创建SAGA子事务事件、以及所述SAGA子事务结束事件得到的事件流处理结果,并根据所述事件流处理结果结束SAGA事务。
或者可以执行另一种分布式事务处理方法的步骤,例如包括:
接收分布式事务服务发送的创建SAGA事务事件;
接收分布式事务服务发送的创建SAGA子事务事件;
接收分布式事务服务发送的SAGA子事务结束事件;
根据所述创建SAGA事务事件、所述创建SAGA子事务事件、以及所述SAGA子事务结束事件,得到事件流处理结果;
将所述事件流处理结果发送至分布式事务服务,并将事务数据持久化至事务数据库。
所述处理器可读存储介质可以是处理器能够存取的任何可用介质或数据存储设备,包括但不限于磁性存储器(例如软盘、硬盘、磁带、磁光盘(MO)等)、光学存储器(例如CD、DVD、BD、HVD等)、以及半导体存储器(例如ROM、EPROM、EEPROM、非易失性存储器(NANDFLASH)、固态硬盘(SSD))等。
以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
最后应说明的是:以上实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围。

Claims (10)

1.一种分布式事务处理方法,其特征在于,包括:
接收由初始服务发出的SAGA事务开启请求,向分布式消息中间件发送创建SAGA事务事件,并向初始服务返回事务ID;
接收子服务根据所述事务ID发出的SAGA子事务开启请求,并向分布式消息中间件发送创建SAGA子事务事件;
接收子服务执行SAGA子事务后发出的SAGA事务结束请求,向分布式消息中间件发送SAGA子事务结束事件,并返回响应至初始服务;
接收由流处理***发出的根据所述创建SAGA事务事件、所述创建SAGA子事务事件、以及所述SAGA子事务结束事件得到的事件流处理结果,并根据所述事件流处理结果结束SAGA事务。
2.根据权利要求1所述的分布式事务处理方法,其特征在于,所述接收子服务执行SAGA子事务后发出的SAGA事务结束请求,向分布式消息中间件发送SAGA子事务结束事件,具体为以下任一项:
接收子服务成功执行SAGA子事务后发出的SAGA事务结束请求,向分布式消息中间件发送SAGA子事务成功事件;
接收子服务执行SAGA子事务失败后发出的SAGA事务结束请求,向分布式消息中间件发送SAGA子事务失败事件。
3.根据权利要求2所述的分布式事务处理方法,其特征在于,所述接收由流处理***发出的根据所述创建SAGA事务事件、所述创建SAGA子事务事件、以及所述SAGA子事务结束事件得到的事件流处理结果,并根据所述事件流处理结果结束SAGA事务,具体为以下任一项:
接收由流处理***发出的根据所述创建SAGA事务事件、所述创建SAGA子事务事件、以及所述SAGA子事务结束事件得到的SAGA事务成功结果,结束SAGA事务;
接收由流处理***发出的根据所述创建SAGA事务事件、所述创建SAGA子事务事件、以及所述SAGA子事务结束事件得到的SAGA事务失败结果,根据所述SAGA事务失败结果发起事务补偿,并在接收到事务补偿结果后结束SAGA事务。
4.一种分布式事务处理方法,其特征在于,包括:
接收分布式事务服务发送的创建SAGA事务事件;
接收分布式事务服务发送的创建SAGA子事务事件;
接收分布式事务服务发送的SAGA子事务结束事件;
根据所述创建SAGA事务事件、所述创建SAGA子事务事件、以及所述SAGA子事务结束事件,得到事件流处理结果;
将所述事件流处理结果发送至分布式事务服务,并将事务数据持久化至事务数据库。
5.根据权利要求4所述的分布式事务处理方法,其特征在于,所述根据所述创建SAGA事务事件、所述创建SAGA子事务事件、以及所述SAGA子事务结束事件,得到事件流处理结果,包括:
根据所述创建SAGA事务事件、所述创建SAGA子事务事件、以及所述SAGA子事务结束事件,得到全局事务状态;
根据所述全局事务状态处理事务数据,得到事件流处理结果。
6.根据权利要求5所述的分布式事务处理方法,其特征在于,所述根据所述全局事务状态处理事务数据,包括:
若所述全局事务状态为全局事务成功状态,则将成功状态的事务数据发送至成功事务主题,以供进行数据持久化处理;
若所述全局事务状态为全局事务失败状态,则将失败状态的事务数据发送至失败事务主题,以供分布式事务服务发起事务补偿;
若所述全局事务状态为全局事务未完成状态,则将未完成状态的事务数据存储于本地存储库,以供进行数据后续处理。
7.一种分布式事务处理***,其特征在于,包括:初始服务、子服务、分布式事务服务、以及分布式消息及流处理组件,
所述初始服务分别与所述子服务以及所述分布式事务服务连接,所述子服务与所述分布式事务服务连接,所述分布式事务服务与所述分布式消息及流处理组件连接,所述分布式消息及流处理组件包括分布式消息中间件和流处理程序,所述分布式消息中间件和所述流处理程序之间呈绑定关系,
所述分布式事务服务用于执行权利要求1-3任一项所述的分布式事务处理方法,以及所述分布式消息及流处理组件用于执行权利要求4-6任一项所述的分布式事务处理方法。
8.一种网络设备,其特征在于,包括存储器,收发机,处理器;
存储器,用于存储计算机程序;收发机,用于在所述处理器的控制下收发数据;处理器,用于读取所述存储器中的计算机程序并执行以下操作:
接收由初始服务发出的SAGA事务开启请求,向分布式消息中间件发送创建SAGA事务事件,并向初始服务返回事务ID;
接收子服务根据所述事务ID发出的SAGA子事务开启请求,并向分布式消息中间件发送创建SAGA子事务事件;
接收子服务执行SAGA子事务后发出的SAGA事务结束请求,向分布式消息中间件发送SAGA子事务结束事件,并返回响应至初始服务;
接收由流处理***发出的根据所述创建SAGA事务事件、所述创建SAGA子事务事件、以及所述SAGA子事务结束事件得到的事件流处理结果,并根据所述事件流处理结果结束SAGA事务。
9.一种网络设备,其特征在于,包括存储器,收发机,处理器;
存储器,用于存储计算机程序;收发机,用于在所述处理器的控制下收发数据;处理器,用于读取所述存储器中的计算机程序并执行以下操作:
接收分布式事务服务发送的创建SAGA事务事件;
接收分布式事务服务发送的创建SAGA子事务事件;
接收分布式事务服务发送的SAGA子事务结束事件;
根据所述创建SAGA事务事件、所述创建SAGA子事务事件、以及所述SAGA子事务结束事件,得到事件流处理结果;
将所述事件流处理结果发送至分布式事务服务,并将事务数据持久化至事务数据库。
10.一种电子设备,包括处理器和存储有计算机程序的存储器,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至6任一项所述的分布式事务处理方法。
CN202210237149.6A 2022-03-11 2022-03-11 分布式事务处理方法及*** Pending CN116775227A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202210237149.6A CN116775227A (zh) 2022-03-11 2022-03-11 分布式事务处理方法及***

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202210237149.6A CN116775227A (zh) 2022-03-11 2022-03-11 分布式事务处理方法及***

Publications (1)

Publication Number Publication Date
CN116775227A true CN116775227A (zh) 2023-09-19

Family

ID=87993596

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202210237149.6A Pending CN116775227A (zh) 2022-03-11 2022-03-11 分布式事务处理方法及***

Country Status (1)

Country Link
CN (1) CN116775227A (zh)

Similar Documents

Publication Publication Date Title
CN111666162B (zh) 分布式消息传输方法、装置、计算机设备及存储介质
CN106844014B (zh) 分布式事务防悬挂的实现方法和装置
US8650272B2 (en) Distributed transaction processing system having resource managers that collaborate to decide whether to commit or abort a transaction in response to failure of a transaction manager
CN112995262B (zh) 分布式事务提交方法、***及计算设备
US9055065B2 (en) Managing participant order in distributed transactions
CN111045794A (zh) 分布式事务处理方法、装置、***、计算机设备及存储介质
CN111277639A (zh) 一种保持数据一致性的方法和装置
CN110888718A (zh) 分布式事务的实现方法及装置
EP0834122B1 (en) Synchronisation procedure in a routing node
CN111984388A (zh) 云环境分布式事务下数据一致性的协调方法及装置、介质
CN112596801B (zh) 事务处理方法、装置、设备、存储介质、数据库
CN103064898A (zh) 事务加锁、解锁方法及装置
CN112822091A (zh) 一种消息处理方法和装置
CN111625323A (zh) 分布式任务处理方法、装置、设备及计算机可读存储介质
CN111143041B (zh) 一种数据一致性方法、分布式协调器及中央协调器
CN116775227A (zh) 分布式事务处理方法及***
CN116302368A (zh) 一种分布式事务处理方法、装置、设备及存储介质
CN114039981B (zh) 一种消息处理方法、装置、服务器及存储介质
CN116775325A (zh) 分布式事务处理方法及***
CN115208834A (zh) 一种基于数据库存储过程设计的服务流量限制方法
CN115248827A (zh) 分布式事务提交方法及装置
CN117608771A (zh) 一种分布式事务的处理方法、***、设备及可读存储介质
CN117453750B (zh) 数据处理方法、装置、电子设备及存储介质
CN117573396B (zh) 一种分布式工作流事件处理方法、设备及介质
CN116643733B (zh) 业务处理***和方法

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination