CN110502319B - 分布式事务的处理方法、装置、电子设备及存储介质 - Google Patents
分布式事务的处理方法、装置、电子设备及存储介质 Download PDFInfo
- Publication number
- CN110502319B CN110502319B CN201910786076.4A CN201910786076A CN110502319B CN 110502319 B CN110502319 B CN 110502319B CN 201910786076 A CN201910786076 A CN 201910786076A CN 110502319 B CN110502319 B CN 110502319B
- Authority
- CN
- China
- Prior art keywords
- node
- snapshot
- target participant
- service
- participant node
- 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.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/14—Error detection or correction of the data by redundancy in operation
- G06F11/1402—Saving, restoring, recovering or retrying
- G06F11/1471—Saving, restoring, recovering or retrying involving logging of persistent data for recovery
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/466—Transaction processing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06Q—INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
- G06Q10/00—Administration; Management
- G06Q10/08—Logistics, e.g. warehousing, loading or distribution; Inventory or stock management
- G06Q10/087—Inventory or stock management, e.g. order filling, procurement or balancing against orders
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06Q—INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
- G06Q30/00—Commerce
- G06Q30/06—Buying, selling or leasing transactions
- G06Q30/0601—Electronic shopping [e-shopping]
- G06Q30/0633—Lists, e.g. purchase orders, compilation or processing
- G06Q30/0635—Processing of requisition or of purchase orders
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Business, Economics & Management (AREA)
- General Physics & Mathematics (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Accounting & Taxation (AREA)
- Finance (AREA)
- Economics (AREA)
- Marketing (AREA)
- Quality & Reliability (AREA)
- Strategic Management (AREA)
- Software Systems (AREA)
- Development Economics (AREA)
- General Business, Economics & Management (AREA)
- Databases & Information Systems (AREA)
- Entrepreneurship & Innovation (AREA)
- Computing Systems (AREA)
- Human Resources & Organizations (AREA)
- Data Mining & Analysis (AREA)
- Operations Research (AREA)
- Tourism & Hospitality (AREA)
- Hardware Redundancy (AREA)
Abstract
本申请提供了一种分布式事务的处理方法、装置、电子设备及存储介质,涉及计算机领域。该方法包括:获取请求方设备发送的业务操作请求,业务操作请求中携带有业务操作的操作标识;根据操作标识,从所有参与者节点中确定用于执行业务操作的至少两个目标参与者节点;获取每个目标参与者节点的快照并保存,快照是目标参与者节点中与业务操作对应的业务数据的快照;调用各目标参与者节点分别执行对应的业务操作的子操作并获取各目标参与者节点的执行结果;若各目标参与者节点中存在一个节点的执行结果为执行失败,则向各目标参与者节点分别发送各节点所对应的快照,以使各目标参与者节点根据快照将对应的业务数据恢复至执行对应的子操作之前的状态。
Description
技术领域
本申请涉及计算机技术领域,具体而言,本申请涉及一种分布式事务的处理方法、装置、电子设备及存储介质。
背景技术
在分布式部署以及微服务化大行其道的今天,分布式事务广泛的存在于各种互联网系统中。分布式事务的执行过程一般包括协调者和参与者节点,协调者可以向参与者节点发送命令,以便控制参与者节点执行分布式事务的操作。当前业界的分布式事务处理方案中,主要有两阶段提交协议(Two-Phase Commit protocol,2PC)和尝试确认取消(Try-Confirm-Cancel,TCC)两种方案。
对于2PC方案,其需要每个参与者节点在收到询问时后,保存执行事务操作所需要的Undo日志(用于记录被修改前的数据)和Redo日志(用于记录修改后的数据),在需要进行回滚时,参与者节点需要利用Undo日志进行回滚。可见,该方案的实现依赖于参与者节点提供的事务回滚能力,而具备此能力的大多是一些关系型数据库,比如Oracle、MySql等,对于不具备此特性的服务的数据库,则不太适用。对于TCC方案,其要求参与者节点的每一个事务操作,都必须存在对应的回滚操作,会带来很大的开发工作量,且对业务代码有较大的入侵。
可见,当前业界的分布式事务处理方案,部分依赖于数据库提供的事务处理能力,部分对业务代码有着较大的侵入,目前还没有一个既通用又不会对业务代码有较大侵入的方案。
发明内容
为了解决现有技术中所存在的问题中的至少一个,本申请实施例提供了一种分布式事务的处理方法、装置、电子设备及存储介质。本申请实施例所提供的技术方案如下:
本申请实施例的第一方面,提供了一种分布式事务处理方法,该方法应用于分布式系统中,分布式系统包括一个协调者节点和至少两个参与者节点,协调者节点与每个参与者节点通信连接,该方法包括:
获取请求方设备发送的业务操作请求,业务操作请求中携带有业务操作的操作标识;
根据操作标识,从所有参与者节点中确定用于执行业务操作的至少两个目标参与者节点;
获取每个目标参与者节点的快照并保存,其中,快照是目标参与者节点中与业务操作对应的业务数据的快照;
调用各目标参与者节点分别执行对应的业务操作的子操作,并获取各目标参与者节点的执行结果;
若各目标参与者节点中存在一个节点的执行结果为执行失败,则向各目标参与者节点分别发送各节点所对应的快照,以使各目标参与者节点根据快照将对应的业务数据恢复至执行对应的子操作之前的状态。
第一方面的一种可选实施例方式中,调用各目标参与者节点分别执行对应的业务操作的子操作,包括:
若获取到每个目标参与者节点的快照,则调用各目标参与者节点分别执行对应的子操作;
该方法还包括:
若各目标参与者节点中存在一个节点的快照未获取到,则向请求方设备返回操作失败提示信息。
第一方面的一种可选实施例方式中,向各目标参与者节点分别发送各节点所对应的快照,以使各目标参与者节点根据快照将对应的业务数据恢复至执行对应的子操作之前的状态,包括:
根据各目标参与者节点的执行结果,向各目标参与节点中执行结果为成功的目标参与节点发送对应的快照,以使执行结果为成功的各目标参与节点根据快照将对应的业务数据恢复至执行对应的子操作之前的状态。
第一方面的一种可选实施例方式中,若目标参与者节点对应的业务操作的子操作为至少两个,目标参与者节点中与业务操作对应的业务数据,为目标参与者节点中与所有子操作对应的业务数据;
目标参与者节点根据快照将对应的业务数据恢复至执行对应的子操作之前的状态,是指目标参与者节点根据快照将该节点中与所有子操作对应的业务数据一次性恢复至所有子操作之前的状态。
第一方面的一种可选实施例方式中,若业务操作请求包括至少两个,且至少两个业务操作请求中不同的业务操作请求对应的目标参与者节点中包括相同的节点,则同时对应于不同的业务操作请求的目标参与者节点的快照,包括节点中对应于不同的业务操作请求的业务数据的快照;
若执行结果为执行失败的业务操作请求为同时对应于不同的业务操作请求的目标参与者节点所对应的操作请求,则向各目标参与者节点分别发送各节点所对应的快照,包括:
向同时对应于不同的业务操作请求的目标参与者节点,发送目标参与者节点的执行结果为执行失败的业务操作请求对应的快照。
第一方面的一种可选实施例方式中,根据操作标识,从所有参与者节点中确定用于执行业务操作的至少两个目标参与者节点,包括:
根据操作标识和预配置的服务映射关系,确定用于执行业务操作的至少两个目标参与者节点;
其中,服务映射关系为各操作标识与用于执行各操作标识所对应的业务操作的各参与者节点的节点相关信息的对应关系。
第一方面的一种可选实施例方式中,节点相关信息包括参与者节点的业务操作接口调用地址、快照生成接口调用地址、以及回滚接口调用地址。
第一方面的一种可选实施例方式中,若目标参与者节点对应的业务操作的子操作为至少两个,快照生成接口调用地址和回滚接口调用地址满足以下至少一项:
所有子操作对应的快照生成接口调用地址为同一个;
所有子操作对应的回滚接口调用地址为同一个。
第一方面的一种可选实施例方式中,若业务操作请求包括至少两个,且至少两个业务操作请求中不同的业务操作请求对应的目标参与者节点中包括相同的节点,则同时对应于不同的业务操作请求的目标参与者节点的快照生成接口调用地址和回滚接口调用地址满足以下至少一项:
目标参与者节点对应于不同的业务操作请求的快照生成接口调用地址为同一个;
目标参与者节点对应于不同的业务操作请求的回滚接口调用地址为同一个。
第一方面的一种可选实施例方式中,调用各目标参与者节点分别执行对应的业务操作的子操作,包括:
通过调用各目标参与者节点的业务操作接口调用地址所对应的业务操作接口,向各目标参与者节点发送对应的子操作的业务操作指令,以使各目标参与节点基于业务操作指令执行相应的子操作;
上述获取每个目标参与者节点的快照,包括:
对于各目标参与者节点,通过调用各目标参与者节点的快照生成接口调用地址所对应的接口,向各目标参与者节点发送快照生成指令,并接收各目标参与者节点根据快照生成指令返回的快照;
该方法还包括:
通过调用各目标参与者节点的回滚接口调用地址所对应的回滚接口,向各目标参与者节点发送回滚指令,以使各目标参与者节点根据回滚指令和快照将对应的业务数据恢复至执行对应的子操作之前的状态。
第一方面的一种可选实施例方式中,分布式系统中的参与者节点包括区块链节点。
本申请实施例的第二方面,提供了一种分布式事务处理方法,该方法应用于分布式系统中,分布式系统包括一个协调者节点和至少两个参与者节点,协调者节点与每个参与者节点通信连接;该方法包括:
当接收到协调者节点发送的快照生成指令时,根据快照生成指令生成对应的快照,并向协调者节点发送快照,其中,快照是目标参与者节点中与业务操作请求对应的业务数据的快照,目标参与者节点为协调者节点在获取请求方设备发送的业务操作请求时,根据业务操作请求中携带的业务操作的操作标识确定的;
当接收到协调者节点发送的业务操作指令时,根据业务操作指令执行对应的业务操作,并将执行结果发送给协调者节点;
在接收协调者节点发送的快照时,根据快照将对应的业务数据恢复至执行对应的业务操作之前的状态,其中,快照为协调者节点在接收到的执行结果中存在一个目标参与者节点的执行结果为执行失败时发送的。
第二方面的一种可选实施例方式中,若根据快照生成指令生成对应的快照失败,该方法还包括:
向协调者节点发送快照生成失败提示信息,以使协调者节点在接收到提示信息时,向请求方设备返回操作失败提示信息。
本申请的第三方面提供了一种分布式事务处理装置,该装置应用于分布式系统中,分布式系统中包括一个协调者节点和至少两个参与者节点,该装置包括:
收发模块,用于获取请求方设备发送的业务操作请求,业务操作请求中携带有业务操作的操作标识;
目标节点确定模块,用于根据操作标识,从所有参与者节点中确定用于执行业务操作的至少两个目标参与者节点;
收发模块,还用于获取每个目标参与者节点的快照并保存,其中,快照是目标参与者节点中与业务操作请求对应的业务数据的快照;
目标节点调用模块,用于调用各目标参与者节点分别执行对应的业务操作的子操作,并获取各目标参与者节点的执行结果;
收发模块,还用于在各目标参与者节点中存在一个节点的执行结果为执行失败,则向各目标参与者节点分别发送各节点所对应的快照,以使各目标参与者节点根据快照将对应的业务数据恢复至执行对应的子操作之前的状态。
在第三方面的一种可选实施例方式中,目标节点调用模块在调用各目标参与者节点分别执行对应的业务操作的子操作时,具体用于:
若获取到每个目标参与者节点的快照,则调用各目标参与者节点分别执行对应的子操作;
收发模块,还用于:
若各目标参与者节点中存在一个节点的快照未获取到,则向请求方设备返回操作失败提示信息。
在第三方面的一种可选实施例方式中,收发模块在向各目标参与者节点分别发送各节点所对应的快照,以使各目标参与者节点根据快照将对应的业务数据恢复至执行对应的子操作之前的状态时,具体用于:
根据各目标参与者节点的执行结果,向各目标参与节点中执行结果为成功的目标参与节点发送对应的快照,以使执行结果为成功的各目标参与节点根据快照将对应的业务数据恢复至执行对应的子操作之前的状态。
在第三方面的一种可选实施例方式中,若目标参与者节点对应的业务操作的子操作为至少两个,目标参与者节点中与业务操作对应的业务数据,为目标参与者节点中与所有子操作对应的业务数据;
目标参与者节点根据快照将对应的业务数据恢复至执行对应的子操作之前的状态,是指目标参与者节点根据快照将该节点中与所有子操作对应的业务数据一次性恢复至所有子操作之前的状态。
在第三方面的一种可选实施例方式中,若业务操作请求包括至少两个,且至少两个业务操作请求中不同的业务操作请求对应的目标参与者节点中包括相同的节点,则同时对应于不同的业务操作请求的目标参与者节点的快照,包括节点中对应于不同的业务操作请求的业务数据的快照;
若执行结果为执行失败的业务操作请求为同时对应于不同的业务操作请求的目标参与者节点所对应的操作请求,则收发模块在向各目标参与者节点分别发送各节点所对应的快照,具体用于:
向同时对应于不同的业务操作请求的目标参与者节点,发送目标参与者节点的执行结果为执行失败的业务操作请求对应的快照。
在第三方面的一种可选实施例方式中,目标节点确定模块在根据操作标识,确定用于执行业务操作的至少两个目标参与者节点时,具体用于:
根据操作标识和预配置的服务映射关系,确定用于执行业务操作的至少两个目标参与者节点;
其中,服务映射关系为各操作标识与用于执行各操作标识所对应的业务操作的各参与者节点的节点相关信息的对应关系。
在第三方面的一种可选实施例方式中,节点相关信息包括参与者节点的业务操作接口调用地址、快照生成接口调用地址、以及回滚接口调用地址。
在第三方面的一种可选实施例方式中,若目标参与者节点对应的业务操作的子操作为至少两个,快照生成接口调用地址和回滚接口调用地址满足以下至少一项:
所有子操作对应的快照生成接口调用地址为同一个;
所有子操作对应的回滚接口调用地址为同一个。
在第三方面的一种可选实施例方式中,若业务操作请求包括至少两个,且至少两个业务操作请求中不同的业务操作请求对应的目标参与者节点中包括相同的节点,则同时对应于不同的业务操作请求的目标参与者节点的快照生成接口调用地址和回滚接口调用地址满足以下至少一项:
目标参与者节点对应于不同的业务操作请求的快照生成接口调用地址为同一个;
目标参与者节点对应于不同的业务操作请求的回滚接口调用地址为同一个。
在第三方面的一种可选实施例方式中,目标节点调用模块调用各目标参与者节点分别执行对应的业务操作的子操作时,具体用于:
通过调用各目标参与者节点的业务操作接口调用地址所对应的业务操作接口,向各目标参与者节点发送对应的子操作的业务操作指令,以使各目标参与节点基于业务操作指令执行相应的子操作;
收发模块在获取每个目标参与者节点的快照时,具体用于:
对于各目标参与者节点,通过调用各目标参与者节点的快照生成接口调用地址所对应的接口,向各目标参与者节点发送快照生成指令,并接收各目标参与者节点根据快照生成指令返回的快照;
收发模块,还用于:
通过调用各目标参与者节点的回滚接口调用地址所对应的回滚接口,向各目标参与者节点发送回滚指令,以使各目标参与者节点根据回滚指令和快照将对应的业务数据恢复至执行对应的子操作之前的状态。
第三方面的一种可选实施例方式中,分布式系统中的参与者节点包括区块链节点。
本申请第四方面提供了一种分布式事务处理装置,该装置应用于分布式系统中,分布式系统包括一个协调者节点和至少两个参与者节点;该装置包括:
快照生成模块,用于在接收到协调者节点发送的快照生成指令时,根据快照生成指令生成对应的快照,并向协调者节点发送快照,其中,快照是目标参与者节点中与业务操作请求对应的业务数据的快照,该目标参与者节点为协调者节点在获取请求方设备发送的业务操作请求时,根据业务操作请求中携带的业务操作的操作标识确定的;
业务操作执行模块,用于当接收到协调者节点发送的业务操作指令时,根据业务操作指令执行对应的业务操作,并将执行结果发送给协调者节点;
业务操作恢复模块,用于在接收协调者节点发送的快照时,根据快照将对应的业务数据恢复至执行对应的业务操作之前的状态,其中,快照为协调者节点在接收到的执行结果中存在一个目标参与者节点的执行结果为执行失败时发送的。
在第四方面的一种可选实施例方式中,该装置还包括收发模块,若根据快照生成指令生成对应的快照失败,收发模块,还用于:
向协调者节点发送快照生成失败提示信息,以使协调者节点在接收到提示信息时,向请求方设备返回操作失败提示信息。
本申请实施例的第五方面,提供了一种电子设备,该电子设备包括存储器和处理器;存储器中存储有计算机程序;处理器用于在运行计算机程序时执行第一方面及其可选的实施方式、以及第二方面及其可选的实施方式中任一项所示的方法。
本申请实施例的第六方面,提供了一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该程序被处理器执行时实现第一方面及其可选的实现方式以及第二方面及其可选的实现方式中任一项所示的方法。
本申请实施例所提供的方案具有以下有益效果:
本申请实施例所提供的方案,协调者节点在控制各目标参与者节点对应的业务操作之前,会事先获取到各目标参与者节点的快照并保存,从而在各目标参与者节点中存在一个节点的执行结果为执行失败,使各目标参与者节点可以根据各自对应的快照分别回滚对应的业务操作,保证了分布式事务的ACID特性。本申请实施例的该方案,通过对分布式事务的每个目标参与者节点的所有子操作生成相关联的快照,即将一个目标参与者节点到的一个或多个子操作绑定一个对应的快照上,当参与者节点的事务操作执行失败时即可以利用快照执行一次回滚操作,完成业务数据的恢复,本申请实施例的方案,能够使目标参与者节点的事务回滚操作的实现既不依赖于数据库提供的事务能力,又使得即使在目标参与者节点需要完成多个子操作时,也能够基于快照执行一次回滚就完成所有子操作对应的数据的恢复,可以极大的减少对业务代码的侵入,更好的满足了实际应用需求。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对本申请实施例描述中所需要使用的附图作简单地介绍。
图1为本申请实施例提供的一种分布式事务处理方法的流程示意图;
图2为本申请实施例提供的银行转账过程的示意图;
图3为本申请实施例提供的账户冻结过程的示意图;
图4为本申请实施例提供的一种分布式事务处理方法的流程示意图;
图5为本申请实施例提供的用户网购过程的示意图;
图6为本申请一示例中的分布式系统的基本架构示意图;
图7为本申请一示例中的服务映射关系的示意图;
图8为本申请示例中提供的一种分布式事务处理方法的流程示意图;
图9为本申请实施例提供的分布式事务处理装置的一种结构示意图;
图10为本申请实施例提供的分布式事务处理装置的另一种结构示意图;
图11为本申请实施例提供的一种电子设备的结构示意图。
具体实施方式
下面详细描述本申请的实施例,实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,仅用于解释本申请,而不能解释为对本发明的限制。
本技术领域技术人员可以理解,除非特意声明,这里使用的单数形式“一”、“一个”、“其”和“该”也可包括复数形式。应该进一步理解的是,本申请的说明书中使用的措辞“包括”是指存在特征、步骤、操作、元件和/或组件,但是并不排除存在或添加一个或多个其他特征、步骤、操作、元件、组件和/或它们的组。应该理解,当我们称元件被“连接”或“耦接”到另一元件时,它可以直接连接或耦接到其他元件,或者也可以存在中间元件。此外,这里使用的“连接”或“耦接”可以包括无线连接或无线耦接。这里使用的措辞“和/或”包括一个或更多个相关联的列出项的全部或任一单元和全部组合。
首先对本申请实施例中所涉及的几个名词进行介绍和解释:
事务:由一系列对系统数据的访问和更新操作组合的一个可执行单元,具有原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Duration)等四个特性,这四个特性可简写为ACID。原子性指的是组成事务的操作要么全部成功,要么全部失败,不可以有中间状态;一致性指的是事务的执行不能破坏数据库的完整和一致性,事务执行前后分布式系统各个组成部分状态必须是完整一致的;隔离性指的是在并发执行事务的场景下,各个事务必须是独立执行互不干扰的;持久性指的是事务操作一旦成功之后,执行结果必须被永久保存下来。
分布式事务:组成事务的各个操作在分布式系统的不同节点上执行,即实际执行事务的操作可能发生在不同的设备(如服务器/服务器集群等)上,也可能发生在同一个设备的不同应用内,也就是说,执行事务的各个操作的参与者节点,可以为不同的设备,也可以为同一设备的不同应用所对应的计算处理单元。在分布式系统中会涉及到事务协调者(本申请实施例中的协调者节点)和事务参与者节点(本申请实施例中的参与者节点),分布式事务由协调者和参与者节点共同参与完成。
参与者节点:用于处理分布式事务的节点。
协调者节点:用于协调管理多个事务参与者节点处理分布式事务。
下面以具体地实施例并结合附图对本申请的技术方案进行详细说明。下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例中不再赘述。
图1示出了本申请实施例提供了一种分布式事务的处理方法的流程示意图,该方法应用于分布式系统中,分布式系统包括一个协调者节点和至少两个参与者节点,协调者节点与各参与者节点通信连接。图1所示的分布式事务处理方法由协调者节点执行,该方法具体可以包括:
步骤S101:获取请求方设备发送的业务操作请求,业务操作请求中携带有业务操作的操作标识;
步骤S102:根据操作标识,从所有参与者节点中确定用于执行业务操作的至少两个目标参与者节点;
其中,请求方设备即发起业务操作请求的设备,即分布式事务(业务操作请求)的发起者,也就是客户端,该客户端的实际操作者可以是普通用户,也可以是分布式系统的管理者等。在实际应用中,对于协调者而言,业务操作请求的个数可以是一个或一个以上,业务操作请求所请求处理的业务是一种分布式事务(或称为分布式任务)。
业务操作请求中携带有业务操作的操作标识,业务操作的操作标识能唯一指示该业务操作所对应的业务为何种业务,例如该业务是购买商品业务,还是转账业务,或者是其他业务等等。业务操作的操作标识的具体形式可以根据实际需求配置,如操作标识具体可以是操作的名称。
在实际应用中,在分布式系统上线即投入使用之前,系统的管理人员或者技术人员可以根据系统的实际业务需求,配置各业务操作请求与需要共同参与执行业务操作请求的各参与者节点的映射关系,并将该映射关系存储至协调者节点中,具体的配置过程后面将进行说明,对于每一个业务操作请求,协调者节点在接收到该业务操作请求时,即可以基于该映射关系确定出用于执行该请求的参与者节点即目标参与者节点。当然,作为一可选方式,上述映射关系也可以存储至其他设备中,协调者节点通过与该其他设备通信来根据操作标识确定目标参与者节点,如将操作标识发送给其他设备,接收其他设备返回的目标参与者节点的相关信息,或者根据与其他设备通信获取该映射关系,再根据该映射关系确定目标参与者节点的相关信息。可以理解的是,当存在两个或两个以上业务操作请求时,不同业务操作请求所确定出的目标参与者节点可能完全相同,也可以完全不同,也可能部分相同,这是由实际的业务配置决定的。
其中,目标参与者节点,即需要协同完成该某一业务操作请求所对应的业务操作的参与者节点。每个目标参与者节点可以执行该业务操作中的部分业务操作(后文中的子操作),可以理解的是,每个目标参与者节点具体执行业务操作的哪部分子操作是根据实际的业务需求已经配置好的,协调者节点在获取到业务操作请求后,即可以根据请求中的操作标识确定出目标参与者节点,以及各目标参与者节点需要执行的子操作。
步骤S103:获取每个目标参与者节点的快照并保存,其中,快照是目标参与者节点中与业务操作对应的业务数据的快照;
协调者节点可以通过向各目标参与者节点分别发送快照生成指令,来获取各目标参与者节点的快照并保存,如可以保存在协调者节点的快照缓存空间(即用于存储快照的缓存空间)中。
可以理解的是,对于一个业务操作,快照生成指令具体是目标参与者节点需要执行的业务操作所涉及到的业务数据的快照生成指令。目标参与者节点根据快照生成指令生成目标参与者节点的快照,该快照具体为该目标参与者节点(例如服务器)存储的数据中与目标参与者节点所要执行的业务操作的子操作对应的业务数据的快照,可以理解的是,如果目标参与者节点只需要执行一个业务操作的子操作,则生成该业务操作的子操作对应的业务数据的快照,如果目标参与者节点需要执行至少两个业务操作,针对每个业务操作,目标参与者节点分别生成对应的快照,例如目标参与者节点需要执行业务操作A和业务操作B,针对业务操作A生成参与者节点的快照中包括业务操作A对应的业务数据的快照,针对业务操作B生成参与者节点的快照中包括业务操作B对应的业务数据的快照。
目标参与者节点在接收到协调者节点发送的快照生成指令后,即可生成对应的快照并返回给协调者节点。
作为一个示例,如图2中所示,为本申请处理转账业务的场景,假设分布式系统为一个银行系统,该银行系统在每个省都有独立的账号服务,假设账户A和账户B位于不同的省份,即位于不同的账户服务器中,当需要从账户A向账户B转账时,就是一个典型的分布式事务场景,该转账业务要求账户A和账户B的余额变动同时成功。具体的,本示例中的协调者节点(图中所示的协调者)为用于协调管理各省账户服务器的节点,各省的账户服务器即为本示例中的参与者节点,账户A和账户B所位于的账户服务器即此次转账业务的目标参与者节点。协调者节点在接收到该转账操作请求时,该转账操作请求中具体携带有操作标识,此时,协调者节点即可根据该标识以及配置的映射关系,确定出执行该操作的参与者节点为账户A所对应的参与者节点a和账户B所对应的参与者节点b,则协调者节点可以向节点a和节点b发送与该转账操作对应的快照生成指令,节点a和节点b接收到快照生成指令后,节点a生成账户A的余额数据快照,节点b生成账户B的余额数据快照,节点a和节点b在完成快照生成后,将快照发送给协调者节点。以便于后续在转账业务失败时,节点a和/或节点b能够根据该快照进行对应的账户余额的恢复操作。
步骤S104:调用各目标参与者节点分别执行对应的业务操作的子操作,并获取各目标参与者节点的执行结果;
步骤S105:若各目标参与者节点中存在一个节点的执行结果为执行失败,则向各目标参与者节点分别发送各节点所对应的快照,以使各目标参与者节点根据快照将对应的业务数据恢复至执行对应的子操作之前的状态。
协调者节点调用各目标参与者节点分别执行上述至少一个业务操作中对应的子操作,各目标参与者节点在执行完、或执行失败、或无法执行对应的子操作时,都需要将执行结果发送给协调者节点,协调者节点获取到各目标参与者节点的执行结果后,即可以知晓各目标参与者节点是否执行成功,若协调者节点发现各目标参与者节点中有一个或者多个目标参与者节点的执行结果为执行失败,则说明存在业务操作请求执行失败,此时,对于执行失败的业务操作请求,协调者节点向该业务操作请求对应的全部目标参与者节点或部分目标参与者节点发送在步骤S103中获取到的各节点各自与执行失败的业务操作请求对应的快照。
由于快照中包括业务操作执行前,目标参与者节点中与目标参与者节点所要执行的子操作对应的业务数据的快照,对于收到快照的目标参与者节点而言,目标参与者节点可以根据对应的快照,对目标参与者节点所执行的业务操作的子操作进行回滚,即目标参与者节点将其业务数据恢复至执行对应的子操作前的状态。
在本实施例中,对目标参与者节点所执行的业务操作的子操作进行回滚,具体指的是:
如上述本申请中分布式事务的个数可以为至少一个,业务操作请求的个数也可以是至少一个。如果目标参与者节点只需要执行一个业务操作的子操作,则一个目标参与者节点对应的业务操作中子操作的个数可以是至少一个,即一个目标参与者节点可以执行一个或一个以上的子操作,一个目标参与者节点的快照就可以回滚一个或一个以上的子操作,相当于将多个子操作绑定到同一快照上,利用快照可以完成目标参与者节点所有子操作的一次性回滚,而不需要针对每个操作单独进行回滚。
可见,本申请实施例的方案,通过引入快照,对分布式事务中每个子系统的操作生成相关联的快照(即在目标参与者节点执行业务操作前自动生成快照),当事务执行失败时,参与者节点可以利用快照执行回滚操作,根据协调者节点发送的快照即可将所执行的所有操作的业务数据恢复为执行前的状态。本申请实施例的方案,通过将目标参与者节点的一个或多个操作绑定到同一个快照上,参与者节点利用快照回滚操作,可以一次性回滚该参与者节点所执行的所有操作,而不需要针对每个操作单独进行回滚,从而使回滚操作的实现,可以不依赖于数据库提供事务能力,且与现有的TCC方案相比,又可以极大的减少了对业务代码的侵入,减少额外的开发工作量。
本申请的可选实施例中,调用各目标参与者节点分别执行对应的业务操作的子操作,包括:
若获取到每个目标参与者节点的快照,则调用各目标参与者节点分别执行对应的子操作;
该方法还包括:
若各目标参与者节点中存在一个节点的快照未获取到,则向请求方设备返回操作失败提示信息。
以协调者对一个分布式事务对应的业务操作请求进行处理为例,协调者节点调用各目标参与者节点分别生成目标参与者节点的快照,如果各目标参与者节点均生成目标参与者节点的快照成功,协调者节点可以获取到每个目标参与者节点的快照,之后协调者节点执行后续调用各目标参与者节点分别执行对应的业务操作的步骤,如果各目标参与者节点中有一个或一个以上的目标参与者节点生成目标参与者节点的快照失败,也就是存在有一个或一个以上的目标参与者节点的快照未获取到的情况,此时协调者节点则可以直接向请求方设备返回操作失败提示信息,而不再执行后续调用目标参与者节点执行对应的业务操作的步骤。
在实际应用中,由于在一个或多个目标参与者节点的执行结果为执行失败时,需要各目标参与者节点依据各自对应的快照将业务数据恢复至执行操作之前的状态,如果存在一个或多个目标参与者节点的快照获取失败,则说明如果这一个或多个目标参与者节点的执行结果为失败,则无法依据快照进行业务数据的恢复,此时则无法保证整个业务操作的ACID特性,因此,在存在一个或多个目标参与者节点的快照获取失败时,则可以无需再执行后续的操作,以避免出现上述问题。
本申请的可选实施例中,向各目标参与者节点分别发送各节点所对应的快照,以使各目标参与者节点根据快照将对应的业务数据恢复至执行对应的子操作之前的状态,包括:
根据各目标参与者节点的执行结果,向各目标参与节点中执行结果为成功的目标参与节点发送对应的快照,以使执行结果为成功的各目标参与节点根据快照将对应的业务数据恢复至执行对应的子操作之前的状态。
在实际应用中,作为一可选方案,对于一个业务操作请求,如果该业务操作请求的执行结果为执行失败,协调者节点可以向该业务操作请求对应的全部目标参与者节点分别发送各节点对应的快照,各节点在接收到快照后,可以自行决定是否执行回滚操作,如节点未执行相应的业务操作,或者业务操作执行失败但节点的事务操作满足原子性特性,则可以不执行回滚操作,如果节点执行相应的业务操作成功,则需要根据接收到的快照执行相应的回滚操作。
作为另一可选方式,如果分布式系统中各参与者节点在执行事务时,其事务的执行均满足原子性特性,则参与者节点在执行事务操作时,如果执行失败,则对应的业务数据会自动回滚至执行操作前的状态,此时,协调者节点则可以只向执行成功的目标参与者节点发送对应的快照,由这些执行成功的目标参与者节点将其业务数据进行恢复。如果目标参与者节点的事务执行不满足原子性特性,在目标参与者节点的执行结果为执行失败时,则有可能存在操作执行了部分的情况,此时该节点也需要进行业务数据的恢复,协调者节点也需要向这些节点发送对应的快照。
也就是说,在实际应用中,协调者节点可以根据其所知晓的各目标参与者节点的相关信息,来决定是否向其发送快照,也可以向全部的目标参与者节点均发送对应的快照,由目标参与者节点根据自身的信息来确定是否执行回滚操作。
本申请的可选实施例中,若目标参与者节点对应的业务操作的子操作为至少两个,目标参与者节点中与业务操作对应的业务数据,为目标参与者节点中与所有子操作对应的业务数据;
上述目标参与者节点根据快照将对应的业务数据恢复至执行对应的子操作之前的状态,是指目标参与者节点根据快照将该节点中与所有子操作对应的业务数据一次性恢复至所有子操作之前的状态。
在实际应用中,对于分布式系统中的一个业务操作,用于执行该业务操作的各目标参与者节点中,这些节点可以只需要执行该业务操作的一个子操作,也可以需要执行该业务操作中的多个子操作。本申请实施例提供的该方案,由于协调者节点可以获取到各目标参与者节点中与该业务操作对应的所有业务数据的快照,因此,即使目标参与者节点需要执行多个子操作,也可以基于该快照将节点中与这多个子操作对应的业务数据一次性恢复至这些子操作前的状态,即一次回滚操作完成多个子操作的回滚。与现有的每个子操作都需要单独执行一次回滚的方案相比,能够大大减少对业务代码的侵入,减少开发工作量。
可见,本申请实施例提供的该方案,对于每一个目标参与者节点而言,在实质上是将该目标参与者节点对应于一个业务操作的回滚操作,与该业务操作在该目标参与者节点中所涉及到的所有业务数据的快照进行了绑定,无论目标参与者节点需要执行该业务操作的几个子操作,目标参与者节点只需要依据快照执行一次回滚即可以完成所有子操作所涉及到的业务数据的恢复。
在本申请的可选实施例中,若业务操作请求包括至少两个,且至少两个业务操作请求中不同的业务操作请求对应的目标参与者节点中包括相同的节点,则同时对应于不同的业务操作请求的目标参与者节点的快照,包括节点中对应于不同的业务操作请求的业务数据的快照;
若执行结果为执行失败的业务操作请求为同时对应于不同的业务操作请求的目标参与者节点所对应的操作请求,则向各目标参与者节点分别发送各节点所对应的快照,包括:
向同时对应于不同的业务操作请求的目标参与者节点,发送目标参与者节点的执行结果为执行失败的业务操作请求对应的快照。
在本实施例中,如果协调者节点处理的分布式事务的个数为至少两个,至少两个分布式事务对应至少两个业务操作请求,不同的业务操作请求对应的目标参与者节点可能是相同的,也可能是不同的。在实际应用中,协调者节点在处理多个业务操作请求时,则很有可能存在同一个目标参与者节点同时参与多个业务操作请求中所对应的两个或多个业务操作的子操作的情况,如果某一目标参与者节点同时对应两个或多个业务操作请求,则需要分别生成每个业务操作请求所对应的快照,并将每个业务操作请求对应的快照都发送给协调者节点,以便在后续出现业务操作执行失败(业务操作请求的一个或多个目标参与者节点执行子任务失败)的情况时,协调者节点能够把该业务操作对应的快照发送该目标参与者节点,以使该目标参与者节点基于接收到快照进行业务数据的恢复。
例如,某一目标参与者节点a执行了业务操作A的子操作、以及业务操作B的子操作,如果在后续各业务操作的处理过程中,业务操作A执行成功了,业务操作B执行失败了,则该目标参与者节点只需要基于其业务操作B对应快照进行数据恢复即可。当然,在业务操作B执行失败时,如果是由于该节点A执行对应的子操作失败所导致的,且节点B所处理的操作满足事务原子性的特点,节点B则可以不执行数据的恢复。
在本实施例中,对于同时执行多个业务操作的子操作的节点,如果该节点执行的多个子业务操作的执行结果均为失败,该节点也可以基于其对应的多个快照完成业务数据的一次性恢复。
本申请的可选实施例中,根据操作标识,从所有参与者节点中确定用于执行业务操作的至少两个目标参与者节点,包括:
根据操作标识和预配置的服务映射关系,确定用于执行业务操作的至少两个目标参与者节点;
其中,服务映射关系为各操作标识与用于执行各操作标识所对应的业务操作的各参与者节点的节点相关信息的对应关系。
其中,节点相关信息中可以包括参与者节点的节点标识,该节点标识可以指示该参与者节点具体为分布式系统中的哪个参与者节点,该标识可以参与者节点的编号,也可以是参与者节点的名称等。协调者节点根据上述服务映射关系,即可确定出当前的业务操作请求的操作标识所对应的各目标参与者节点的节点标识,即确定出各目标参与者节点。
可以理解的是,服务映射关系为各操作标识与用于执行各操作标识所对应的业务操作的各个参与者节点的节点相关信息的对应关系。作为一个简单示例,假设分布系统的业务操作有操作A、操作B和操作C,用于执行操作A的参与者节点为节点a和节点b,用于执行操作B的节点为节点b、节点c和节点d,执行操作C的节点为节点a和节点c,则该示例的映射关系中存储的即为操作A与节点a和节点b的节点相关信息的对应关系、操作B与节点b、节点c和节点d的节点相关信息的对应关系、以及操作C与节点a和节点c的节点相关信息的对应关系。
本申请的可选实施例中,节点相关信息包括参与者节点的业务操作接口调用地址、快照生成接口调用地址,以及回滚接口调用地址。
具体的,业务操作接口调用地址即用于完成相应业务操作的计算单元的应用程序接口的调用地址,基于该地址,协调者节点可以通过调用该地址对应的接口向目标参与者节点对应的数据处理单元发送业务操作指令。同样的,基于快照生成接口调用地址,协调者节点可以通过该地址对应的快照生成接口向目标参与者节点对应的数据处理单元发送快照生成指令,基于回滚接口调用地址,协调者节点可以通过该地址对应的回滚接口向目标参与者节点对应的数据处理单元发送回滚指令。
相应的,上述调用各目标参与者节点分别执行对应的业务操作的子操作,具体可以包括:
通过调用各目标参与者节点的业务操作接口调用地址所对应的业务操作接口,向各目标参与者节点发送对应的子操作的业务操作指令,以使各目标参与节点基于业务操作指令执行相应的子操作。
上述获取每个目标参与者节点的快照,具体可以包括:
对于各目标参与者节点,通过调用各目标参与者节点的快照生成接口调用地址所对应的接口,向各目标参与者节点发送快照生成指令,并接收各目标参与者节点根据快照生成指令返回的快照。
也就是说,服务映射关系中还可以包含有各目标参与者节点的各相关功能接口的调用地址信息,协调者节点在确定出各目标参与者节点时,即可以根据各功能接口的调用地址,调用各目标参与者节点对应的接口来完成相应的操作。如上述通过业务操作接口向目标参与者节点发送对应的子操作的业务操作指令,通过快照生成接口向目标参与者节点发送快照生成指令,各目标参与者节点在接收到各指令后,即可以执行相应的操作。
本申请的可选实施例中,该方法还包括:
通过调用各目标参与者节点的回滚接口调用地址所对应的回滚接口,向各目标参与者节点发送回滚指令,以使各目标参与者节点根据回滚指令和快照将对应的业务数据恢复至执行对应的子操作之前的状态。
具体的,对于一个分布式事务的业务操作,协调者节点在接收到各目标参与者节点返回的执行结果后,如果执行结果中存在执行失败的结果,此时则需要各目标参与者节点中的部分或全部节点进行业务数据的恢复,此时,协调者节点则可以基于上述服务映射关系确定出的回滚接口向目标参与者节点发送回滚指令。目标参与者节点在接收到回滚指令和对应的快照后,即可以基于快照中的数据执行业务数据的回滚操作,将业务数据恢复至操作前的状态。
在实际应用中,协调者节点向各目标参与者节点分别发送各节点所对应的快照时,可以是通过上述回滚接口,将回滚指令和快照一起发送给目标参与者节点,也可以是将回滚指令和快照分别发送给目标参与者节点,如通过回滚接口将回滚指令发送给目标参与者节点,通过其他接口发送快照给目标参与者节点;还可以是将回滚指令发送至目标参与者节点之后,如果参与者节点确定其需要执行回滚操作时,向协调者节点发送快照获取请求,协调者节点再将快照发送给对应的目标参与者节点。
本申请的可选实施例中,若目标参与者节点对应的业务操作的子操作为至少两个,快照生成接口调用地址和回滚接口调用地址满足以下至少一项:所有子操作对应的快照生成接口调用地址为同一个;
所有子操作对应的回滚接口调用地址为同一个。
本申请实施例的方案中,对于任一目标参与者节点而言,执行一个业务操作时,不论其所要执行的子操作的数量是一个还是多个,业务数据的恢复即回滚操作的执行都是依据其在执行操作之前的、与这些子操作相对应的业务数据的快照来进行的,也就是说,节点所要执行的所有子操作所涉及到的所有相关业务数据都是绑定在同一快照上的,因此,节点在需要执行回滚操作时,只需要依据该快照执行一次回滚操作即可完成所有子操作所涉及的业务数据的恢复。基于此,本申请实施例的该方案中,目标参与者节点所要完成的一个业务操作中的所有子操作的快照生成接口和/或回滚接口调用地址可以采用同一个,协调者节点在需要获取目标参与者节点所对应的该业务操作的所有子操作的快照、或者需要向该节点发送回滚指令时,可以通过所有子操作所共用的快照生成接口和/或回滚接口调用地址,调用该地址对应的接口发起快照生成指令和/或回滚指令即可。
通过该方式,对于一个业务操作,一个目标参与者节点的所涉及到的当前业务操作的所有子操作,都只需要对应到统一的一个快照生成接口和/或回滚接口上,与现有的一个子操作对应一个回滚接口的方式相比,大大减少的对业务代码的侵入,大大减少了额外的开发工作量。
在本申请的可选实施例中,若业务操作请求包括至少两个,且至少两个业务操作请求中不同的业务操作请求对应的目标参与者节点中包括相同的节点,则同时对应于不同的业务操作请求的目标参与者节点的快照生成接口调用地址和回滚接口调用地址满足以下至少一项:
目标参与者节点对应于不同的业务操作请求的快照生成接口调用地址为同一个;
目标参与者节点对应于不同的业务操作请求的回滚接口调用地址为同一个。
在本申请实施例中,分布式事务即业务操作请求的个数可以为多个,对于一个目标参与者节点而言,该节点所能够执行(即需要参与)的所有业务操作所对应的快照生成接口调用地址均可以为同一个,同样的,该节点所能够执行的所有业务操作的回滚接口调用地址均可以为同一个,即实现多业务操作所对应的快照生成接口和/或回滚接口的复用。无论参与者节点所需要执行的业务操作是哪个或哪些,协调者节点都可以通过该复用的接口向参与者节点发送快照生成指令和/或回滚指令。
本申请实施例中,协调者节点通过调用目标参与者节点的一个快照生成接口,实现该节点的对应于多个业务操作的快照的生成,同样的,可以通过调用该节点到的同一个回滚接口向该节点发送回滚指令。与现有的一个节点的一个子操作需要对应一个接口的方案相比,大大减少的对业务代码的侵入,大大减少了额外的开发工作量。
下面结合一个具体的应用场景对本申请实施例的方案进行说明。
本示例中的应用场景是对于失信人员P,银行需要冻结其名下的所有账户,操作前人员P的账户中可能已经存在冻结账户,故期望此操作也是原子的,即操作失败后,所有账户保持操作前状态。如图3中所示,图中的协调者即为协调者节点,参与者节点即为目标参与者节点,该示例中的目标参与者节点即为人员P的各账户所在的账户服务器,图中成功所示的箭头的左侧的参与者节点的状态即为执行冻结操作前人员P的各账户的状态,由图中可以看出,在操作前其账户B为冻结状态,其他各账户的状态为正常状态,成功所示的箭头的右侧为在成功执行冻结操作后的各账户的状态,即全部账户的状态均变为冻结状态。
对于本示例中所示的应用场景,如果使用传统TCC方案,那么对于调整账户冻结状态的操作,每个参与者节点(账户A、账户B、账户C…以及账户N所在的账户服务器)就必须要有对应的回滚状态操作。可以理解的是,这里只是举了个例子,实际业务中还存在销户、贷款等等诸多存在分布式事务的场景,在传统的TCC方案中,每个分布式事务场景中,每个操作都要有对应的回滚操作,有较大额外的开发工作量。
而基于本申请实施例所提供的方案,对于各账户而言,实际上账户的余额、冻结状态等都可以视为账户的属性,在涉及账户的操作前,都保存一份账户的快照,快照包含余额、冻结状态等与账户相关的所有属性,如果操作失败了,就可以利用这份快照恢复数据。如此一来,所有涉及账户的操作,都只需要对应到统一的一个回滚接口,利用账户的快照一次性回滚账户的所有操作,从而大大减少了额外的开发工作量。如对于一个账户而言,同时存在账户余额的转出和冻结两个分布式事务的业务操作,余额、账户状态均为操作对应的业务数据,基于本申请实施例的方案,对于账户余额转出这个分布式事务,需要获取并保存该账户的余额的快照,对于账户冻结这个分布式事务,需要获取并保存账户状态的快照,如果在执行完这两个业务操作后,需要进行回滚业务操作,该账户服务器只需要基于保存的上述两个快照即可以完成余额和账户状态的恢复。当然如果任一分布式事务的业务操作成功了,例如账户冻结成功了,那么只需要针对账户状态的快照对账户余额进行数据恢复,即协调者节点只需要向账户余额转出这个分布式事务对应的目标参与者节点发送账户的余额的快照即可。
基于与图1中所示的方法相同的原理,本申请实施例还提供了一种分布式事务的处理方法,该方法应用于分布式系统中,分布式系统包括一个协调者节点和至少两个参与者节点,协调者节点与每个参与者节点通信连接,该方法由目标参与者节点执行;如图4中所示,该方法主要可以包括以下几个步骤:
步骤S401:当接收到协调者节点发送的快照生成指令时,根据快照生成指令生成对应的快照,并向协调者节点发送快照;其中,快照是目标参与者节点中与业务操作请求对应的业务数据的快照,目标参与者节点为协调者节点在获取请求方设备发送的业务操作请求时,根据业务操作请求中携带的业务操作的操作标识确定的;
步骤S402:当接收到协调者节点发送的业务操作指令时,根据业务操作指令执行对应的业务操作,并将执行结果发送给协调者节点;
步骤S403:在接收协调者节点发送的快照时,根据快照将对应的业务数据恢复至执行对应的业务操作之前的状态。
其中,快照为协调者节点在接收到的执行结果中存在一个目标参与者节点的执行结果为执行失败时发送的。
对于本领域技术人员来说清楚的是,图4中所示的该方法在实质上与图1中所示的方法是系统的,图1中所示的方法是站在分布式系统的协调者节点的角度进行的描述,图4中所示的方法是站在分布式系统的参与者节点的角度进行的描述,因此,图4中所示的方法及其效果的详细描述可以参见前文中对图1中所示的方法及其可选实施例中相应的描述,在此不再赘述。
本申请的可选实施例中,若根据快照生成指令生成对应的快照失败,该方法还可以包括:
向协调者节点发送快照生成失败提示信息,以使协调者节点在接收到提示信息时,向请求方设备返回操作失败提示信息。
对于一个业务操作,由于业务数据的恢复需要依据快照来完成,因此,如果目标参与者节点的快照获取失败,则后续无法完成相应的业务数据的恢复,此时则可以无需在进行后的操作,由协调者节点直接向操作请求方返回操作失败的提示信息即可,整个业务操作的流程结束。
由前文的描述可知,对于请求方设备所发起的一业务操作请求,对于该业务操作,如果一个目标参与者节点需要执行该业务操作中多个子操作,基于本申请实施例的方案,该目标参与者节点的多个子操作可以对应于同一个快照生成接口和/或回滚操作接口,即对于一个业务操作,不论目标参与者节点需要执行该业务操作的几个子操作,该目标参与者节点对应于一个业务操作的快照生成接口和/或回滚操作接口可以为同一个。
同样的,对于多个业务操作,不论目标参与者节点需要执行几个业务操作的子操作,该目标参与者节点对应于多个业务操作的快照生成接口和/或回滚操作接口可以为同一个。
此外,本实施例中,对于一个业务操作,如果目标参与者节点所执行分布式事务的操作满足原子性特性,那么需要执行回滚操作(即执行业务数据恢复操作)的目标参与者节点可以为执行子操作成功的目标参与者节点,如果目标参与者节点所执行分布式事务的子操作不满足原子性,那么目标参与者节点为上述业务操作的所有目标参与者节点中的任意一个目标参与者节点。
分布式事务广泛的存在于各种互联网系统中,常见的比如支付、交易、订单等强一致性系统。本申请实施例所提供的上述各方案,理论上适用于所有存在分布式事务的应用场景。
分布式事务控制逻辑对用户来说是完全无感知的,但是其保证了用户的每一个操作符合ACID 4个基本特性。举例来说,如图5中所示,用户在电商系统上付款购买商品,实际上在电商系统中包含减库存、付款、物流下单等几个操作,分布式事务控制保证这几个操作要么一起成功,要么一起失败,在用户面前简化为一个购买商品的操作,要么购买成功要么购买失败。
电商系统中各参与者节点分别执行减库存、付款、物流下单等几个操作,执行业务操作前,执行减库存操作的参与者节点针对减库存操作的业务数据进行快照,执行付款操作的参与者节点针对付款操作的业务数据进行快照,执行物流下单操作的参与者节点针对物流下单操作的业务数据进行快照,如果购买失败,执行减库存操作的参与者节点、执行付款操作的参与者节点、以及执行物流下单操作的参与者节点中执行成功的节点或全部节点则需要利用各自的对象快照进行回滚,例如,执行物流下单操作的参与者节点可以利用快照一次性回滚物流下单操作中所涉及到的所有操作,从而可以利用参与者节点的快照一次性回滚参与者节点的所有操作,相对于TCC方案极大的减少了对业务代码的侵入,减少了过多的额外工作量。
实际上一个参与者节点除了执行在电商系统上付款购买商品这个分布式任务的操作外,还可能执行其他分布式任务的操作,同样的该节点针对其他分布式任务的操作也调用同一快照生成接口生成相应的快照,就可以用该快照回滚其他分布式任务的操作,由于可以复用同一快照生成接口生成多个快照来回滚目标参与者节点的多个分布式任务,相对于TCC方案极大的减少了对业务代码的侵入,减少了过多的额外工作量。
为了更好的说明本申请实施例所提供的方案,下面结合一些示例对本申请实施例的相关内容进行进一步说明。
图6中示出了本申请一示例中的一种分布式系统的基本架构示意图。该示例中的协调者节点为服务器集群,包括多个协调器(图中所示的协调器1、协调器2和协调器3),图中所示的参与者节点服务1、参与者节点服务2、以及参与者节点服务3为本示例中的参与者节点的示意。下面分场景对该系统的各部分进行相应的说明。
服务映射关系的配置(图中所示的映射配置服务)
在系统上线前,或者对已经上线的系统中的服务映射关系进行配置。配置流程主要可以包括:
1.系统管理人员按照实际业务场景和规则拟定业务操作的服务映射关系;
具体的,管理人员为每个分布式业务操作拟定一个合理的操作名称(本示例中的操作标识),并配置每个业务操作对应的所有参与者节点的相关信息,具体如参与者节点的业务操作接口调用地址(比如购买商品需要包含的减库存、付款、物流下单3个接口的调用地址)、所有参与者节点的与业务操作对应的快照生成接口调用地址、以及所有参与者节点的与业务操作对应的回滚接口调用地址。
2.系统管理人员通过控制台录入拟定的服务映射关系(图中所示的映射关系编辑);
3.映射配置服务接收到控制台录入的服务映射关系后,进行服务映射关系存储,存储到映射关系数据库;
4.映射配置服务接收到控制台录入的服务映射关系后,同步服务映射关系到所有的协调器,协调器将服务映射关系存入自身缓存中。
其中,本示例中,上述服务映射关系中可以包含以下四部分:
·操作名称(本示例中的操作标识),为整体操作拟定一个合理的名称;
·操作涉及的所有参与者节点的业务操作接口的调用地址,比如购买商品需要包含的减库存、付款、物流下单这3个接口的调用地址;
·所有参与者节点的与业务操作对应的快照生成接口调用地址;
·所有参与者节点的与业务操作对应的回滚接口调用地址。
下面结合一个具体实例对服务映射关系的配置进行说明。
如图7中所示,该示例中示出了一个智能对话平台服务中的服务映射关系的示意图。如图中所示,该示例中的服务注册信息中需要包括所有参与者节点服务(即参与者节点提供的业务服务)的名称和地址(业务操作接口的调用地址)、所有参与者节点的快照生成地址、以及所有参与者节点的回滚调用地址即回滚接口调用地址。具体的,该示例中的所有参与者节点服务包括图中所示的元数据服务、A算法平台服务和B算法平台服务,这些服务所在的节点(本示例中的机器人)即为参与者节点,机器人信息(即本示例与业务操作请求相关的所有业务数据)需要被同时保存在元数据服务、A算法平台服务、B算法平台服务三方中(随着业务发展,可能还会保存到更多的算法平台中)。当需要修改机器人信息时,就需要同时修改提供元数据服务、A算法平台服务、以及B算法平台服务的机器人。因此,对于修改机器人信息这一操作,就需要配置上述3处服务的修改机器人信息的调用地址,即图中所示的3处的机器人信息修改地址(即业务操作接口调用地址)、各个机器人快照生成接口调用地址(即图中所示的快照生成地址)、以及各个机器人的回滚接口调用地址(即图中所示的信息回滚地址),同时拟定整体操作名称为“UpdateRobot(修改机器人信息)”。
在智能对话平台中,实际上基本所有的业务操作都是针对机器人的,也就是说基本上所有的业务操作(例如几十个业务操作)对应的快照生成接口以及回滚接口都可以是同一个,即便是后续要新增新的业务操作,大概率也是可以直接复用当前的快照生成接口以及回滚接口,新接口开发完成之后,只需要控制台录入拟定的服务映射关系,即可启用分布式事务,实现了快照生成以及回滚接口的复用,减少开发工作量。
在完成服务映射关系的配置后,即可基于本申请实施例所提供的方案进行分布式事务的处理,下面对一个分布式事务的处理流程进行说明,该流程主要可以包括:
1、客户端请求流程
由于协调器(即协调者节点)帮助客户端完成了所有参与者节点(即参与者节点)的调用,对客户端来说,相当于多个操作被合并为了一个原子的操作,因此客户端只需向协调器集群(如图6中协调器1、协调器2和协调器3所构成的协调器集群即协调者节点)发送调用请求即可,但是需要在请求体中额外传入操作名称(操作标识的一种可选方式),协调器需要根据操作名称获取对应的服务映射关系。
2、协调器处理请求流程
如图8中所示,协调器处理请求的流程可以包括:
2.1、协调器接收到请求方设备的业务操作请求后,首先根据请求中的操作名称获取到对应的服务映射关系,获取到的服务映射关系中包含了所有目标参与者节点对应的业务操作接口调用地址、快照生成接口调用地址、以及回滚接口调用地址;
2.2、协调器通过各个目标参与者节点的快照生成接口调用地址所对应的接口,向各个目标参与者节点发送快照生成指令从而使得各个目标参与者节点生成快照,各个目标参与者节点将自己生成的快照返回给协调器,协调器缓存各个目标参与者节点的快照(即对应图中协调器调用目标参与者节点生成各目标参与者节点的对象快照,并保存到快照缓存的过程);
2.3、当所有快照保存完毕,协调器同时调用所有参与者节点对应的业务操作接口,向各参与者节点发送业务操作指令,即调用各目标参与者节点执行各节点对应的业务操作;
2.4、当所有目标参与者节点执行业务操作成功,协调器向请求方设备返回调用成功信息。
在上述处理流程中,在获取快照的过程中,如果任意一个参与者节点的快照生成失败,协调器则可以直接向请求方设备返回操作失败提示信息,结束整个操作流程。
如果每个目标参与者节点所对应的快照获取成功,在后续处理流程中,如果有任意一个或多个目标参与者节点的业务操作失败,即存在目标参与者节点的执行结果为执行失败,则协调器调用所有目标参与者节点或者执行结果为执行成功的目标参与者节点的回滚接口,向各目标参与者节点发送回滚指令,并将对应的快照发送至相应的节点,以使对应的目标参与者节点根据各自的快照执行一次回滚操作,完成业务数据的恢复,由于业务操作执行失败,协调器需要向请求方设备返回操作失败信息。
本申请的一种可选实施例方式中,分布式系统中的参与者节点包括区块链节点。
本申请实施例的分布式系统可以为基于区块链技术的分布式系统中,区块链的本质是一个去中心化的数据库,可以将多个任务在不同的区块链节点上执行,区块链系统中的一个节点可以在一个服务器上,或者,多个节点在同一个服务器上,此时,每个区块链中的节点即对应为一个参与者节点。在每次需要执行区块链中的一个任务(即区块链系统中的业务操作请求)时,需要参与到该任务的区块链节点即为目标参与者节点,在区块链系统中,目标参与者节点可以是区块链中的部分或全部节点,根据实际应用需求的不同可以对应不同的配置。
可以理解的是,本申请实施例中的协调者节点也可以为区块链节点,此时作为协调者节点的区块链节点相当于区块链系统中的管理节点,用于参与者节点的管理及协调等。
对应于本申请实施例所提供的方法,本申请实施例还提供了一种分布式事务处理装置,该装置应用于分布式系统中,分布式系统中包括一个协调者节点和至少两个参与者节点,如图9中所示,该分布式事务处理装置900可以包括收发模块901、目标节点确定模块902和目标节点调用模块903,其中:
收发模块901,用于获取请求方设备发送的业务操作请求,业务操作请求中携带有业务操作的操作标识;
目标节点确定模块902,用于根据操作标识,从所有参与者节点中确定用于执行业务操作的至少两个目标参与者节点;
收发模块901,还用于获取每个目标参与者节点的快照并保存,其中,快照是目标参与者节点中与业务操作请求对应的业务数据的快照;
目标节点调用模块903,用于调用各目标参与者节点分别执行对应的业务操作的子操作,并获取各目标参与者节点的执行结果;
收发模块901,还用于在各目标参与者节点中存在一个节点的执行结果为执行失败,则向各目标参与者节点分别发送各节点所对应的快照,以使各目标参与者节点根据快照将对应的业务数据恢复至执行对应的子操作之前的状态。
可选的,目标节点调用模块903在调用各目标参与者节点分别执行对应的业务操作的子操作时,具体用于:
若获取到每个目标参与者节点的快照,则调用各目标参与者节点分别执行对应的子操作;
收发模块901,还用于:
若各目标参与者节点中存在一个节点的快照未获取到,则向请求方设备返回操作失败提示信息。
可选的,收发模块901在向各目标参与者节点分别发送各节点所对应的快照,以使各目标参与者节点根据快照将对应的业务数据恢复至执行对应的子操作之前的状态时,具体用于:
根据各目标参与者节点的执行结果,向各目标参与节点中执行结果为成功的目标参与节点发送对应的快照,以使执行结果为成功的各目标参与节点根据快照将对应的业务数据恢复至执行对应的子操作之前的状态。
可选的,若目标参与者节点对应的业务操作的子操作为至少两个,目标参与者节点中与业务操作对应的业务数据,为目标参与者节点中与所有子操作对应的业务数据;目标参与者节点根据快照将对应的业务数据恢复至执行对应的子操作之前的状态,是指目标参与者节点根据快照将该节点中与所有子操作对应的业务数据一次性恢复至所有子操作之前的状态。
可选的,若业务操作请求包括至少两个,且至少两个业务操作请求中不同的业务操作请求对应的目标参与者节点中包括相同的节点,则同时对应于不同的业务操作请求的目标参与者节点的快照,包括节点中对应于不同的业务操作请求的业务数据的快照;
若执行结果为执行失败的业务操作请求为同时对应于不同的业务操作请求的目标参与者节点所对应的操作请求,则收发模块在向各目标参与者节点分别发送各节点所对应的快照,具体用于:
向同时对应于不同的业务操作请求的目标参与者节点,发送目标参与者节点的执行结果为执行失败的业务操作请求对应的快照。
可选的,目标节点确定模块902在根据操作标识,确定用于执行业务操作的至少两个目标参与者节点时,具体用于:
根据操作标识和预配置的服务映射关系,确定用于执行业务操作的至少两个目标参与者节点;
其中,服务映射关系为各操作标识与用于执行各操作标识所对应的业务操作的各参与者节点的节点相关信息的对应关系。
可选的,节点相关信息包括参与者节点的业务操作接口调用地址、快照生成接口调用地址、以及回滚接口调用地址。
可选的,若目标参与者节点对应的业务操作的子操作为至少两个,快照生成接口调用地址和回滚接口调用地址满足以下至少一项:
所有子操作对应的快照生成接口调用地址为同一个;
所有子操作对应的回滚接口调用地址为同一个。
可选的,若业务操作请求包括至少两个,且至少两个业务操作请求中不同的业务操作请求对应的目标参与者节点中包括相同的节点,则同时对应于不同的业务操作请求的目标参与者节点的快照生成接口调用地址和回滚接口调用地址满足以下至少一项:
目标参与者节点对应于不同的业务操作请求的快照生成接口调用地址为同一个;
目标参与者节点对应于不同的业务操作请求的回滚接口调用地址为同一个。
可选的,目标节点调用模块903在调用各目标参与者节点分别执行对应的业务操作的子操作时,具体用于:
通过调用各目标参与者节点的业务操作接口调用地址所对应的业务操作接口,向各目标参与者节点发送对应的子操作的业务操作指令,以使各目标参与节点基于业务操作指令执行相应的子操作;
收发模块901在获取每个目标参与者节点的快照时,具体用于:
对于各目标参与者节点,通过调用各目标参与者节点的快照生成接口调用地址所对应的接口,向各目标参与者节点发送快照生成指令,并接收各目标参与者节点根据快照生成指令返回的快照;
收发模块901还用于:通过调用各目标参与者节点的回滚接口调用地址所对应的回滚接口,向各目标参与者节点发送回滚指令,以使各目标参与者节点根据回滚指令和快照将对应的业务数据恢复至执行对应的子操作之前的状态。
可选的,分布式系统中的参与者节点包括区块链节点。
对应于本申请实施例所提供的方法,本申请实施例还提供了一种分布式事务处理装置,该装置应用于分布式系统,分布式系统还包括一个协调者节点和至少两个参与者节点;
如图10中所示,该分布式事务处理装置1000包括快照生成模块1001、业务操作执行模块1002以及业务操作恢复模块1003:
快照生成模块1001,用于在接收到协调者节点发送的快照生成指令时,根据快照生成指令生成对应的快照,并向协调者节点发送快照,其中,快照是目标参与者节点中与业务操作请求对应的业务数据的快照,目标参与者节点为协调者节点在获取请求方设备发送的业务操作请求时,根据业务操作请求中携带的业务操作的操作标识确定的;
业务操作执行模块1002,用于当接收到协调者节点发送的业务操作指令时,根据业务操作指令执行对应的业务操作,并将执行结果发送给协调者节点;
业务操作恢复模块1003,用于在接收协调者节点发送的快照时,根据快照将对应的业务数据恢复至执行对应的业务操作之前的状态,其中,快照为协调者节点在接收到的执行结果中存在一个目标参与者节点的执行结果为执行失败时发送的。
可选的,该装置还包括提示信息发送模块,该模块用于:
在快照生成模块1001根据快照生成指令生成对应的快照失败时,向协调者节点发送快照生成失败提示信息,以使协调者节点在接收到提示信息时,向请求方设备返回操作失败提示信息。
由于本发明实施例所提供的装置为可以执行本发明实施例中相应的方法的装置,故而基于本发明实施例中所提供的方法,本领域所属技术人员能够了解本发明实施例的装置的具体实施方式以及其各种变化形式,所以在此对于该装置如何实现本发明实施例中的方法不再详细介绍。只要本领域所属技术人员实施本发明实施例中的方法所采用的装置,都属于本申请所欲保护的范围。
基于与本申请实施例所提供的方法相同的原理,本申请实施例还提供了一种电子设备,该电子设备包括存储器和处理器;存储器中存储有计算机程序;处理器用于在运行计算机程序时执行本申请任一可选实施例中所提供的方法。
本申请实施例还提供了一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该程序被处理器执行时可以实现本申请任一可选实施例中所提供的方法。
作为一示例,图11中示出了本申请可以应用于的一种电子设备的结构示意图,该电子设备具体可以是服务器,也可以是其他设备,该电子设备8000包括存储器8003和处理器8001,存储器8003中存储有计算机程序,处理器8001,用于在运行计算机程序时执行上述任一方法。具体的,图11只是示出了电子设备的一种可选的示意性结构。图11中所示的该电子设备8000的结构并不构成对本申请实施例的限定。
其中,处理器8001和存储器8003相连,如通过总线8002相连。可选地,电子设备8000还可以包括收发器8004。需要说明的是,实际应用中收发器8004不限于一个,收发器8004可以具体用于该电子设备8000与其他设备的通信。
处理器8001可以是CPU(Central Processing Unit,中央处理器),通用处理器,DSP(Digital Signal Processor,数据信号处理器),ASIC(Application SpecificIntegrated Circuit,专用集成电路),FPGA(Field Programmable Gate Array,现场可编程门阵列)或者其他可编程逻辑器件、晶体管逻辑器件、硬件部件或者其任意组合。其可以实现或执行结合本申请公开内容所描述的各种示例性的逻辑方框,模块和电路。处理器8001也可以是实现计算功能的组合,例如包含一个或多个微处理器组合,DSP和微处理器的组合等。
总线8002可包括一通路,在上述组件之间传送信息。总线8002可以是PCI(Peripheral Component Interconnect,外设部件互连标准)总线或EISA(ExtendedIndustry Standard Architecture,扩展工业标准结构)总线等。总线8002可以分为地址总线、数据总线、控制总线等。为便于表示,图11中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
存储器8003可以是ROM(Read Only Memory,只读存储器)或可存储静态信息和指令的其他类型的静态存储设备,RAM(Random Access Memory,随机存取存储器)或者可存储信息和指令的其他类型的动态存储设备,也可以是EEPROM(Electrically ErasableProgrammable Read Only Memory,电可擦可编程只读存储器)、CD-ROM(Compact DiscRead Only Memory,只读光盘)或其他光盘存储、光碟存储(包括压缩光碟、激光碟、光碟、数字通用光碟、蓝光光碟等)、磁盘存储介质或者其他磁存储设备、或者能够用于携带或存储具有指令或数据结构形式的期望的程序代码并能够由计算机存取的任何其他介质,但不限于此。
存储器8003用于存储执行本申请方案的应用程序代码,并由处理器8001来控制执行。处理器8001用于执行存储器8003中存储的应用程序代码,以实现上面任一方法实施例所示的内容。
应该理解的是,虽然附图的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,其可以以其他的顺序执行。而且,附图的流程图中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,其执行顺序也不必然是依次进行,而是可以与其他步骤或者其他步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。
以上仅是本发明的部分实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
Claims (15)
1.一种分布式事务的处理方法,其特征在于,所述方法应用于分布式系统中,所述分布式系统包括一个协调者节点和至少两个参与者节点,所述协调者节点与每个所述参与者节点通信连接,所述方法包括:
获取请求方设备发送的业务操作请求,所述业务操作请求中携带有业务操作的操作标识;
根据所述操作标识,从所有参与者节点中确定用于执行所述业务操作的至少两个目标参与者节点;
获取每个所述目标参与者节点的快照并保存,其中,所述快照是所述目标参与者节点中与所述业务操作对应的业务数据的快照;
调用各所述目标参与者节点分别执行对应的所述业务操作的子操作,并获取各所述目标参与者节点的执行结果;
若各所述目标参与者节点中存在一个节点的执行结果为执行失败,则向各所述目标参与者节点分别发送各节点所对应的快照,以使各所述目标参与者节点根据快照将对应的业务数据恢复至执行对应的子操作之前的状态;
其中,所述向各所述目标参与者节点分别发送各节点所对应的快照,以使各所述目标参与者节点根据快照将对应的业务数据恢复至执行对应的子操作之前的状态,包括:
若所述业务操作满足原子性特性,则向执行成功的目标参与者节点发送对应的快照,若所述业务操作不满足原子性特性,则向执行成功以及执行部分进度成功的目标参与者节点发送对应的快照。
2.根据权利要求1所述的方法,其特征在于,所述调用各所述目标参与者节点分别执行对应的所述业务操作的子操作,包括:
若获取到每个所述目标参与者节点的快照,则调用各所述目标参与者节点分别执行对应的子操作;
所述方法还包括:
若各所述目标参与者节点中存在一个节点的快照未获取到,则向所述请求方设备返回操作失败提示信息。
3.根据权利要求1所述的方法,其特征在于,所述向各所述目标参与者节点分别发送各节点所对应的快照,以使各所述目标参与者节点根据快照将对应的业务数据恢复至执行对应的子操作之前的状态,包括:
根据各所述目标参与者节点的执行结果,向各所述目标参与节点中执行结果为成功的目标参与节点发送对应的快照,以使执行结果为成功的各目标参与节点根据快照将对应的业务数据恢复至执行对应的子操作之前的状态。
4.根据权利要求1所述的方法,其特征在于,若所述目标参与者节点对应的所述业务操作的子操作为至少两个,所述目标参与者节点中与所述业务操作对应的业务数据,为所述目标参与者节点中与所有子操作对应的业务数据;
所述目标参与者节点根据快照将对应的业务数据恢复至执行对应的子操作之前的状态,是指所述目标参与者节点根据快照将该节点中与所述所有子操作对应的业务数据一次性恢复至所有子操作之前的状态。
5.根据权利要求1所述的方法,其特征在于,若所述业务操作请求包括至少两个,且所述至少两个业务操作请求中不同的业务操作请求对应的目标参与者节点中包括相同的节点,则同时对应于不同的业务操作请求的目标参与者节点的快照,包括节点中对应于不同的业务操作请求的业务数据的快照;
若执行结果为执行失败的业务操作请求为同时对应于不同的业务操作请求的目标参与者节点所对应的操作请求,则所述向各所述目标参与者节点分别发送各节点所对应的快照,包括:
向同时对应于不同的业务操作请求的目标参与者节点,发送所述目标参与者节点的执行结果为执行失败的业务操作请求对应的快照。
6.根据权利要求1至5中任一项所述的方法,其特征在于,所述根据所述操作标识,从所有参与者节点中确定用于执行所述业务操作的至少两个目标参与者节点,包括:
根据所述操作标识和预配置的服务映射关系,确定用于执行所述业务操作的至少两个目标参与者节点;
其中,所述服务映射关系为各操作标识与用于执行各操作标识所对应的业务操作的各参与者节点的节点相关信息的对应关系。
7.根据权利要求6所述的方法,其特征在于,所述节点相关信息包括参与者节点的业务操作接口调用地址、快照生成接口调用地址、以及回滚接口调用地址。
8.根据权利要求7所述的方法,其特征在于,若所述目标参与者节点对应的所述业务操作的子操作为至少两个,所述快照生成接口调用地址和所述回滚接口调用地址满足以下至少一项:
所有子操作对应的快照生成接口调用地址为同一个;
所有子操作对应的回滚接口调用地址为同一个。
9.根据权利要求7所述的方法,其特征在于,若所述业务操作请求包括至少两个,且所述至少两个业务操作请求中不同的业务操作请求对应的目标参与者节点中包括相同的节点,则同时对应于不同的业务操作请求的目标参与者节点的快照生成接口调用地址和回滚接口调用地址满足以下至少一项:
目标参与者节点对应于不同的业务操作请求的快照生成接口调用地址为同一个;
目标参与者节点对应于不同的业务操作请求的回滚接口调用地址为同一个。
10.根据权利要求1至5中任一项所述的方法,其特征在于,所述分布式系统中的参与者节点包括区块链节点。
11.一种分布式事务的处理方法,其特征在于,所述方法应用于分布式系统中,所述分布式系统包括一个协调者节点和至少两个参与者节点,所述协调者节点与每个所述参与者节点通信连接;所述方法包括:
当接收到所述协调者节点发送的快照生成指令时,根据所述快照生成指令生成对应的快照,并向所述协调者节点发送所述快照,其中,所述快照是目标参与者节点中与业务操作请求对应的业务数据的快照,所述目标参与者节点为所述协调者节点在获取请求方设备发送的所述业务操作请求时,根据所述业务操作请求中携带的业务操作的操作标识确定的;
当接收到所述协调者节点发送的业务操作指令时,根据所述业务操作指令执行对应的业务操作,并将执行结果发送给所述协调者节点;
在接收所述协调者节点发送的所述快照时,根据所述快照将所述对应的业务数据恢复至执行所述对应的业务操作之前的状态,其中,所述快照为所述协调者节点在接收到的执行结果中存在一个目标参与者节点的执行结果为执行失败时发送的;
其中,所述快照是所述协调者节点根据业务操作是否满足原子性特征以及所述目标参与者节点的执行结果发送的;
若业务操作满足原子性特性,当所述参与者节点未执行所述业务操作或者业务操作执行失败,则不执行回滚操作,当所述参与者节点执行所述业务操作成功,则执行回滚操作。
12.一种分布式事务的处理装置,其特征在于,所述装置应用于分布式系统中,所述分布式系统中包括一个协调者节点和至少两个参与者节点,所述装置包括:
收发模块,用于获取请求方设备发送的业务操作请求,所述业务操作请求中携带有业务操作的操作标识;
目标节点确定模块,用于根据所述操作标识,从所有参与者节点中确定用于执行所述业务操作的至少两个目标参与者节点;
所述收发模块,还用于获取每个所述目标参与者节点的快照并保存,其中,所述快照是所述目标参与者节点中与所述业务操作请求对应的业务数据的快照;
目标节点调用模块,用于调用各所述目标参与者节点分别执行对应的业务操作的子操作,并获取各所述目标参与者节点的执行结果;
所述收发模块,还用于在各所述目标参与者节点中存在一个节点的执行结果为执行失败,则向各所述目标参与者节点分别发送各节点所对应的所述快照,以使各所述目标参与者节点根据所述快照将所述对应的业务数据恢复至执行对应的子操作之前的状态;
所述快照是所述协调者节点根据业务操作是否满足原子性特征以及所述目标参与者节点的执行结果发送的;
若业务操作满足原子性特性,当所述参与者节点未执行所述业务操作或者业务操作执行失败,则不执行回滚操作,当所述参与者节点执行所述业务操作成功,则执行回滚操作。
13.一种分布式事务处理装置,其特征在于,所述装置应用于分布式系统中,所述分布式系统包括一个协调者节点和至少两个参与者节点;所述装置包括:
快照生成模块,用于在接收到所述协调者节点发送的快照生成指令时,根据所述快照生成指令生成对应的快照,并向所述协调者节点发送所述快照,其中,所述快照是目标参与者节点中与业务操作请求对应的业务数据的快照,所述目标参与者节点为所述协调者节点在获取请求方设备发送的所述业务操作请求时,根据所述业务操作请求中携带的业务操作的操作标识确定的;
业务操作执行模块,用于当接收到所述协调者节点发送的业务操作指令时,根据所述业务操作指令执行对应的业务操作,并将执行结果发送给所述协调者节点;
业务操作恢复模块,用于在接收所述协调者节点发送的所述快照时,根据所述快照将所述对应的业务数据恢复至执行所述对应的业务操作之前的状态,其中,所述快照为所述协调者节点在接收到的执行结果中存在一个目标参与者节点的执行结果为执行失败时发送的;
其中,所述快照是所述协调者节点根据业务操作是否满足原子性特征以及所述目标参与者节点的执行结果发送的;
若业务操作满足原子性特性,当所述参与者节点未执行所述业务操作或者业务操作执行失败,则不执行回滚操作,当所述参与者节点执行所述业务操作成功,则执行回滚操作。
14.一种电子设备,其特征在于,所述电子设备包括存储器和处理器;
所述存储器中存储有计算机程序;
所述处理器,用于在运行所述计算机程序时执行权利要求1-11中任一项所述的方法。
15.一种计算机可读存储介质,其特征在于,所述存储介质上存储有计算机程序,所述程序被处理器执行时实现权利要求1-11中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910786076.4A CN110502319B (zh) | 2019-08-23 | 2019-08-23 | 分布式事务的处理方法、装置、电子设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910786076.4A CN110502319B (zh) | 2019-08-23 | 2019-08-23 | 分布式事务的处理方法、装置、电子设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110502319A CN110502319A (zh) | 2019-11-26 |
CN110502319B true CN110502319B (zh) | 2021-10-12 |
Family
ID=68589149
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910786076.4A Active CN110502319B (zh) | 2019-08-23 | 2019-08-23 | 分布式事务的处理方法、装置、电子设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110502319B (zh) |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111143040A (zh) * | 2019-12-30 | 2020-05-12 | 北京三快在线科技有限公司 | 事务处理方法、装置、系统及存储介质 |
CN111210350A (zh) * | 2020-01-03 | 2020-05-29 | 平安科技(深圳)有限公司 | 区块链的交易方法、装置、计算机设备及存储介质 |
CN111818305B (zh) * | 2020-07-09 | 2021-12-10 | 杭州海康威视数字技术股份有限公司 | 一种分布式系统、业务控制方法及装置 |
CN111984439A (zh) * | 2020-09-03 | 2020-11-24 | 深圳壹账通智能科技有限公司 | 基于区块链的数据处理方法、装置及存储介质 |
CN112069258B (zh) * | 2020-09-08 | 2024-04-19 | 北京金山云网络技术有限公司 | 事务进度的管理方法、装置及分布式数据库 |
CN112907276A (zh) * | 2021-01-22 | 2021-06-04 | 北京达佳互联信息技术有限公司 | 任务处理方法、装置及存储介质 |
CN114443357A (zh) * | 2021-12-22 | 2022-05-06 | 锐捷网络股份有限公司 | 文件系统修复方法、装置及计算设备 |
Family Cites Families (20)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7730286B2 (en) * | 2005-12-30 | 2010-06-01 | Intel Corporation | Software assisted nested hardware transactions |
US8650155B2 (en) * | 2008-02-26 | 2014-02-11 | Oracle International Corporation | Apparatus and method for log based replication of distributed transactions using globally acknowledged commits |
US8752054B2 (en) * | 2010-03-11 | 2014-06-10 | Avaya Inc. | Intelligent merging of transactions based on a variety of criteria |
CN102103518B (zh) * | 2011-02-23 | 2013-11-13 | 运软网络科技(上海)有限公司 | 一种在虚拟化环境中管理资源的系统及其实现方法 |
CN103200147B (zh) * | 2012-01-04 | 2018-04-27 | 中兴通讯股份有限公司 | 第三方业务的请求方法及装置 |
CN103345420B (zh) * | 2013-06-03 | 2017-12-22 | 百度在线网络技术(北京)有限公司 | 批量调用api接口的方法、系统和装置 |
US20150120645A1 (en) * | 2013-10-31 | 2015-04-30 | Futurewei Technologies, Inc. | System and Method for Creating a Distributed Transaction Manager Supporting Repeatable Read Isolation level in a MPP Database |
CN106155832B (zh) * | 2015-03-30 | 2019-03-22 | Tcl集团股份有限公司 | 一种数据恢复的方法、装置及Android设备 |
CN106302611A (zh) * | 2015-06-09 | 2017-01-04 | 深圳市腾讯计算机系统有限公司 | 业务请求分配系统、方法和装置 |
CN106325978B (zh) * | 2015-06-19 | 2020-06-30 | 阿里巴巴集团控股有限公司 | 分布式事务的处理方法及装置 |
CN105573828B (zh) * | 2015-12-17 | 2019-04-12 | 布比(北京)网络技术有限公司 | 一种操作处理方法及装置 |
CN106502769B (zh) * | 2016-09-30 | 2019-11-05 | 华为技术有限公司 | 分布式事务处理方法、装置及系统 |
CN106775959B (zh) * | 2016-12-06 | 2017-12-22 | 上海壹账通金融科技有限公司 | 分布式事务处理方法和系统 |
CN106790501B (zh) * | 2016-12-15 | 2020-06-09 | 咪咕音乐有限公司 | 一种基于接口跳转的业务处理方法及装置 |
US10585873B2 (en) * | 2017-05-08 | 2020-03-10 | Sap Se | Atomic processing of compound database transactions that modify a metadata entity |
CN106998370A (zh) * | 2017-06-15 | 2017-08-01 | 北京微影时代科技有限公司 | 访问控制方法、装置以及系统 |
CN109976881B (zh) * | 2017-12-28 | 2022-11-08 | 腾讯科技(深圳)有限公司 | 事务识别方法和装置、存储介质以及电子装置 |
CN108733457B (zh) * | 2018-04-12 | 2021-07-20 | 创新先进技术有限公司 | 分布式事务的实现方法和装置 |
CN109542428B (zh) * | 2018-10-16 | 2024-06-11 | 北京神州数码云科信息技术有限公司 | 业务处理方法、装置、计算机设备和存储介质 |
CN109491767A (zh) * | 2018-11-13 | 2019-03-19 | 上海联寓智能科技有限公司 | 分布式事务的处理方法和分布式系统 |
-
2019
- 2019-08-23 CN CN201910786076.4A patent/CN110502319B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN110502319A (zh) | 2019-11-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110502319B (zh) | 分布式事务的处理方法、装置、电子设备及存储介质 | |
CN109003078B (zh) | 基于区块链的智能合约调用方法及装置、电子设备 | |
US7925764B2 (en) | Method, apparatus and computer program product for integrating heterogeneous systems | |
CN112016921B (zh) | 交易处理方法、装置及设备 | |
WO2007071592A2 (en) | Commitment of transactions in a distributed system | |
CN110163755B (zh) | 基于区块链的数据压缩、查询方法及装置和电子设备 | |
CN112446786A (zh) | 一种异常交易处理方法、装置、电子设备和可读存储介质 | |
CN117056116B (zh) | 一种流程管理方法和电子设备 | |
CN111046110A (zh) | 用于区块链系统的节点管理的方法、节点和计算设备 | |
CN113672350B (zh) | 一种应用处理方法、装置及相关设备 | |
US6574750B1 (en) | Preserving consistency of passively-replicated non-deterministic objects | |
CN112685391A (zh) | 一种服务数据迁移方法、装置、计算机设备和存储介质 | |
CN112015595A (zh) | 主从数据库的切换方法、计算设备及存储介质 | |
CN112817995B (zh) | 数据处理方法和装置、电子设备及存储介质 | |
CN105183544A (zh) | 一种非阻塞式容错的分布式事务提交方法及系统 | |
CN112995262A (zh) | 分布式事务提交方法、系统及计算设备 | |
KR20140047230A (ko) | 분산 시스템에서 분산 트랜잭션의 최적화를 위한 방법 및 트랜잭션을 최적화한 분산 시스템 | |
US7284018B1 (en) | Logless transaction coordination | |
CN111311360A (zh) | 资源的退还方法和装置、存储介质、电子装置 | |
JPH10149286A (ja) | 効率的な共通オブジェクトリクエストブローカアーキテクチャトランザクションを実行するための方法および装置 | |
CN112596801A (zh) | 事务处理方法、装置、设备、存储介质、数据库 | |
CN116319241A (zh) | 处理事务的方法、处理事务的装置和电子设备 | |
CN109901933B (zh) | 业务系统的操作方法及装置、存储介质、电子装置 | |
CN114217911A (zh) | 一种跨链事务处理方法、装置、计算设备和介质 | |
CN113762939A (zh) | 基于区块链的资产管理方法、装置及电子设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
REG | Reference to a national code |
Ref country code: HK Ref legal event code: DE Ref document number: 40016255 Country of ref document: HK |
|
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |