发明内容
本说明书描述了一种方法和装置,在两阶段的分布式事务处理过程中,通 过提前返回事务处理结果通知,降低事务处理耗时,改善用户体验。
根据第一方面,提供一种处理分布式事务的方法,该方法包括:
获取分布式事务的处理请求,所述分布式事务包括多项业务,所述多项业 务涉及多个服务方;
根据所述处理请求,针对所述多个服务方分别执行所述多项业务的第一阶 段处理,所述第一阶段处理为第二阶段处理的预处理,所述第二阶段处理为业 务的提交或回滚;
一旦确定所述多项业务中各项业务在所述第一阶段处理中各自的阶段处理 结果,在开始执行所述第二阶段处理之前或与其同时,根据所述阶段处理结 果,返回所述分布式事务的处理结果通知。
在一个实施例中,上述阶段处理结果为,多项业务中每项业务的第一阶段 处理均处理成功;在这样的情况下,返回分布式事务处理成功的通知。
在一个实施例中,上述阶段处理结果为,多项业务中存在至少一项业务的 第一阶段处理不成功;在这样的情况下,返回分布式事务处理失败的通知。
根据一种实施方式,在返回处理结果通知之后,根据阶段处理结果,针对 所述多个服务方分别执行所述多项业务的第二阶段处理。
在一个实施例中,阶段处理结果为,所述多项业务中每项业务的第一阶段 处理均处理成功;在这样的情况下,第二阶段处理包括:令所述多个服务方中 各个服务方分别提交所述多项业务中的对应业务。
在一个实施例中,阶段处理结果为,所述多项业务中存在至少一项业务的 第一阶段处理不成功;在这样的情况下,第二阶段处理包括:令所述多个服务 方中各个服务方分别回滚所述多项业务中的对应业务。
根据一个实施例,上述多项业务包括第一业务,所述第一业务为余额支 取,所述第一业务的第一阶段处理包括余额冻结;所述第一业务的第二阶段处 理包括,第一业务的提交或回滚,其中所述第一业务的提交包括余额扣减,所 述第一业务的回滚包括冻结释放。
根据一个实施例,上述多项业务包括第二业务,所述第二业务为份额转 入,所述第二业务的第一阶段处理包括,转入份额记账;所述第二业务的第二 阶段处理包括,第二业务的提交或回滚,其中所述第二业务的提交包括份额增 加,所述第二业务的回滚包括记账清除。
根据第二方面,提供一种处理分布式事务的装置,包括:
请求获取单元,配置为获取分布式事务的处理请求,所述分布式事务包括 多项业务,所述多项业务涉及多个服务方;
第一处理单元,配置为根据所述处理请求,针对所述多个服务方分别执行 所述多项业务的第一阶段处理,所述第一阶段处理为第二阶段处理的预处理, 所述第二阶段处理为业务的提交或回滚;
通知返回单元,配置为一旦确定所述多项业务中各项业务在所述第一阶段 处理中各自的阶段处理结果,在开始执行所述第二阶段处理之前或与其同时, 根据所述阶段处理结果,返回所述分布式事务的处理结果通知。
根据第三方面,提供了一种计算机可读存储介质,其上存储有计算机程 序,当所述计算机程序在计算机中执行时,令计算机执行第一方面的方法。
根据第四方面,提供了一种计算设备,包括存储器和处理器,其特征在 于,所述存储器中存储有可执行代码,所述处理器执行所述可执行代码时,实 现第一方面的方法。
根据本说明书实施例披露的处理分布式事务的方法和装置,在两阶段的分 布式事务处理中,在执行第二阶段处理之前,即根据第一阶段处理的阶段处理 结果,返回分布式事务的处理结果通知,如此,减少处理耗时和用户等待时 间,提升用户体验。
具体实施方式
下面结合附图,对本说明书披露的多个实施例进行描述。
图1为本说明书披露的一个实施例的实施场景示意图。如图1所示,外部机 构通过安全网络向分布式处理系统100发出分布式事务处理请求。具体而言,分 布式事务处理请求例如是支付请求。支付请求实际上是请求将款项从一个服务 方转移到另一服务方,因此支付请求涉及至少两项业务,第一业务是从一个服 务方支取款项,第二业务是向另一服务方增加款项。图1中的外部机构是相对于 分布式处理系统100而言的,在支付请求的例子中,外部机构例如是支付宝业务 系统。比如,终端用户在请求通过支付宝进行支付时,支付宝业务系统接收到 终端用户的请求,通过安全网络将支付请求发送到分布式处理系统。安全网络 是分布式处理系统与外部机构进行通信所经由的网络。由于在许多情况下,分 布式事务常常是与金融业务相关的事务,例如前述的支付请求,因此对于通信 安全性有很高的要求。一般地,安全网络需要对来自外部机构的事务处理请求 进行加解密、验签等操作,在验证通过后,将处理请求转发给分布式处理系 统。在支付场景下,该分布式处理系统例如是网商银行处理系统。
分布式处理系统100用于对接收到的分布式事务处理请求进行处理。进一步 地,分布式处理系统可以划分为业务产品层,业务处理层和事务管理器。业务 产品层对应于各个产品,例如快捷支付业务,代扣业务,代收业务等,通过各 个产品获取到事务处理请求,并进行基本的验证操作。业务处理层是位于更加 底层的功能模块,可以对事务处理请求所涉及的各项业务进行预处理。在处理 资产相关的事务处理请求的情况下,上述业务处理层即为资产处理层,可以进 行资产冻结、转移、交换等操作。事务管理器用于对分布式事务的处理和执行 过程进行管理。
根据本说明书的一个实施例,在外部机构通过安全网络向分布式处理系统 发送事务处理请求,例如支付请求之后,在分布式处理系统中,首先由业务产 品层的对应产品获取该处理请求,例如快捷支付业务获取到快捷支付的支付请 求,并将该请求提交至业务处理层。业务处理层将支付请求解析为,从一个服 务方支取款项的第一业务,和向另一服务方增加款项的第二业务。然后,分别 对这两个服务方执行业务的第一阶段处理,即预处理。例如,第一业务的预处 理可以包括冻结要支取的款项额,第二业务的预处理可以包括,对要增加的款 项进行记账。为了保证分布式事务处理的数据一致性,仅在第一业务和第二业 务的预处理均处理成功的情况下,在第二阶段,才会提交所有业务,使其生 效。任一业务预处理不成功,都会导致在第二阶段,回滚所有业务。
由于第一阶段的处理结果已经可以决定第二阶段的处理方式和最终的处理 结果,因此,根据本说明书的实施例,一旦确定出第一阶段的处理结果,在执 行第二阶段的处理之前,即向外部机构返回处理结果通知。如此,缩减了外部 机构的等待时间,显著提升用户体验。下面描述上述构思方式的具体执行过 程。
图2示出根据一个实施例的处理分布式事务的方法流程图。该方法的执行主 体可以是任何具有计算、处理能力的系统、设备、装置、平台或服务器,例如 图1所示的分布式处理系统,更具体地,例如是对资产类分布式事务进行处理的 系统,比如网商银行服务器系统等。如图2所示,上述方法包括:步骤21,获取 分布式事务的处理请求,所述分布式事务包括多项业务,所述多项业务涉及多 个服务方;步骤22,根据所述处理请求,针对所述多个服务方分别执行所述多 项业务的第一阶段处理,所述第一阶段处理为第二阶段处理的预处理,所述第 二阶段处理为业务的提交或回滚;步骤23,一旦确定所述多项业务在第一阶段处理中的阶段处理结果,在开始执行所述第二阶段处理之前或与其同时,根据 所述阶段处理结果,返回所述分布式事务的处理结果通知。下面详细描述以上 各个步骤的执行方式。
在一个实施例中,首先,在步骤21,获取分布式事务的处理请求。一般而 言,分布式事务包括多项业务,多项业务可能涉及多个服务方。相应地,在一 个实施例中,处理请求中可以包括所涉及的各项业务的业务信息,和对应的服 务方信息。
在一个例子中,上述分布式事务的处理请求为支付请求,该支付请求至少 涉及从一个服务方支取款项的第一业务,和向另一服务方增加款项的第二业 务。更具体地,上述支付请求例如是,从余额宝中支付100元到某银行账户。此 时,该支付请求至少包括两项业务:从第一服务方,即余额宝,支取款项100 元,以及在第二服务方,即上述银行的某账户中增加款项100元。在另一具体例 子中,上述支付请求例如是合并支付,比如从余额中支付50元,从余利宝(一 种理财工具)中支付100元,将这150元共同支付到某银行账户。此时,该支付 请求至少包括三项业务:从第一服务方,即余额,支取款项50元,从第二服务 方,即余利宝,支取款项100元,以及在第三服务方,即上述银行的某账户中增 加款项150元。
在其他例子中,上述分布式事务的处理请求还可以是转账请求、结算请求 等等。下面主要结合典型的支付请求的例子进行描述。
在步骤21获取分布式事务的处理请求的基础上,在步骤22,根据所述处理 请求,针对多个服务方分别执行各项业务的第一阶段处理。具体地,可以首先 对处理请求进行解析和分析,从而确定出分布式事务所涉及的各项业务的业务 信息,以及对应的各个服务方的信息。业务信息例如可以包括业务类型(预授 权、支取、转入等)、金额等,服务方信息例如可以包括服务方名称,对应服 务器信息,账户信息等等。
在确定出上述业务信息和服务方信息的情况下,就可以针对各个服务方分 别执行各项业务的第一阶段处理。如前所述,第一阶段处理为第二阶段处理的 预处理,第二阶段处理为业务的提交或回滚。在分布式事务处理框架中,为了 保持数据一致性,仅在各项业务的第一阶段处理均成功的情况下,在第二阶段 才会提交各项业务;只要各项业务中有一项业务的第一阶段处理不成功,在第 二阶段就会回滚所有业务。
第一阶段处理中预处理的具体内容与各项业务的业务内容相关联。在一个 实施例中,分布式事务的处理请求为支付请求,其中涉及的业务包括支取款项 的业务,例如从余额宝支取100元。对于支取款项的业务,在第一阶段处理中, 首先进行账户验证。账户验证首先要对待支取款项的账户本身的信息进行验 证,例如验证余额宝账户的账户信息,以及账户有效性。在账户验证通过之 后,还要验证,该账户中的余额是否足以支付该笔款项,例如余额是否大于要 支取的100元。在账户验证中各项验证都通过之后,第一阶段处理还包括,冻结 该笔待支付的款项。如果冻结成功,那么,该支取款项的业务的第一阶段处理即处理成功。并且,一旦该笔款项冻结成功,则意味着,该笔款项在解冻之前 不能被进行其他操作,这可以保证后续在第二阶段处理中,该笔款项一定可以 得到扣减。
在一个实施例中,分布式事务还包括份额转入的业务,例如在某银行账户 中增加款项100元。对于份额转入的业务,在第一阶段处理中,首先也要进行账 户验证处理,例如验证该账户的账户信息是否合法,该账户是否有效等等。在 账户验证通过之后,第一阶段处理还包括,对转入份额进行清算记账。在账户 验证和清算记账都成功的情况下,该业务的第一阶段处理成功。
在分布式事务包括其他业务类型的情况下,相应的第一阶段处理可以包含 其他处理内容。可以理解的是,第二阶段处理对应于业务真正的提交生效,或 者失败回滚,第一阶段处理是第二阶段处理的预处理。就同一业务而言,第一 阶段处理的成功可以保证第二阶段处理成功。
如此,在步骤22,对各项业务执行第一阶段处理。相应地,可以确定出各 个业务的第一阶段处理结果,即阶段处理结果。于是,在步骤23,一旦确定各 项业务在第一阶段处理中的阶段处理结果,在开始执行第二阶段处理之前或与 其同时,根据所述阶段处理结果,返回分布式事务的处理结果通知。
更具体地,如果第一阶段处理的阶段处理结果为,多项业务中每项业务的 第一阶段处理均处理成功,那么就返回分布式事务处理成功的通知。如果阶段 处理结果为,多项业务中存在至少一项业务的第一阶段处理不成功,那么就返 回分布式事务处理失败的通知。
在一个实施例中,上述返回分布式事务的处理结果通知,是由分布式处理 系统将处理结果通知返回给外部机构,从而使得外部机构可以将该处理结果通 知返回给终端用户。更具体地,在图1所示的架构中,由业务处理层分别执行各 个业务的第一阶段处理,然后基于阶段处理结果,向业务产品层返回处理结果 通知。然后,业务产品层通过安全网络向外部结构返回上述处理结果通知,从 而使得外部机构可以将该处理结果通知返回给终端用户。
需要说明的是,根据本说明书的实施例,返回分布式事务的处理结果通知 的步骤,在开始执行第二阶段处理之前,或者与开始执行第二阶段处理同时, 进行执行。这与常规技术中执行完第二阶段处理之后才返回处理结果通知形成 鲜明对照。实际上,根据分布式事务框架的第一阶段处理和第二阶段处理的设 置,在确定出各个业务的第一阶段处理的阶段处理结果时,即可以据此确定第 二阶段的处理内容,即第二阶段是进行提交还是回滚,并且对于每个单项业务 来说,第一阶段处理的成功可以保证第二阶段处理成功,因此,基于这样的考 虑,在执行第二阶段处理之前就先返回整个事务的处理结果通知,并不会影响 处理结果通知的准确性。而从用户的角度来说,则可以缩短等待时间,显著提 升用户体验。
根据一个实施例,在返回处理结果通知之后,分布式处理系统继续执行各 个业务的第二阶段处理。更具体而言,在图1的架构体系中,由业务处理层返回 处理结果通知后,向事务管理器发出消息,由事务管理器来分配或执行第二阶 段处理。
具体而言,如果第一阶段处理的阶段处理结果为,多项业务中每项业务的 第一阶段处理均处理成功,那么在第二阶段处理中,令各项业务对应的各个服 务方分别提交多项业务中的对应业务;如果阶段处理结果为,多项业务中存在 至少一项业务的第一阶段处理不成功,那么第二阶段处理则包括,令多个服务 方中各个服务方分别回滚所述多项业务中的对应业务。
第二阶段处理中针对各项业务的提交或回滚的具体操作内容与业务内容相 关联,且与第一阶段处理相对应。在一个实施例中,分布式事务包括支取款项 的业务,例如从余额宝支取100元。对于支取款项的业务,如前所述,在第一阶 段处理中,会对要支取的款项进行冻结。在第二阶段处理中,根据全部业务的 阶段处理结果,确定是进行业务提交还是回滚。在进行业务提交的情况下,对 于上述支取款项的业务,在第二阶段处理中进行真正的余额扣减,从而完成业 务提交,使得支取款项的业务真正生效。在进行业务回滚的情况下,对于上述 支取款项的业务,在第二阶段处理中,对冻结的款项进行解冻或释放,从而实 现业务回滚。
在一个实施例中,分布式事务还包括份额转入的业务,例如在某银行账户 中增加款项100元。对于份额转入的业务,如前所述,在第一阶段处理中,对转 入份额进行清算记账。在第二阶段处理中,根据全部业务的阶段处理结果,确 定是进行业务提交还是回滚。在进行业务提交的情况下,对于上述份额转入的 业务,在第二阶段处理中进行真正的份额增加,从而完成业务提交,使得份额 转入的业务真正生效。在进行业务回滚的情况下,对于上述份额转入的业务, 在第二阶段处理,对转入的记账进行记账清除,从而实现业务回滚。
在分布式事务包括其他业务类型的情况下,相应的第二阶段处理的提交或 回滚可以包含其他操作。可以理解的是,第二阶段处理对应于业务真正的提交 生效,或者失败回滚。对于整个分布式事务而言,在第二阶段处理中,对于各 个业务,要么全部提交,要么全部回滚。如果第二阶段处理的操作是提交,那 么分别提交各个业务,使得整个分布式事务生效。例如,对于从余额宝支付100 元到某银行账户的分布式事务,涉及的业务包括从余额宝支取100元,以及向某 银行账户转入100元。这两项业务对应的第一阶段处理包括,冻结余额宝中100 元的余额,以及在银行账户中进行转入记账。如果两项业务的第一阶段处理均 成功,那么在第二阶段处理中,提交全部业务,也就是从余额宝中进行余额扣 减,同时在银行账户中进行款项增加,如此使得整个支付事务得到处理完成和 生效。如果两项业务中任一业务的第一阶段处理不成功,那么会导致第二阶段 处理中所有业务全部回滚,也就是将余额宝中冻结的款项释放,同时对银行账 户的转入记账进行清除。在这样的情况下,整个支付事务不成功。
典型地,第二阶段处理通常需要几百毫秒的时间,例如300-500ms。通过在 执行第二阶段处理之前就向用户返回事务处理结果通知,可以使得用户的等待 时间缩短上述的几百毫秒,显著提升用户体验。
根据另一方面的实施例,还提供一种处理分布式事务的装置。图3示出根据 一个实施例的处理分布式事务的装置的示意性框图。如图3所示,处理装置300 包括:请求获取单元310,配置为获取分布式事务的处理请求,所述分布式事务 包括多项业务,所述多项业务涉及多个服务方;第一处理单元320,配置为根据 所述处理请求,针对所述多个服务方分别执行所述多项业务的第一阶段处理, 所述第一阶段处理为第二阶段处理的预处理,所述第二阶段处理为业务的提交 或回滚;通知返回单元330,配置为一旦确定所述多项业务中各项业务在所述第 一阶段处理中各自的阶段处理结果,在开始执行所述第二阶段处理之前或与其 同时,根据所述阶段处理结果,返回所述分布式事务的处理结果通知。
根据一个实施例,上述第一阶段处理的阶段处理结果为,所述多项业务中 每项业务的第一阶段处理均处理成功。在这样的情况下,通知返回单元330返回 分布式事务处理成功的通知。
根据另一实施例,上述第一阶段处理的阶段处理结果为,所述多项业务中 存在至少一项业务的第一阶段处理不成功。在这样的情况下,通知返回单元330 返回分布式事务处理失败的通知。
在一个实施例中,处理装置300还包括第二处理单元340,配置为在返回处 理结果通知之后,根据所述阶段处理结果,针对所述多个服务方分别执行所述 多项业务的第二阶段处理。
根据一个实施例,上述第一阶段处理的阶段处理结果为,所述多项业务中 每项业务的第一阶段处理均处理成功。在这样的情况下,第二处理单元340配置 为,令所述多个服务方中各个服务方分别提交所述多项业务中的对应业务。
根据另一实施例,上述第一阶段处理的阶段处理结果为,所述多项业务中 存在至少一项业务的第一阶段处理不成功。在这样的情况下,第二处理单元340 配置为,令所述多个服务方中各个服务方分别回滚所述多项业务中的对应业 务。
在一个实施例中,上述多项业务包括第一业务,所述第一业务为余额支 取,所述第一业务的第一阶段处理包括余额冻结;所述第一业务的第二阶段处 理包括,第一业务的提交或回滚,其中所述第一业务的提交包括余额扣减,所 述第一业务的回滚包括冻结释放。
在另一实施例中,上述多项业务包括第二业务,所述第二业务为份额转 入,所述第二业务的第一阶段处理包括,转入份额记账;所述第二业务的第二 阶段处理包括,第二业务的提交或回滚,其中所述第二业务的提交包括份额增 加,所述第二业务的回滚包括记账清除。
通过以上描述的处理分布式事务的方法和装置,在两阶段的分布式事务处 理中,在执行第二阶段处理之前,即根据第一阶段处理的阶段处理结果,返回 分布式事务的处理结果通知,如此,减少处理耗时和用户等待时间,提升用户 体验。
如上,根据再一方面的实施例,还提供一种计算机可读存储介质,其上存 储有计算机程序,当所述计算机程序在计算机中执行时,令计算机执行结合图2 所描述的方法。
根据再一方面的实施例,还提供一种计算设备,包括存储器和处理器,所 述存储器中存储有可执行代码,所述处理器执行所述可执行代码时,实现结合 图2所描述的方法。
本领域技术人员应该可以意识到,在上述一个或多个示例中,本说明书披 露的多个实施例所描述的功能可以用硬件、软件、固件或它们的任意组合来实 现。当使用软件实现时,可以将这些功能存储在计算机可读介质中或者作为计 算机可读介质上的一个或多个指令或代码进行传输。
以上所述的具体实施方式,对本说明书披露的多个实施例的目的、技术方 案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本说明书 披露的多个实施例的具体实施方式而已,并不用于限定本说明书披露的多个实 施例的保护范围,凡在本说明书披露的多个实施例的技术方案的基础之上,所 做的任何修改、等同替换、改进等,均应包括在本说明书披露的多个实施例的 保护范围之内。