一种事务的处理方法、装置及设备
技术领域
本说明书涉及计算机技术领域,尤其涉及一种事务的处理方法、装置及设备。
背景技术
随着互联网金融应用的飞速发展,越来越多的业务都有了记账的诉求。通过账务系统维护用户的账户信息,保证线上交易的稳定持续运行,并在核算层面反映真实业务的发生和资源(如资金等)的流转。与此同时,由于架构升级或账户级容灾备份的技术需求,需要在账务系统本身应对大量账户操作请求的同时,完成跨系统跨库级的实时账户迁移,并且保障迁移过程中账户的一致性。
比如,用户在通过支付的应用程序完成线上购物的场景下,服务器可以利用账户的实时迁移,实现在用户无感知的状况下,将该用户的支付应用程序中账户的余额和冻结余额等数据实时迁移到另一系统(和/或数据库)中,并且保证迁移账户和原账户的一致性。迁移完成后,可以应对技术架构层面的系统调整或容灾备份的技术要求,然这样,就需要提供一种能够实现账户的实时迁移,并保证在迁移的过程中账户的一致性的方案。
发明内容
本说明书实施例的目的是提供一种事务的处理方法、装置及设备,以提供一种能够实现账户的实时迁移,并保证在迁移的过程中账户的一致性的方案。
为实现上述技术方案,本说明书实施例是这样实现的:
本说明书实施例提供的一种事务的处理方法,所述方法包括:
接收用户的事务处理请求;
确定预存的迁移映射表中是否存在所述用户的迁移映射关系;其中所述迁移映射表用于记录用户的账户由第一系统迁移到第二系统的映射关系;
若是,则根据所述事务处理请求对相应的事务进行处理;若否,则在所述迁移映射表中生成所述用户的迁移映射关系,并根据所述事务处理请求对相应的事务进行处理。
可选地,在所述迁移映射表中生成所述用户的迁移映射关系,并根据所述事务处理请求对相应的事务进行处理之后,还包括:
根据所述事务的处理状态,对所述迁移映射表中的所述用户的迁移映射关系进行删除或存储处理。
可选地,所述根据所述事务的处理状态,对所述用户标识映射关系进行删除或存储处理,包括:
如果所述事务的处理状态为回滚,则删除所述用户的迁移映射关系;
如果所述事务的处理状态为提交,则存储所述用户的迁移映射关系。
可选地,所述在所述迁移映射表中生成所述用户的迁移映射关系之后,所述方法还包括:
对所述事务处理请求触发的所述用户的账户迁移进行迁移同步处理;
在迁移同步处理后,分别对第一系统与第二系统中的所述用户的账户执行所述事务处理请求,以对所述事务进行处理。
可选地,所述事务处理请求对应的事务为基于嵌套关系的分布式事务。
本说明书实施例提供的一种事务的处理装置,所述装置包括:
请求接收模块,用于接收用户的事务处理请求;
判断模块,用于确定预存的迁移映射表中是否存在所述用户的迁移映射关系;其中所述迁移映射表用于记录用户的账户由第一系统迁移到第二系统的映射关系;
事务处理模块,用于若是,则根据所述事务处理请求对相应的事务进行处理,根据所述事务的处理状态;若否,则在所述迁移映射表中生成所述用户的迁移映射关系,并根据所述事务处理请求对相应的事务进行处理。
可选地,所述装置还包括:
迁移映射处理模块,用于根据所述事务的处理状态,对所述迁移映射表中的所述用户的迁移映射关系进行删除或存储处理。
可选地,所述迁移映射处理模块,用于如果所述事务的处理状态为回滚,则删除所述用户的迁移映射关系;如果所述事务的处理状态为提交,则存储所述用户的迁移映射关系。
可选地,所述装置还包括:
迁移同步模块,用于对所述事务处理请求触发的所述用户的账户迁移进行迁移同步处理;
所述事务处理模块,用于在迁移同步处理后,分别对第一系统与第二系统中的所述用户的账户执行所述事务处理请求,以对所述事务进行处理。
可选地,所述事务处理请求对应的事务为基于嵌套关系的分布式事务。
本说明书实施例提供的一种事务的处理设备,所述事务的处理设备包括:
处理器;以及
被安排成存储计算机可执行指令的存储器,所述可执行指令在被执行时使所述处理器:
接收用户的事务处理请求;
确定预存的迁移映射表中是否存在所述用户的迁移映射关系;其中所述迁移映射表用于记录用户的账户由第一系统迁移到第二系统的映射关系;
若是,则根据所述事务处理请求对相应的事务进行处理,根据所述事务的处理状态;若否,则在所述迁移映射表中生成所述用户的迁移映射关系,并根据所述事务处理请求对相应的事务进行处理。
由以上本说明书实施例提供的技术方案可见,本说明书实施例通过在接收到用户的事务处理请求时,确定预存的迁移映射表中是否存在该用户的迁移映射关系,其中,该迁移映射表用于记录用户的账户由第一系统迁移到第二系统的映射关系,如果确定迁移映射表中存在该用户的迁移映射关系,则根据事务处理请求对相应的事务进行处理,如果确定迁移映射表中不存在该用户的迁移映射关系,则在迁移映射表中生成该用户的迁移映射关系,并根据该事务处理请求对相应的事务进行处理,这样,通过记录的用户的账户由第一系统迁移到第二系统的映射关系(即用户的迁移映射关系)来判定用户当前是否已完成账户迁移和迁移同步,对于未进行账户迁移的用户,可以生成该用户的迁移映射关系,并可以进行账户迁移,如果已完成账户迁移,则可以对相应的事务进行处理,并且对该用户的迁移映射关系进行删除或存储等处理,可以实现跨系统跨数据库的账户实时迁移同步,并可以在业务无损的前提下,保证账户迁移的时效性和一致性。
附图说明
为了更清楚地说明本说明书实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本说明书中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本说明书一种事务的处理方法实施例;
图2为本说明书一种一阶段的处理流程示意图;
图3为本说明书一种二阶段的处理流程示意图;
图4为本说明书另一种事务的处理方法实施例;
图5为本说明书一种事务的处理系统的结构示意图;
图6为本说明书一种事务的处理装置实施例;
图7为本说明书一种事务的处理设备实施例。
具体实施方式
本说明书实施例提供一种事务的处理方法、装置及设备。
为了使本技术领域的人员更好地理解本说明书中的技术方案,下面将结合本说明书实施例中的附图,对本说明书实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本说明书一部分实施例,而不是全部的实施例。基于本说明书中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都应当属于本说明书保护的范围。
实施例一
如图1所示,本说明书实施例提供一种事务的处理方法,该方法的执行主体可以为终端设备或服务器,其中,该终端设备可以如个人计算机等设备,也可以如手机、平板电脑等移动终端设备,该终端设备可以为用户使用的终端设备。该服务器可以是独立的服务器,也可以是由多个服务器组成的服务器集群,而且,该服务器可以是某项或多项业务的后台服务器等。该方法可以用于实现跨系统跨数据库的账户实时迁移,并保证账户迁移的时效性和一致性,且对于业务无损等,本实施例中以服务器为例进行说明,对于终端设备的情况,可以根据下述相关内容处理,在此不再赘述。该方法具体可以包括以下步骤:
在步骤S102中,接收用户的事务处理请求。
其中,用户可以是任意业务的用户,例如,某项理财业务的用户或某网络支付业务的用户等。事务处理请求可以是针对某一项事务所产生的处理该项事务的请求,其中的事物可以是指单个逻辑工作单元执行的一系列操作,要么完整地执行,要么全部不执行,事务处理可以确保事务范围内的所有操作都全部成功,否则不会更新数据库的任何部分数据,通过这种事务操作,可以简化错误恢复的流程,并且可以使得程序的运行更加稳定可靠。
在实施中,随着互联网金融业务的飞速发展,越来越多的业务都有了记账的诉求。通过账务系统维护用户的账户信息,保证线上交易的稳定持续运行,并在核算层面反映真实业务的发生和资金的流转。与此同时,由于架构升级或账户级容灾备份的技术需求,需要在账务系统本身应对大量账户操作请求的同时,完成跨系统跨库级的实时账户迁移,并且保障迁移账户的一致性。例如,用户在通过支付应用(如支付宝等)的账户余额完成线上购物的场景下,利用用户的账户的实时迁移,实现在用户无感知的状况下,将该用户的支付应用的账户余额和冻结余额等数据实时迁移到另一系统(和/或数据库)中,并且保证迁移账户和原账户的一致性。迁移完成后,就能够应对技术架构层面的系统调整或容灾备份的技术要求。
针对上述账户迁移的需求背景,解决方案可以包括多种,例如以下方案一和方案二。
方案一,数据库log文件(即日志文件)同步方式:例如,利用mysql数据库的binlog同步和解析,来实现跨库级的账户数据同步,保证两边账户的一致性。该方案可以实现数据的准实时迁移同步,但要求迁移两边的数据结构相同且账户迁移的时效性无法保障,无法完全避免某一时点上两系统的账户由于log文件的同步时延导致的短期不一致,也即是由于log文件的同步和解析时延,两边账户数据会存在短时间的不一致性,如果线上切流到迁移账户时,恰好两系统的账户的log文件不一致,就可能导致资金损失等问题发生。
方案二,静态数据迁移同步方式:即采用停机的方式,暂停线上业务,利用迁移工具或数据订正等手段完成账户数据的迁移,迁移验证完成后开启线上业务。此方案理论上能够完全保证数据一致性的问题,但对于线上业务可能会存在一定的损失。系统服务在账户迁移期间处于不可用状态,后台型系统或应用也许可以接受短时间内的停机停服务,但是大量前线业务和应用,哪怕是极短时间的停机也会造成严重的社会效应。可见,该方案的适用范围有限,其依赖于业务和应用的类型等。
基于上述内容,本说明书实施例提供一种可以实现跨系统跨数据库的账户实时迁移的一致性解决方案,可以解决账户迁移的时效性和一致性问题,且对业务无损。该方案同时也适用于其他状态类的数据迁移同步,可以作为一种优化、通用的解决方案,该方案具体可以参见下述相关内容。
用户的终端设备中可以安装有能够进行某一项或多项互联网金融业务(如理财业务或在线支付业务等)的应用程序。当用户需要执行或请求某一项金融业务时,可以点击终端设备中安装的该应用程序的快捷图标,终端设备可以启动该应用程序,并通过该应用程序提供的服务器的网络地址向该服务器发送数据获取请求,服务器接收到该数据获取请求后,可以向该终端设备发送该应用程序的首页等相关页面数据,终端设备接收到服务器发送的页面数据后,可以显示该应用程序的相关内面数据。用户可以通过浏览各个页面数据的内容,查找到用户需要办理的业务的相关信息,然后,可以通过查找到的相关信息执行或请求该项业务,此时,终端设备可以获取该用户的账号和/或用户名等相关信息,生成事务处理请求,并可以将该事务处理请求发送给服务器,服务器可以接收到该事务处理请求。
例如,用户需要向另一个账户中进行转账,则用户可以在该应用程序的相关内面数据中查找到转账业务,并通过页面数据中提供的转账业务的业务入口,发起转账事务,此时,终端设备可以获取该用户的账户等相关信息生成转账业务的事务处理请求,并将其发送给服务器。其中,用户向另一个账户中进行转账的处理,至少包括两项业务,即从用户的账户中扣除转账金额和在另一个账户中增加转账金额等,上述两项业务可以组成一个事务,相应的事务处理请求就要求服务器处理上述两项业务。
在步骤S104中,确定预存的迁移映射表中是否存在该用户的迁移映射关系;其中该迁移映射表用于记录用户的账户由第一系统迁移到第二系统的映射关系。
其中,第一系统和第二系统可以是不同的系统,第一系统和第二系统可以存在多种体现方式,例如,第一系统和第二系统可以是两个不同的数据库,或者,第一系统和第二系统可以是两个不同的业务平台等。迁移映射关系可以用于表征用户的账户在两个不同的系统之间进行迁移的映射关系,考虑到用户的账户迁移的目标可以是发生迁移的用户的账号等标识,利用用户在两个不同系统中的账号等标识之间的映射关系作为迁移映射关系,可以实现全局唯一,因此,本说明书实施例中,迁移映射关系可以是用户的不同账号的对应关系,例如,用户在A系统中的账号为111,迁移到B系统的账号可以为222,则该用户的迁移映射关系可以为账号111与账号222的对应关系等。
在实施中,如图2所示,服务器接收到终端设备发送的用户的事务处理请求后,可以执行一阶段请求参数的检查、幂等相关信息的校验等,执行完成后,服务器可以对该用户的账户进行加锁处理,账户加锁完成后,可以对该用户的账户中的资金等相关资源进行预处理。上述预处理完成后,服务器可以对该事务处理请求对应的相关事务进行分析,确定是否需要对该用户的账户进行实时迁移,如果确定不需要对用户的账户进行实时迁移,则服务器可以通过自身的相关服务程序对该事务处理请求进行响应,即可以根据该事务处理请求对相应的事务进行处理,处理完成后,可以向终端设备发送处理结果的通知消息。如果服务器确定该事务处理请求对应的相关事务涉及多个不同系统的用户事务(例如,对某一个系统的某一个操作可能会触发另一个系统的某一个操作,而该另一个系统可能又进一步触发其它系统的操作等),此时就需要对用户的账户进行实时迁移。为了实现跨系统跨数据库的账户实时迁移,并且在进行用户的账户迁移的过程中保证账户迁移的时效性和一致性,可以在服务器中设置迁移映射表,通过该迁移映射表可以记录用户的账户由第一系统迁移到第二系统的映射关系。该迁移映射表中记录的迁移映射关系可以用于表征相应的用户的账户是否完成或实现了由一个系统迁移到另一个系统(或者,由一个数据库迁移到另一个数据库等),如果某用户的账户完成或实现了由一个系统迁移到另一个系统,即该迁移映射表中记录有该用户的迁移映射关系,则可以执行下述步骤S106的相关处理,如果某用户的账户未完成或未实现由一个系统迁移到另一个系统,即该迁移映射表中未记录该用户的迁移映射关系,则可以生成该用户的迁移映射关系,并将该用户的迁移映射关系插入到迁移映射表中,即执行下述步骤S108的相关处理,为此,在根据上述事务处理请求对相应的事务进行处理之前,需要确定预存的迁移映射表中是否存在该用户的迁移映射关系,具体确定过程可以通过判断迁移映射表中存储的迁移映射关系中是否存在该用户的账号等。
在步骤S106中,若确定预存的迁移映射表中存在该用户的迁移映射关系,则根据上述事务处理请求对相应的事务进行处理。
在实施中,如果通过上述步骤S104的处理,确定预存的迁移映射表中是否存在该用户的迁移映射关系,也即是该用户的账户完成或实现了由一个系统迁移到另一个系统的处理,则可以对已经完成迁移的两个系统中该用户的账户分别执行一阶段请求,例如,该用户在A系统中的账号为111,迁移到B系统的账号可以为222,则可以通过A系统中的账号111执行一阶段请求,同时,可以通过B系统中的账号222执行一阶段请求。上述处理执行完成后,如图3所示,还可以执行二阶段请求,并对该用户的账户进行加锁处理,上述处理完成后,可以根据事务处理请求对相应的事务进行处理,得到最终的处理结果。
在步骤S108中,若确定预存的迁移映射表中不存在该用户的迁移映射关系,则在迁移映射表中生成该用户的迁移映射关系,并根据上述事务处理请求对相应的事务进行处理。
在实施中,如果确定预存的迁移映射表中不存在该用户的迁移映射关系,或者,该用户不为上述迁移映射表中的用户,则可以表明该用户是首次进行账户迁移的用户,此时,服务器可以为该用户在账户迁移的目的系统中创建一个账号,同时,服务器还可以获取该用户在当前系统中的账号,可以根据该用户在当前系统中的账号和创建的账号,生成该用户的迁移映射关系。服务器生成该用户的迁移映射关系后,可以对该用户的账户进行迁移和迁移同步处理,然后,可以对已经完成迁移的两个系统中该用户的账户分别执行一阶段请求。上述处理执行完成后,如图3所示,还可以执行二阶段请求,并对该用户的账户进行加锁处理,上述处理完成后,可以根据事务处理请求对相应的事务进行处理,得到最终的处理结果。
需要说明的是,为了保证账户迁移的时效性和一致性,上述步骤S106和步骤S108中根据上述事务处理请求对相应的事务进行处理的过程还可以包括以下内容:可以根据上述事务的处理结果或事务的处理状态,确定该用户的迁移映射关系是否保留,如若事务处理请求对应的事务的处理状态为回滚,则可以删除上述迁移映射表中的该用户的迁移映射关系,保证后续事务处理请求到来的时候会触发用户的账户迁移。若事务处理请求对应的事务的处理状态为提交,则可以存储该用户的迁移映射关系。
本说明书实施例提供一种事务的处理方法,通过在接收到用户的事务处理请求时,确定预存的迁移映射表中是否存在该用户的迁移映射关系,其中,该迁移映射表用于记录用户的账户由第一系统迁移到第二系统的映射关系,如果确定迁移映射表中存在该用户的迁移映射关系,则根据事务处理请求对相应的事务进行处理,如果确定迁移映射表中不存在该用户的迁移映射关系,则在迁移映射表中生成该用户的迁移映射关系,并根据该事务处理请求对相应的事务进行处理,这样,通过记录的用户的账户由第一系统迁移到第二系统的映射关系(即用户的迁移映射关系)来判定用户当前是否已完成账户迁移和迁移同步,对于未进行账户迁移的用户,可以生成该用户的迁移映射关系,并可以进行账户迁移,如果已完成账户迁移,则可以对相应的事务进行处理,并且对该用户的迁移映射关系进行删除或存储等处理,可以实现跨系统跨数据库的账户实时迁移同步,并可以在业务无损的前提下,保证账户迁移的时效性和一致性。
实施例二
如图4所示,本说明书实施例提供一种事务的处理方法,该方法的执行主体可以为终端设备或服务器,其中,该终端设备可以如个人计算机等设备,也可以如手机、平板电脑等移动终端设备,该终端设备可以为用户使用的终端设备。该服务器可以是独立的服务器,也可以是由多个服务器组成的服务器集群,而且,该服务器可以是某项或多项业务的后台服务器等。该方法可以用于实现跨系统跨数据库的账户实时迁移,并保证账户迁移的时效性和一致性,且对于业务无损等,本实施例中以服务器为例进行说明,对于终端设备的情况,可以根据下述相关内容处理,在此不再赘述。该方法具体可以包括以下步骤:
在步骤S402中,接收用户的事务处理请求。
其中,该事务处理请求对应的事务可以为基于嵌套关系的分布式事务,其中的分布式事务可以是指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上,从本质上来说,分布式事务就是为了保证不同数据库的数据一致性。基于嵌套关系的事务可以是指间接涉及多个系统(或服务器)的事务,如图5所示,在某些情况下,一个系统(或服务器)中的某一个操作可能会触发另一个系统(或服务器)的某一个操作,而通常另一个系统(或服务器)还可能会进一步请求其它系统(或服务器)的某一个操作,依此类推,这样,每个事务可以由一系列嵌套事务构成,而事务可以由嵌套事务的层次结构组成,相同层次的嵌套事务间可以进行并发执行,例如,服务器A上的一个事务P调用服务器B和服务器C上的操作,形成嵌套事务P1和P2,而嵌套事务P1又需要调用服务器D和服务器E上的操作,形成深层嵌套事务P11和P12,类似地,嵌套事务P2需要调用服务器F和服务器G上的操作,形成深层嵌套事务P21和P22等。
上述步骤S402的步骤内容与上述实施例一中的步骤S102的步骤内容相同,上述步骤S402的具体处理过程可以参见上述步骤S102中的相关内容,在此不再赘述。
在步骤S404中,确定预存的迁移映射表中是否存在上述用户的迁移映射关系;其中该迁移映射表用于记录用户的账户由第一系统迁移到第二系统的映射关系。
在实施中,服务器接收到终端设备发送的用户的事务处理请求后,可以执行一阶段请求参数的检查、幂等相关信息的校验等处理,并对该用户的账户进行加锁处理,以及对该用户的账户中的资金等相关资源进行预处理等,具体可以参见上述实施例一或图2中的相关内容,在此不再赘述。上述处理完成后,可以触发服务器开启基于嵌套关系的分布式事务。为了在实现账户迁移的同时保证账户迁移前后用户账户的一致性,需要基于某个维度判定是否该用户的事务处理请求针对的账户已经完成了迁移同步,该判定处理过程可以包括多个方面的有益效果,以下提供两个方面的有益效果:一方面,可以作为是否发生首次迁移同步的唯一判定标准;另一方面,也可以避免多次进行迁移同步而导致用户账户的不一致性。而该判定维度可以是发生账户迁移的两个不同系统中的用户账号,可以将两个系统之间用户的账号之间的映射关系(即用户的迁移映射关系)作为上述判定处理过程的依据。用户的迁移映射关系可以通过表格的形式存储,可以参见下述表1。
表1
账户迁移前 |
账户迁移后 |
系统A,账号111 |
系统B,账号222 |
系统K,账号abc |
系统L,账号zzz |
系统A,账号111 |
系统M,账号p001 |
对于相同的两个系统之间,同一用户的迁移映射关系可以只包含一个,例如,如表1中,用户在系统A和系统B之间只存在一个迁移映射关系,即账号111与账号222的对应关系,这样可以避免相同的两个系统之间存在多个不同的同一用户的迁移映射关系,而使得后续事务处理出现错误或混乱。
上述步骤S404的具体处理过程可以参见上述实施例一中的步骤S104的相关内容,在此不再赘述。
如果服务器确定预存的迁移映射表中存在该用户的迁移映射关系,则可以执行下述步骤S406的处理,如果服务器确定预存的迁移映射表中不存在该用户的迁移映射关系,或者,该用户不为上述迁移映射表中的用户,则可以执行下述步骤S408的处理。
在步骤S406中,若确定预存的迁移映射表中存在该用户的迁移映射关系,则根据上述事务处理请求对相应的事务进行处理。
上述步骤S406的步骤内容与上述实施例一中的步骤S106的部分步骤内容相同,上述步骤S406的具体处理过程可以参见上述步骤S106中的相关内容或可以参见上述图2和图3中的处理过程,在此不再赘述。
服务器根据上述事务处理请求对相应的事务进行处理完成后,可以继续执行下述步骤S414或步骤S416的处理,以完成对上述事务处理请求的响应。
在步骤S408中,若确定预存的迁移映射表中不存在该用户的迁移映射关系,则在该迁移映射表中生成该用户的迁移映射关系。
在实施中,如果确定该用户不为上述迁移映射表中的用户,或者,预存的迁移映射表中不存在该用户的迁移映射关系,则可以表明该用户是首次进行账户迁移的用户,此时,服务器可以为该用户在账户迁移的目的系统中创建一个账号,同时,服务器还可以获取该用户在当前系统中的账号,可以根据该用户在当前系统中的账号和创建的账号,生成该用户的迁移映射关系。服务器生成该用户的迁移映射关系后,可以对两个系统中该用户的账户进行迁移同步处理,具体可以参见下述步骤S410的处理。
在步骤S410中,对上述事务处理请求触发的该用户的账户迁移进行迁移同步处理。
在实施中,服务器在确定该用户是首次进行账户迁移的用户,则可以为该用户在账户迁移的目的系统中进行开户处理,其中开户处理可以包括记录该用户的个人信息,并为该用户创建一个账号等。上述开户处理完成后,服务器可以对两个不同系统的用户账户中的余额资源等相关数据进行同步,同时,还可以对两个不同系统的用户账户中的余额资源等进行冻结等相关处理,从而避免在进行同步的过程中,某一个系统对用户账户中的余额资源发生变化而使得上述同步处理出现错误的情况。服务器完成上述相关处理后,可以将该用户的迁移映射关系插入到上述迁移映射表中,这样,如果某用户的账户发生了迁移,并进行了账户迁移同步,则在一阶段就会把该用户的迁移映射关系插入到迁移映射表中。
服务器在完成上述迁移同步处理后,可以根据上述事务处理请求对相应的事务进行处理,具体可以参见下述步骤S412的处理。
在步骤S412中,在迁移同步处理后,分别对第一系统与第二系统中的该用户的账户执行上述事务处理请求,以对上述事务进行处理。
在实施中,在迁移同步处理后,服务器可以对已经完成迁移的两个系统中该用户的账户分别执行一阶段请求,例如,如上述表1所示,该用户在K系统中的账号为abc,迁移到L系统的账号为zzz,则可以通过K系统中的账号abc执行一阶段请求,同时,还可以通过L系统中的账号zzz执行一阶段请求。一阶段请求执行完成后,可以执行二阶段请求,并对该用户的账户进行加锁处理,上述处理完成后,可以获取事务处理请求对应的事务的处理状态的信息,该处理状态的信息可以包括回滚和提交。可以根据事务的处理状态,对上述迁移映射表中的该用户的映射关系进行删除或存储处理,具体可以参见下述步骤S414和步骤S416的处理。
在步骤S414中,如果上述事务的处理状态为回滚,则删除该用户的迁移映射关系。
在实施中,如果事务处理请求对应的事务的处理状态为回滚,则表明事务处理请求对应的事务中的某一个环节出现错误或处理失败,此时,服务器可以确定该事务处理失败,可以将用户的账户恢复到该事务处理之前的状态,即可以回滚用户账户迁移的操作,并可以删除上述迁移映射表中的该用户的迁移映射关系,保证后续事务处理请求到来的时候会触发用户的账户迁移。其中,回滚用户账户迁移的操作的处理可以包括还原一阶段预留的资源(如资金等),然后,可以对该事务中存在嵌套关系的系统分别进行回滚,以将存在嵌套关系的系统恢复到账户迁移之前的状态。这样,如果整个基于嵌套关系的分布式事务发生回滚,则回滚时不仅仅需要回滚迁移账户的操作,还需要删除该用户的迁移映射关系,保证后续事务处理请求到来时会触发用户的账户迁移和账户迁移同步。
通过上述步骤S408~步骤S414的处理,服务器可以在一阶段就将用户的迁移映射关系插入到迁移映射表中,二阶段回滚时再删掉该用户的迁移映射关系。而如果换一种处理方式,即在二阶段提交时才将用户的迁移映射关系插入到迁移映射表中,就可能会导致用户账户不一致的问题出现,例如,针对同一账号的两个事务处理请求以先后顺序进入一阶段,第一个事务处理请求如果依据用户的迁移映射关系记录判定在当前时刻之前该用户的账户未发生迁移和迁移同步,则服务器可以实施图2中的处理,最终完成余额的同步后一阶段成功;如果第二个事务处理请求进入一阶段时,第一个事务处理请求还未进入二阶段,则由于该用户的迁移映射关系还未生成,从而可能导致后续进行重复的账户迁移和迁移同步处理,使得两次开户后得到的账号等信息不一致。
在步骤S416中,如果上述事务的处理状态为提交,则存储该用户的迁移映射关系。
在实施中,如果事务处理请求对应的事务的处理状态为提交,则表明事务处理请求对应的事务处理成功,此时,服务器可以使用上述一阶段预留的资源完成账户的相关操作,然后,可以指示该事务中存在嵌套关系的系统进行提交,存在嵌套关系的系统完成提交后,服务器可以保留上述迁移映射表中的该用户的迁移映射关系,并可以向终端设备发送事务处理成功的通知消息。
通过上述步骤S402~步骤S416的处理,可以在不影响实际业务发生的背景下,实现跨系统跨库的账户实时迁移的一致性,可以在业务无损的前提下保证账户迁移的时效性和一致性,为了充分说明上述效果,可以通过不同的场景进行详细说明,具体可以参见下述内容:
情况一,针对同一账户的两个事务处理请求以先后顺序到达的情况,如果第一个事务处理请求在一阶段发生失败,针对同一账户的请求操作,由于在一阶段都会现针对用户的账户进行加锁处理,因此,当第一个事务处理请求在一阶段发生失败时,第一个事务处理请求对应的事务回滚,从而导致该用户的迁移映射关系删除。当第二个事务处理请求进入一阶段时,由于迁移映射表中不存在该用户的迁移映射关系,因此,服务器可以判定该用户的账户未发生迁移,这样,得到的最终结果符合预期结果。
情况二,针对同一账户的两个事务处理请求以先后顺序到达的情况,如果第一个事务处理请求在一阶段成功,并在二阶段也成功,则第一个事务处理请求在一阶段和二阶段成功,意味着该用户的迁移映射关系已存在于迁移映射表中。当接收到第二个事务处理请求时,该用户的账户会被判定为已发生账户迁移,此时,服务器不会再进行账户迁移和迁移同步,而直接将该第二个事务处理请求应用到迁移账户上(即分别对第一系统与第二系统中的该用户的账户执行第二个事务处理请求),这样,得到的最终结果符合预期结果。
情况三,针对同一账户的两个事务处理请求以先后顺序到达的情况,如果第一个事务处理请求在一阶段成功,但二阶段发生回滚,则由于第一个事务处理请求在一阶段成功,因此,该用户的迁移映射关系已存在于迁移映射表中。此时,如果第一个事务处理请求的二阶段还未执行,而第二个事务处理请求已进入一阶段,此时,服务器可以根据迁移映射表中的该用户的迁移映射关系判定该用户的账户已完成迁移和迁移同步,则直接将该第二个事务处理请求应用到迁移账户上(即分别对第一系统与第二系统中的该用户的账户执行第二个事务处理请求),对于上述处理还可能存在两种不同的情况,可以参见下述情况1和情况2:
情况1:如果第二个事务处理请求为充值请求,则该第二个事务处理请求可以成功执行,并可以等待下一个针对同一个账号的事务处理请求来完成首次的账户迁移和迁移同步。
情况2:如果第二个事务处理请求为扣减请求,则该第二个事务处理请求在一阶段发生失败,此时,可以通过上游系统提供的重试提醒,引导该用户重新发起事务处理请求。
本说明书实施例提供一种事务的处理方法,通过在接收到用户的事务处理请求时,确定预存的迁移映射表中是否存在该用户的迁移映射关系,其中,该迁移映射表用于记录用户的账户由第一系统迁移到第二系统的映射关系,如果确定迁移映射表中存在该用户的迁移映射关系,则根据事务处理请求对相应的事务进行处理,如果确定迁移映射表中不存在该用户的迁移映射关系,则在迁移映射表中生成该用户的迁移映射关系,并根据该事务处理请求对相应的事务进行处理,这样,通过记录的用户的账户由第一系统迁移到第二系统的映射关系(即用户的迁移映射关系)来判定用户当前是否已完成账户迁移和迁移同步,对于未进行账户迁移的用户,可以生成该用户的迁移映射关系,并可以进行账户迁移,如果已完成账户迁移,则可以对相应的事务进行处理,并且对该用户的迁移映射关系进行删除或存储等处理,可以实现跨系统跨数据库的账户实时迁移同步,并可以在业务无损的前提下,保证账户迁移的时效性和一致性。
实施例三
以上为本说明书实施例提供的事务的处理方法,基于同样的思路,本说明书实施例还提供一种事务的处理装置,如图6所示。
该事务的处理装置包括:请求接收模块601、判断模块602和事务处理模块603,其中:
请求接收模块601,用于接收用户的事务处理请求;
判断模块602,用于确定预存的迁移映射表中是否存在所述用户的迁移映射关系;其中所述迁移映射表用于记录用户的账户由第一系统迁移到第二系统的映射关系;
事务处理模块603,用于若是,则根据所述事务处理请求对相应的事务进行处理,根据所述事务的处理状态;若否,则在所述迁移映射表中生成所述用户的迁移映射关系,并根据所述事务处理请求对相应的事务进行处理。
本说明书实施例中,所述装置还包括:
迁移映射处理模块,用于根据所述事务的处理状态,对所述迁移映射表中的所述用户的迁移映射关系进行删除或存储处理。
本说明书实施例中,所述迁移映射处理模块,用于如果所述事务的处理状态为回滚,则删除所述用户的迁移映射关系;如果所述事务的处理状态为提交,则存储所述用户的迁移映射关系。
本说明书实施例中,所述装置还包括:
迁移同步模块,用于对所述事务处理请求触发的所述用户的账户迁移进行迁移同步处理;
所述事务处理模块,用于在迁移同步处理后,分别对第一系统与第二系统中的所述用户的账户执行所述事务处理请求,以对所述事务进行处理。
本说明书实施例中,所述事务处理请求对应的事务为基于嵌套关系的分布式事务。
本说明书实施例提供一种事务的处理装置,通过在接收到用户的事务处理请求时,确定预存的迁移映射表中是否存在该用户的迁移映射关系,其中,该迁移映射表用于记录用户的账户由第一系统迁移到第二系统的映射关系,如果确定迁移映射表中存在该用户的迁移映射关系,则根据事务处理请求对相应的事务进行处理,如果确定迁移映射表中不存在该用户的迁移映射关系,则在迁移映射表中生成该用户的迁移映射关系,并根据该事务处理请求对相应的事务进行处理,这样,通过记录的用户的账户由第一系统迁移到第二系统的映射关系(即用户的迁移映射关系)来判定用户当前是否已完成账户迁移和迁移同步,对于未进行账户迁移的用户,可以生成该用户的迁移映射关系,并可以进行账户迁移,如果已完成账户迁移,则可以对相应的事务进行处理,并且对该用户的迁移映射关系进行删除或存储等处理,可以实现跨系统跨数据库的账户实时迁移同步,并可以在业务无损的前提下,保证账户迁移的时效性和一致性。
实施例四
以上为本说明书实施例提供的事务的处理装置,基于同样的思路,本说明书实施例还提供一种事务的处理设备,如图7所示。
所述事务的处理设备可以为上述实施例提供的终端设备或服务器。
事务的处理设备可因配置或性能不同而产生比较大的差异,可以包括一个或一个以上的处理器701和存储器702,存储器702中可以存储有一个或一个以上存储应用程序或数据。其中,存储器702可以是短暂存储或持久存储。存储在存储器702的应用程序可以包括一个或一个以上模块(图示未示出),每个模块可以包括对事务的处理设备中的一系列计算机可执行指令。更进一步地,处理器701可以设置为与存储器702通信,在事务的处理设备上执行存储器702中的一系列计算机可执行指令。事务的处理设备还可以包括一个或一个以上电源703,一个或一个以上有线或无线网络接口704,一个或一个以上输入输出接口705,一个或一个以上键盘706。
具体在本实施例中,事务的处理设备包括有存储器,以及一个或一个以上的程序,其中一个或者一个以上程序存储于存储器中,且一个或者一个以上程序可以包括一个或一个以上模块,且每个模块可以包括对事务的处理设备中的一系列计算机可执行指令,且经配置以由一个或者一个以上处理器执行该一个或者一个以上程序包含用于进行以下计算机可执行指令:
接收用户的事务处理请求;
确定预存的迁移映射表中是否存在所述用户的迁移映射关系;其中所述迁移映射表用于记录用户的账户由第一系统迁移到第二系统的映射关系;
若是,则根据所述事务处理请求对相应的事务进行处理;若否,则在所述迁移映射表中生成所述用户的迁移映射关系,并根据所述事务处理请求对相应的事务进行处理。
可选地,在所述迁移映射表中生成所述用户的迁移映射关系,并根据所述事务处理请求对相应的事务进行处理之后,还包括:
根据所述事务的处理状态,对所述迁移映射表中的所述用户的迁移映射关系进行删除或存储处理。
可选地,所述根据所述事务的处理状态,对所述用户标识映射关系进行删除或存储处理,包括:
如果所述事务的处理状态为回滚,则删除所述用户的迁移映射关系;
如果所述事务的处理状态为提交,则存储所述用户的迁移映射关系。
可选地,所述在所述迁移映射表中生成所述用户的迁移映射关系之后,所述方法还包括:
对所述事务处理请求触发的所述用户的账户迁移进行迁移同步处理;
在迁移同步处理后,分别对第一系统与第二系统中的所述用户的账户执行所述事务处理请求,以对所述事务进行处理。
可选地,所述事务处理请求对应的事务为基于嵌套关系的分布式事务。
本说明书实施例提供一种事务的处理设备,通过在接收到用户的事务处理请求时,确定预存的迁移映射表中是否存在该用户的迁移映射关系,其中,该迁移映射表用于记录用户的账户由第一系统迁移到第二系统的映射关系,如果确定迁移映射表中存在该用户的迁移映射关系,则根据事务处理请求对相应的事务进行处理,如果确定迁移映射表中不存在该用户的迁移映射关系,则在迁移映射表中生成该用户的迁移映射关系,并根据该事务处理请求对相应的事务进行处理,这样,通过记录的用户的账户由第一系统迁移到第二系统的映射关系(即用户的迁移映射关系)来判定用户当前是否已完成账户迁移和迁移同步,对于未进行账户迁移的用户,可以生成该用户的迁移映射关系,并可以进行账户迁移,如果已完成账户迁移,则可以对相应的事务进行处理,并且对该用户的迁移映射关系进行删除或存储等处理,可以实现跨系统跨数据库的账户实时迁移同步,并可以在业务无损的前提下,保证账户迁移的时效性和一致性。
上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
在20世纪90年代,对于一个技术的改进可以很明显地区分是硬件上的改进(例如,对二极管、晶体管、开关等电路结构的改进)还是软件上的改进(对于方法流程的改进)。然而,随着技术的发展,当今的很多方法流程的改进已经可以视为硬件电路结构的直接改进。设计人员几乎都通过将改进的方法流程编程到硬件电路中来得到相应的硬件电路结构。因此,不能说一个方法流程的改进就不能用硬件实体模块来实现。例如,可编程逻辑器件(Programmable Logic Device,PLD)(例如现场可编程门阵列(Field Programmable GateArray,FPGA))就是这样一种集成电路,其逻辑功能由用户对器件编程来确定。由设计人员自行编程来把一个数字系统“集成”在一片PLD上,而不需要请芯片制造厂商来设计和制作专用的集成电路芯片。而且,如今,取代手工地制作集成电路芯片,这种编程也多半改用“逻辑编译器(logic compiler)”软件来实现,它与程序开发撰写时所用的软件编译器相类似,而要编译之前的原始代码也得用特定的编程语言来撰写,此称之为硬件描述语言(Hardware Description Language,HDL),而HDL也并非仅有一种,而是有许多种,如ABEL(Advanced Boolean Expression Language)、AHDL(Altera Hardware DescriptionLanguage)、Confluence、CUPL(Cornell University Programming Language)、HDCal、JHDL(Java Hardware Description Language)、Lava、Lola、MyHDL、PALASM、RHDL(RubyHardware Description Language)等,目前最普遍使用的是VHDL(Very-High-SpeedIntegrated Circuit Hardware Description Language)与Verilog。本领域技术人员也应该清楚,只需要将方法流程用上述几种硬件描述语言稍作逻辑编程并编程到集成电路中,就可以很容易得到实现该逻辑方法流程的硬件电路。
控制器可以按任何适当的方式实现,例如,控制器可以采取例如微处理器或处理器以及存储可由该(微)处理器执行的计算机可读程序代码(例如软件或固件)的计算机可读介质、逻辑门、开关、专用集成电路(Application Specific Integrated Circuit,ASIC)、可编程逻辑控制器和嵌入微控制器的形式,控制器的例子包括但不限于以下微控制器:ARC 625D、Atmel AT91SAM、Microchip PIC18F26K20以及Silicone Labs C8051F320,存储器控制器还可以被实现为存储器的控制逻辑的一部分。本领域技术人员也知道,除了以纯计算机可读程序代码方式实现控制器以外,完全可以通过将方法步骤进行逻辑编程来使得控制器以逻辑门、开关、专用集成电路、可编程逻辑控制器和嵌入微控制器等的形式来实现相同功能。因此这种控制器可以被认为是一种硬件部件,而对其内包括的用于实现各种功能的装置也可以视为硬件部件内的结构。或者甚至,可以将用于实现各种功能的装置视为既可以是实现方法的软件模块又可以是硬件部件内的结构。
上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机。具体的,计算机例如可以为个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任何设备的组合。
为了描述的方便,描述以上装置时以功能分为各种单元分别描述。当然,在实施本说明书一个或多个实施例时可以把各单元的功能在同一个或多个软件和/或硬件中实现。
本领域内的技术人员应明白,本说明书的实施例可提供为方法、系统、或计算机程序产品。因此,本说明书一个或多个实施例可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本说明书一个或多个实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本说明书的实施例是参照根据本说明书实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
本领域技术人员应明白,本说明书的实施例可提供为方法、系统或计算机程序产品。因此,本说明书一个或多个实施例可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本说明书一个或多个实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本说明书一个或多个实施例可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本说明书一个或多个实施例,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
以上所述仅为本说明书的实施例而已,并不用于限制本说明书。对于本领域技术人员来说,本说明书可以有各种更改和变化。凡在本说明书的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本说明书的权利要求范围之内。