一种分布式事物处理的方法、装置及系统与流程

文档序号:11654258阅读:188来源:国知局
一种分布式事物处理的方法、装置及系统与流程
本申请涉及通信
技术领域
,特别涉及一种分布式事物处理的方法、装置及系统。
背景技术
:为了完成网商银行的一项业务,往往需要调用多个子系统,因此子系统间的依赖关系比较复杂,而子系统之间的依赖越多,每个子系统的可用性就越重要,如果整个系统中涉及的某一个子系统无法提供服务,则可能导致整个业务无法完成,降低了整个系统的可用性。可以参见图1所示为现有技术的上游子系统和下游子系统之间发送消息的示意图,在该图中上游子系统例如可以为支付系统,下游子系统例如可以为发货系统,当用户在支付系统完成支付后,由支付系统通过中间的消息系统通知发货系统进行发货,如果中间的消息系统出现问题,或者发货系统出现问题,则可能导致该发货业务无法完成,整个系统的可用性较低。技术实现要素:为了解决现有技术中由于某个子系统出现问题不能提供服务,导致整个系统可用性低的问题,提供了一种分布式事物处理的方法、装置及系统,通过将通知消息存储于上游子系统的数据库中,通过中间件定时将数据库中新的通知消息发送给下游子系统,从而避免了现有技术中对每个子系统可用性要求过高的问题。本申请实施例提供了一种分布式事物处理方法,包括:根据上游子系统的业务处理结果,生成通知消息;将所述通知消息存储于数据库中。本申请实施例还提供了一种分布式事物处理方法,包括:定时扫描存储有上游子系统生成的通知消息的数据库;将所述数据库中新加入的通知消息发送给相应的下游子系统;接收所述下游子系统返回的对所述通知消息的处理结果;根据所述处理结果对所述数据库中相应的通知消息进行处理。本申请实施例还提供了一种上游子系统,包括,生成单元,用于根据上游子系统的业务处理结果,生成通知消息;存储单元,用于将所述通知消息存储于数据库中。本申请实施例还提供了一种同步装置,包括:扫描单元,用于定时扫描存储有上游子系统生成的通知消息的数据库;发送单元,用于将所述数据库中新加入的通知消息发送给相应的下游子系统;接收单元,用于接收所述下游子系统返回的对所述通知消息的处理结果;处理单元,用于根据所述处理结果对所述数据库中相应的通知消息进行处理。本申请实施例还提供了一种分布式事物处理系统,包括:上游子系统,用于根据上游子系统的业务处理结果,生成通知消息,并将所述通知消息存储于数据库中;同步装置,用于定时扫描存储有上游子系统生成的通知消息的数据库,将所述数据库中新加入的通知消息发送给相应的下游子系统,接收所述下游子系统返回的对所述通知消息的处理结果,并根据所述处理结果对所述数据库中相应的通知消息进行处理。由以上本申请实施例提供的技术方案可见,将通知消息存储在上游子系统中,令同步装置定时获取通知消息,并将该通知消息发送给下游子系统,实现了上游子系统和下游子系统之间的隔离,提高了整个分布式事务处理系统的可用性,即便下游子系统不能工作,也可以在恢复正常后通过同步装置自动查询通知消息,并进行同步,还可以减少对每个上游子系统和下游子系统之间通信的编码成本。当然实施本申请的任一产品或者方法必不一定需要同时达到以上所述的所有优点。附图说明为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。图1所示为本申请实施例一种分布式事物处理方法的流程图;图2所示为本申请实施例一种分布式事物处理方法的流程图;图3所示为本申请实施例一种上游子系统结构示意图;图4所示为本申请实施例一种同步装置结构示意图;图5所示为本申请实施例一种分布式事物处理系统的结构示意图;图6所示为本申请实施例一种分布式事物处理系统的具体数据流图。具体实施方式本申请实施例提供一种分布式事物处理的方法、装置及系统。为了使本
技术领域
的人员更好地理解本申请中的技术方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都应当属于本申请保护的范围。如图1所示为本申请实施例一种分布式事物处理方法的流程图,在本图中描述了上游子系统将通知消息存储于本地数据库中,以供同步装置查询访问,从而确保了整个系统高可用性的目的,该方法主要在上游子系统中执行。在本实施例的方法中具体包括,步骤101,根据上游子系统的业务处理结果,生成通知消息。步骤102,将所述通知消息存储于数据库中。作为本申请的一个实施例,所述通知消息包括通知编号和通知内容,或者其它能够唯一标识该通知消息的标记。其中,所述通知编号是用于唯一确定通知消息的信息,所述通知内容中进一步包括订单号、时间、业务数据以及业务处理结果。所述业务处理结果例如为下单是否成功、支付业务是否成功的结果信息。作为本申请的一个实施例,所述数据库可以是上游子系统的本地数据库,或者所述数据库可以独立于上游子系统单独存在的数据库服务器。通过上述本申请实施例中的方法,可以通过数据库的方式将上游子系统生成的通知消息进行存储,并不直接将该通知消息发送给下游子系统或者中间的消息系统,这样可以节省针对各个上游子系统向下游子系统发送消息的编码成本,并且通过数据库存储通知消息的手段,可以保证各个子系统之间(包括上游子系统、下游子系统)数据的正确性,也就是保证了数据库的acid:原子性(atomicity)、一致性(consistency)、隔离性(isolation)、持久性(durability),从而保证整个业务过程的稳定性和数据安全性。如图2所示为本申请实施例一种分布式事物处理方法的流程图,在本图中描述了同步装置在上游子系统和下游子系统之间进行数据同步的过程,该同步装置通过检测上游子系统更新的数据库中的通知信息,将新的通知信息同步给下游子系统,并根据下游子系统的处理结果反馈删除所述数据库中的相应通知消息,从而对所述数据库进行维护,通过这样的手段即便是下游子系统出现问题无法进行后继业务,或者同步装置出现问题无法向下游子系统同步通知消息,只要下游子系统恢复正常或者同步装置恢复就可以继续同步通知消息以完成相关 业务。该方法具体包括步骤201,定时扫描存储有上游子系统生成的通知消息的数据库。步骤202,将所述数据库中新加入的通知消息发送给相应的下游子系统。步骤203,接收所述下游子系统返回的对所述通知消息的处理结果。步骤204,根据所述处理结果对所述数据库中相应的通知消息进行处理。作为本申请的一个实施例,所述通知消息包括通知编号和通知内容,或者其它能够唯一标识该通知消息的标记。作为本申请的一个实施例,根据所述处理结果对所述数据库中相应的通知消息进行处理进一步包括,若所述处理结果为处理成功,则删除所述数据库中相应的通知消息,若在一预定时间内没有接收到所述处理结果,则重复将所述通知消息发送给相应的下游子系统。其中,所述处理结果为处理成功或者处理不成功,均可以使用例如0、1等标识符来表示,或者还可以采用其它字符串进行表示,在此不作限定。作为本申请的一个实施例,所述处理结果中还包括有通知编号,根据所述通知编号匹配得到数据库中相应的通知消息。作为本申请的一个实施例,将所述数据库中的通知消息发送给相应的下游子系统进一步包括,根据所述数据库中通知消息的标志位,来判断所述通知消息是否为新加入的通知消息,并修改已发送通知消息的标志位。其中,可以采用多状态的标志位来标识新写入的通知消息,例如在上游子系统在数据库中写入通知消息时,将该通知消息的标志位标记为0,当同步装置扫描得到所有标志位为0的通知消息后,向下游子系统进行同步时,将相应的通知消息的标志位改为1,如果收到下游子系统处理成功的信息后,将这些通知消息的标志位改为2,并删除标志位为2的通知消息,如果没有接收到处理成功的信息,则重复向下游子系统同步标志位为1的通知消息,当再次扫描数据库时,同样将标志位为0的通知消息作为新写入的通知消息,将这些新写入的通知消息向下游子系统进行同步,在上述的预定时间内不会再次重发标志位为1的处理失败的通知消息,只有等到预定时间之后,例如5秒之后,重复发送该标志位为1的通知消息到下游子系统。通过上述本申请实施例的方法,可以从上游子系统的数据库中获取通知消息,并不依赖下游子系统或者同步装置是否可用,当下游子系统和同步装置正常时就可以从数据库中获得通知消息,使得上游子系统和中间的同步装置以及下游子系统隔离,减少了子系统之间的依赖性,提高了整个系统的可用性,并且对于新增的上游子系统也可以节省上游子系统和下游子系统之间通信的编码成本。如图3所示为本申请实施例一种上游子系统结构示意图,在本图中描述了上游子系统将通知消息存储于本地数据库中,以供同步装置查询访问,从而确保了整个系统的高可用性的目的,在本实施例中上游子系统可以为任何业务子系统,例如支付业务子系统、订单子系统、发货子系统等等,该上游子系统中的各个功能模块可以由计算机或者计算机集群来实现,或者通过专用的可编程逻辑器件等芯片来实现,其中的数据库可以与上游子系统集成在一起,或者单独设立,运行于不同的计算机或者计算机集群。该上游子系统具体包括生成单元301,用于根据上游子系统的业务处理结果,生成通知消息。存储单元302,用于将所述通知消息存储于数据库中。作为本申请的一个实施例,所述通知消息包括通知编号和通知内容,或者其它能够唯一标识该通知消息的标记。通过上述本申请实施例中的上游子系统,可以通过数据库的方式将上游子系统生成的通知消息进行存储,并不直接将该通知消息发送给下游子系统或者中间的消息系统,这样可以节省针对各个上游子系统向下游子系统发送消息的编码成本,并且通过数据库存储通知消息的手段,可以保证各个子系统之间的acid,从而保证整个业务过程的稳定性和数据安全性。如图4所示为本申请实施例一种同步装置结构示意图,在本图中描述了同步上游子系统和下游子系统之间通信消息的同步装置,该同步装置可以与上游子系统结合在一起,或者单独位于不同的计算机或者计算机集群,该同步装置中的各个功能模块均可以由计算机实现,或者可以由可编程逻辑器件等芯片实现。具体包括扫描单元401,用于定时扫描存储有上游子系统生成的通知消息的数据库。发送单元402,用于将所述数据库中新加入的通知消息发送给相应的下游子系统。接收单元403,用于接收所述下游子系统返回的对所述通知消息的处理结果。处理单元404,用于根据所述处理结果对所述数据库中相应的通知消息进行处理。作为本申请的一个实施例,所述通知消息包括通知编号和通知内容,或者其它能够唯一标识该通知消息的标记。作为本申请的一个实施例,所述处理单元进一步用于,若所述处理结果为处理成功,则删除所述数据库中相应的通知消息,若在一预定时间内没有接收到所述处理结果,则调用发送单元重复将所述通知消息发送给相应的下游子系统。作为本申请的一个实施例,所述处理结果中还包括有通知编号,所述处理单元根据所述通知编号匹配得到数据库中相应的通知消息。作为本申请的一个实施例,发送单元进一步用于,据所述数据库中通知消息的标志位, 来判断所述通知消息是否为新加入的通知消息,并修改已发送通知消息的标志位。通过上述本申请实施例的装置,可以从上游子系统的数据库中获取通知消息,并不依赖下游子系统或者同步装置是否可用,当下游子系统和同步装置正常时就可以从数据库中获得通知消息,使得上游子系统和中间的同步装置以及下游子系统隔离,减少了子系统之间的依赖性,提高了整个系统的可用性,并且对于新增的上游子系统也可以节省上游子系统和下游子系统之间通信的编码成本。如图5所示为本申请实施例一种分布式事物处理系统的结构示意图,在本图中描述了分布式事物处理系统的结构,通过在上游子系统的数据库中保存通知消息,利用同步装置将数据库中的通知消息同步给下游子系统,可以实现子系统之间的隔离,提高整个系统的可用性,并且节省了为每个上游子系统通信编码的成本。该系统具体包括上游子系统501,用于根据上游子系统的业务处理结果,生成通知消息,并将所述通知消息存储于数据库中;同步装置502,用于定时扫描存储有上游子系统生成的通知消息的数据库,将所述数据库中新加入的通知消息发送给相应的下游子系统,接收所述下游子系统返回的对所述通知消息的处理结果,并根据所述处理结果对所述数据库中相应的通知消息进行处理。作为本申请的一个实施例,所述通知消息包括通知编号和通知内容,或者其它能够唯一标识该通知消息的标记。作为本申请的一个实施例,所述同步装置进一步用于,若所述处理结果为处理成功,则删除所述数据库中相应的通知消息,若在一预定时间内没有接收到所述处理结果,则调用发送单元重复将所述通知消息发送给相应的下游子系统。作为本申请的一个实施例,所述同步装置进一步用于,根据据所述数据库中通知消息的标志位,来判断所述通知消息是否为新加入的通知消息,并修改已发送通知消息的标志位。通过本申请实施例的分布式事物处理系统,将通知消息存储在上游子系统中,令同步装置定时获取通知消息,并将该通知消息发送给下游子系统,实现了上游子系统和下游子系统之间的隔离,提高了整个分布式事务处理系统的可用性,即便下游子系统不能工作,也可以在恢复正常后通过同步装置自动查询通知消息,并进行同步,还可以减少对每个上游子系统和下游子系统之间通信的编码成本。如图6所示为本申请实施例一种分布式事物处理系统的具体数据流图,在本图中描述了该分布式事物处理系统通过将通知消息存储于上游子系统,并通过同步装置将通知消息与下游子系统进行同步的过程,在该系统中同步装置可以与上游子系统位于同一台计算机中,也可以位于不同的计算机中。在本例中上游子系统例如可以为支付子系统,下游子系统可以为 发货系统,当上游子系统完成支付后,下游子系统会进行发货业务的处理,同步装置可以采用rpc客户端实现,其中rpc为remoteprocedurecallprotocol,远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议,还可以采用其它软硬件相结合的设备实现同步装置的功能,例如采用能够完成相应功能的中间件来实现,上游子系统中的数据库可以采用mysql关系型数据库,以下对该系统进行详细描述:包括步骤601,用户在支付子系统进行支付业务处理。在本步骤中,在支付子系统中进行支付业务的处理为现有技术,可以参考现有技术中的内容,该支付子系统还可以为其它业务子系统,在此不再赘述。步骤602,在支付业务处理成功后,将通知消息存储入支付子系统本地的数据库中。在本步骤中,在支付子系统处理完支付业务后,会产生用于通知发货子系统的通知消息,以通知发货子系统进行发货业务流程,在本例中通知消息例如包括通知编号以及通知内容,通知编号例如为1010,该通知编号包括了指明要同步到哪个下游子系统的信息,例如通知编号中的前两位10即指明要同步到下游的发货子系统,后面两位的10是该通知的唯一标识,通知内容例如进一步包括时间信息以及付款金额,其中,时间信息是指完成支付的时间(该时间也可以为将通知消息存储入数据库的时间),付款金额是指支付的金额。在向数据库写入通知消息的同时,还可以在通知消息中写入该通知消息的标志位,用以标记数据库中通知消息的状态,例如在写入通知消息时将该标志位置为0,表示通知消息的状态为未发送。在本实施例中,数据库可以与支付子系统位于同一台计算机,也可以为单独的数据库服务器。步骤603,当完成通知消息的存储后,数据库向支付子系统反馈存储成功的消息。在数据库中可以将通知消息存储于一数据库表格中,如表1所示为本申请实施例通知消息表格。表1通知编号写入时间支付金额标志位10102016-1-14-08-46200010112016-1-14-08-47100011012016-1-14-08-503000其中第一列的通知编号前面的两位指示了下游子系统,在本实施例中10指示发货子系统,11指示消息子系统,其中发货子系统用于进行发货业务处理,消息子系统用于当用户支 付完成后,向用户手机发送支付成功的短信息进行通知,通知编号后面两位为该通知消息在下游子系统中的唯一标识符。第二列写入时间可以是支付子系统完成支付的时间或者为通知消息写入到该表格中的时间,在本例中只是精确到分钟,例如2016-14-08-46是指2016年1月14日上午8点46分,还可以包括更精确的时间信息,例如精确到秒或者毫秒。第三列支付金额是指支付业务中支付的金额,具有该支付金额也就是说明支付业务完成,可以进行后续的发货业务或者发送通知短信息业务。步骤604,rpc客户端按照预先设定的周期扫描上述数据库。在本步骤中,可以根据数据库中通知消息的标志位来寻找新加入的通知消息,例如在支付子系统将通知消息写入数据库中时,在该记录最后一列加入该条记录的状态标识(例如为0),当rpc客户端将该通知消息与发货子系统进行同步时,将该标志位修改为1,当下一个扫描周期到来时,将标志位为0的通知消息向发货子系统进行同步。在本实施例中采用的是rpc客户端,还可以使用其它消息中间件来实现该同步装置的功能。步骤605,将新加入的通知消息与发货子系统进行同步。在本步骤中,rpc客户端将通知消息读出,并将其发送给发货子系统,此时修改数据库中通知消息的标志位,将原标志位0修改为1,以表示该通知消息为已发送状态。在本实施例中,将通知消息发送给发货子系统之后有两种可能,一种可能是正常处理业务,并返回业务处理结果,即业务处理成功,进入步骤606;还有一种可能,发货子系统业务处理失败或者发货子系统的服务器出现问题,不能提供相应服务,则在预定时间内没有返回业务处理结果,进入步骤609。步骤606,发货子系统根据接收到的通知消息进行发货业务处理。在本步骤中的业务处理为现有技术,可以参考现有技术中的技术手段,在此不再赘述。步骤607,发货子系统向rpc客户端发送业务处理结果。在本步骤中的业务处理结果中包括了通知编号以及业务处理结果,在本例中通知编号为1010,业务处理结果为成功。步骤608,rpc客户端根据业务处理结果删除数据库中相应的通知消息。在本步骤中,通知编号为1010,该rpc客户端在数据库中查找到相应通知编号的记录,删除该记录;或者查找到相应通知编号的记录后,先修改该通知消息的标志位,即将标志位1改为2,以表示该通知消息状态为处理完成,然后再删除所有标志位为2的通知消息,至此,在下一个扫描周期到来时,rpc客户端不会再次发送该处理成功的通知消息。步骤609,在所述预定时间之后,没有接收到发货子系统发送的处理结果,则根据标志 位再次发送通知消息。在本步骤中,在预定时间后,没有接收到发货子系统发送的处理结果,将标志位为1的通知消息再次向发货子系统进行发送。这个步骤609可能重复多次,知道接收到发货子系统发送的处理结果为止,当接收到发货子系统反馈的处理结果时返回步骤608。本步骤主要是针对下游子系统没有反馈处理结果的情况,此时通过rpc客户端根据预定的时间重复发送通知消息,可以解决下游子系统出现问题不能提供服务的问题,其中的预定时间可以为任意时间,例如1分钟、1小时等。通过上述本申请实施例中的方法及装置,将通知消息存储在上游子系统中,令rpc客户端定时获取通知消息,并将该通知消息发送给下游子系统,实现了上游子系统和下游子系统之间的隔离,提高了整个分布式事务处理系统的可用性,即便下游子系统不能工作,也可以在恢复正常后通过rpc客户端自动查询通知消息,并进行同步,还可以减少对每个上游子系统和下游子系统之间通信的编码成本。对于一个技术的改进可以很明显地区分是硬件上的改进(例如,对二极管、晶体管、开关等电路结构的改进)还是软件上的改进(对于方法流程的改进)。然而,随着技术的发展,当今的很多方法流程的改进已经可以视为硬件电路结构的直接改进。设计人员几乎都通过将改进的方法流程编程到硬件电路中来得到相应的硬件电路结构。因此,不能说一个方法流程的改进就不能用硬件实体模块来实现。例如,可编程逻辑器件(programmablelogicdevice,pld)(例如现场可编程门阵列(fieldprogrammablegatearray,fpga))就是这样一种集成电路,其逻辑功能由用户对器件编程来确定。由设计人员自行编程来把一个数字系统“集成”在一片pld上,而不需要请芯片制造厂商来设计和制作专用的集成电路芯片2。而且,如今,取代手工地制作集成电路芯片,这种编程也多半改用“逻辑编译器(logiccompiler)”软件来实现,它与程序开发撰写时所用的软件编译器相类似,而要编译之前的原始代码也得用特定的编程语言来撰写,此称之为硬件描述语言(hardwaredescriptionlanguage,hdl),而hdl也并非仅有一种,而是有许多种,如abel(advancedbooleanexpressionlanguage)、ahdl(alterahardwaredescriptionlanguage)、confluence、cupl(cornelluniversityprogramminglanguage)、hdcal、jhdl(javahardwaredescriptionlanguage)、lava、lola、myhdl、palasm、rhdl(rubyhardwaredescriptionlanguage)等,目前最普遍使用的是vhdl(very-high-speedintegratedcircuithardwaredescriptionlanguage)与verilog2。本领域技术人员也应该清楚,只需要将方法流程用上述几种硬件描述语言稍作逻辑编程并编程到集成电路中,就可以很容易得到实现该逻辑方法流程的硬件电路。控制器可以按任何适当的方式实现,例如,控制器可以采取例如微处理器或处理器以及 存储可由该(微)处理器执行的计算机可读程序代码(例如软件或固件)的计算机可读介质、逻辑门、开关、专用集成电路(applicationspecificintegratedcircuit,asic)、可编程逻辑控制器和嵌入微控制器的形式,控制器的例子包括但不限于以下微控制器:arc625d、atmelat91sam、microchippic18f26k20以及siliconelabsc8051f320,存储器控制器还可以被实现为存储器的控制逻辑的一部分。本领域技术人员也知道,除了以纯计算机可读程序代码方式实现控制器以外,完全可以通过将方法步骤进行逻辑编程来使得控制器以逻辑门、开关、专用集成电路、可编程逻辑控制器和嵌入微控制器等的形式来实现相同功能。因此这种控制器可以被认为是一种硬件部件,而对其内包括的用于实现各种功能的装置也可以视为硬件部件内的结构。或者甚至,可以将用于实现各种功能的装置视为既可以是实现方法的软件模块又可以是硬件部件内的结构。上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。为了描述的方便,描述以上装置时以功能分为各种单元分别描述。当然,在实施本申请时可以把各单元的功能在同一个或多个软件和/或硬件中实现。通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到本申请可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如rom/ram、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例或者实施例的某些部分所述的方法。本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。本申请可用于众多通用或专用的计算机系统环境或配置中。例如:个人计算机、服务器计算机、手持设备或便携式设备、平板型设备、多处理器系统、基于微处理器的系统、置顶盒、可编程的消费电子设备、网络pc、小型计算机、大型计算机、包括以上任何系统或设备的分布式计算环境等等。本申请可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、 数据结构等等。也可以在分布式计算环境中实践本申请,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。虽然通过实施例描绘了本申请,本领域普通技术人员知道,本申请有许多变形和变化而不脱离本申请的精神,希望所附的权利要求包括这些变形和变化而不脱离本申请的精神。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1