分布式系统的消息处理方法和装置制造方法及图纸

技术编号:33125385 阅读:15 留言:0更新日期:2022-04-17 00:34
本发明专利技术提供了一种分布式系统的消息处理方法和装置,是一种分布式事务解决方案,该方法包括:确定分布式系统中目标业务的多个服务模块,多个服务模块中的每个服务模块用于完成目标业务中的一个或者多个业务服务;为了解决事务场景中一个事务跨多个服务模块、且调用链比较短的问题,为多个服务模块配置了消息中间件,消息中间件用于处理多个服务模块之间传输的事件消息,通过使用消息中间件mq,可以实现高并发、在多个模块之间进行解耦、高可用的消息处理,能够解决分布式事务,以及一些模糊解耦问题,从而保证数据的最终一致性。从而保证数据的最终一致性。从而保证数据的最终一致性。

【技术实现步骤摘要】
分布式系统的消息处理方法和装置


[0001]本专利技术涉及互联网领域,具体而言,涉及一种分布式系统的消息处理方法和装置。

技术介绍

[0002]对于分布式系统而言,为了保证数据的一致性,可以通过分布式事务来实现。在分布式系统中,一个业务操作可能由多个服务来共同完成,不同的服务分布在不同的节点,分布式事务需要保证这些服务要么全部成功,要么全部失败。
[0003]常用的涉及分布式事务的场景包括:跨库事务,一个业务需要操作不同的数据库;分库分表,业务中涉及的数据量很大,单独的数据库无法存储,需要水平拆分;微服务中服务之间的调用。
[0004]在相关技术常常使用Seata和LCN来实现,Seata是一款开源的分布式事务解决方案,致力于在微服务架构下提供高性能和简单易用的分布式事务服务,Seata能将为用户提供AT、TCC、SAGA和XA事务模式,如图1所示,TM是事务发起者,定义事务的边界,负责告知TC,分布式事务的开始、提交、回滚;TC是事务协调者,负责事务D的生成,事务注册、提交、回滚等;RM是资源管理者,管理每个分支事务的资源,每一个RM都会作为一个分支事务注册在TC上。
[0005]分布式事务锁流程如下:先获取到本地锁,这样就可以修改本地数据了,只是还不能本地事务提交;而后,能否提交就是看能否获得全局锁;获得了全局锁,意味着可以修改了,那么提交本地事务,释放本地锁;当分布式事务提交,释放全局锁,这样就可以让其它事务获取全局锁,并提交它们对本地数据的修改了。Seata实现读隔离原理:Seata的方式是通过SELECT FOR UPDATE语句的代理,SELECT FOR UPDATE语句的执行会申请全局锁,如果全局锁被其他事务持有,则释放本地锁(回滚SELECT FOR UPDATE语句的本地执行)并重试,这个过程中,查询是被block住的,直到全局锁拿到,即读取的相关数据是已提交的,才返回。
[0006]LCN,是定位于一款事务协调性的框架,框架其本身并不生产事务,而是本地事务的协调者,从而达到事务一致性的效果,如图2所示(eureka:注册中心,注册服务模块;TM,Tx

Manager,是独立的服务,是分布式事务的控制方,协调分布式事务的提交,回滚;TC,Tx

Client,由业务系统集成,事务发起方、参与方都由Tx

Client端来控制;db,数据库;redis:基于内存的数据库),LCN是基于两阶段提交,如图3所示。
[0007]在使用上述相关技术时,以支付举例来说,需要调用支付服务和订单服务,2PC(即两阶段提交tow phase commit的简称)分为两阶段,第一阶段如图4所示,第二阶段如图5所示。2PC的缺点是TM存在单点故障,占用资源、会产生数据不一致。3PC(即三阶段提交Three

phase commit的简称,包括CanCommit、PreCommit、DoCommit三个阶段)相对2PC来说,增加了一个阶段Can(即CanCommit),相对于2PC,3PC主要解决的单点故障问题,并减少阻塞,因为一旦参与者无法及时收到来自协调者的信息之后,就会默认执行commit,而不会一直持有事务资源并处于阻塞状态。这也带来了新的问题:这种机制会导致数据一致性问题,因为,由于网络原因,协调者发送的abort响应没有及时被参与者接收到,那么参与者在等待
超时之后执行了commit操作,这样就和其他接到abort命令并执行回滚的参与者之间存在数据不一致的情况。
[0008]相比较2PC而言,3PC对于协调者(Coordinator)和参与者(Partcipant)都设置了超时时间,而2PC只有协调者才拥有超时机制,这个优化点,主要是避免了参与者在长时间无法与协调者节点通讯(协调者挂掉了)的情况下,无法释放资源的问题,因为参与者自身拥有超时机制会在超时后,自动进行本地commit从而进行释放资源,而这种机制也侧面降低了整个事务的阻塞时间和范围。Seata和LCN都是基于2PC做了优化在事务一致性上很强,复杂性中等,业务员侵入性小,维护成本低,但是在性能上很低,不太适合特别高并发的场景。

技术实现思路

[0009]本专利技术的主要目的在于提供一种分布式系统的消息处理方法和装置,以解决相关技术中的技术方案不适用于高并发场景的技术问题。
[0010]为了实现上述目的,根据本专利技术的一个方面,提供了一种分布式系统的消息处理方法,包括:确定分布式系统中目标业务的多个服务模块,其中,多个服务模块中的每个服务模块用于完成目标业务中的一个或者多个业务服务;为多个服务模块配置消息中间件,其中,消息中间件用于处理多个服务模块之间传输的事件消息。
[0011]可选地,在为多个服务模块配置消息中间件之后,方法还包括:利用消息中间件处理在多个服务模块之间发送的事件消息;利用消息中间件处理在多个服务模块之间接收到的事件消息。
[0012]可选地,利用消息中间件处理在多个服务模块之间发送的事件消息,包括:消息中间件的发送端启动定时任务,以按照定时任务不间断扫描发送端的事件表中类型为1的数据,其中,该数据为多个服务模块中的第一服务模块向多个服务模块中的第二服务模块发送的数据,类型为1表示新增;在事件表中存在类型为1的数据的情况下,将该数据的类型修改为2,其中,类型为2表示已发送;将该数据封装为事件消息,存储到消息中间件的消息队列中;利用消息中间件处理消息队列中的事件消息,以将事件消息发送给第二服务模块。
[0013]可选地,在利用消息中间件处理在多个服务模块之间传输的事件消息的过程中,方法还包括:在利用消息中间件处理消息队列中的事件消息的时候,若出现了服务下线的问题,则将类型为2的数据进行回滚,恢复到类型为1的状态。
[0014]可选地,将该数据封装为事件消息,存储到消息中间件的消息队列中,包括:将存在关联的查询数据、修改数据以及发送数据封装到同一事件消息,存储到消息中间件的消息队列中。
[0015]可选地,利用消息中间件处理在多个服务模块之间接收到的事件消息,包括:在消息中间件的消费端监听事件消息;消费事件消息,以将事件消息中的数据存入消费端的事件表中,并将数据的类型修改为1,类型为1表示已发送;向消息中间件的发送端发送接收成功的通知。
[0016]可选地,在消费事件消息,将事件消息中的数据存入消费端的事件表的过程中,方法还包括:当事件消息被重复消息N次、还未完成消费的情况下,将事件消息存入死信队列,以根据死信队列运行补偿机制。
[0017]为了实现上述目的,根据本专利技术的一个方面,提供了一种分布式系统的消息处理装置,包括:确定单元,用于确定分布式系统中目标业务的多个服务模块,其中,多个服务模块中的每个服务模块用于完成目标业务中的一个或者多个业务服务;配置单元,用于为多个服务模块配置消息中间件,其中,消息中间件用于处理多个服务模块之间传输的事件消息。
[0018]可本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种分布式系统的消息处理方法,其特征在于,包括:确定分布式系统中目标业务的多个服务模块,其中,所述多个服务模块中的每个服务模块用于完成所述目标业务中的一个或者多个业务服务;为所述多个服务模块配置消息中间件,其中,所述消息中间件用于处理所述多个服务模块之间传输的事件消息。2.根据权利要求1所述的方法,其特征在于,在为所述多个服务模块配置消息中间件之后,所述方法还包括:利用所述消息中间件处理在所述多个服务模块之间发送的事件消息;利用所述消息中间件处理在所述多个服务模块之间接收到的事件消息。3.根据权利要求2所述的方法,其特征在于,所述利用所述消息中间件处理在所述多个服务模块之间发送的事件消息,包括:所述消息中间件的发送端启动定时任务,以按照所述定时任务不间断扫描发送端的事件表中类型为1的数据,其中,该数据为所述多个服务模块中的第一服务模块向所述多个服务模块中的第二服务模块发送的数据,类型为1表示新增;在所述事件表中存在类型为1的数据的情况下,将该数据的类型修改为2,其中,类型为2表示已发送;将该数据封装为事件消息,存储到所述消息中间件的消息队列中;利用所述消息中间件处理所述消息队列中的事件消息,以将事件消息发送给所述第二服务模块。4.根据权利要求3所述的方法,其特征在于,在利用所述消息中间件处理在所述多个服务模块之间传输的事件消息的过程中,所述方法还包括:在利用所述消息中间件处理所述消息队列中的事件消息的时候,若出现了服务下线的问题,则将类型为2的数据进行回滚,恢复到类型为1的状态。5.根据权利要求3所述...

【专利技术属性】
技术研发人员:姚鑫白杰白惠杰宋东瑞苏宇
申请(专利权)人:苏州臻璇数据信息技术有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1