分布式事务方案:可靠消息最终一致方案

       可靠消息最终一致方案主要是借助MQ消息系统来进行事务控制。当然简单的使用MQ显然是达不到事务控制的目的的,因为你无法把本地的数据库操作与消息发送操作进行统一事务控制。因此需要一定的巧妙设计。

       如果分布式事务在系统中只是偶尔遇到的情况,可以采用相对简单的处理方式,将要发送的消息,先保存到本地数据库,这样就可以与其它业务操作统一通过本地事务控制,然后通过定时器或者独立的线程轮询本地的消息表,将数据发送到MQ中间件供消费者消费。这实际上将操作分成了两部分,首先将消息数据保存到了本地,与其它操作要么一起成功,要么一起失败回滚,保证了一致性。然后通过定时器或者独立的线程进行消息确认、消息查询、消息恢复等操作,确保将数据发给MQ,利用MQ的机制确保消费者可以收到消息。这种方式的水平比较低,与具体业务场景绑定,实时性差,且独立线程消耗资源。

       如果系统需要广泛使用分布式事务,应该开发一套独立的可靠消息服务系统,提供分布式事务服务。

       一.可靠消息服务系统的实现
       1.业务处理服务在业务事务提交前,向实时消息服务请求发送消息,实时消息服务只记录消息数据,而不真正发送。业务处理服务在业务事务提交后,向实时消息服务确认发送。只有在得到确认发送指令后,实时消息服务才真正发送。
       2.业务处理服务在业务事务回滚后,向实时消息服务取消发送。消息状态确认系统定期找到未确认发送或回滚发送的消息,向业务处理服务询问消息状态,业务处理服务根据消息ID或消息内容确定该消息是否有效。

       二.可靠消息最终一致方案的特点
       1.该方案属于异步确保型的分布式事务解决方案;
       2.用到的服务模式:可查询操作、幂等操作;
       3.被动方的处理结果不影响主动方的处理结果,被动方的消息处理操作必须是幂等操作;
       4.需要发送两次请求,业务处理服务需实现消息状态回查接口;
       5.消息数据独立存储、独立伸缩,降低业务系统与消息系统间的耦合;
       6.对最终一致性时间敏感度较高;
       7.降低业务被动方实现成本。

       三.可靠消息服务系统的设计
       可靠消息服务系统由以下子系统构成。
       1.消息服务子系统:是最重要的一个子系统,它接收并存储预发送的消息,并提供进一步的确认功能。一般需要实现以下接口服务。
  • 存储预发送消息(主动方应用系统)

  • 确认并发送消息(主动方应用系统)

  • 查询状态确认超时的消息(消息状态确认子系统)

  • 确认消息已被成功消费(被动方应用系统)

  • 查询消费确认超时的消息(消息恢复子系统)

       2.消息管理子系统:提供一个可视化的管理界面,对可靠消息服务系统中的数据,进行查询和管理。比如可查看已死亡的消息,可通过界面手工重发等。
       3.消息状态确认子系统:提供对异常情况的处理。当消息服务子系统收到并保存预发送消息,但因异常情况,没有收到确认发送消息时,这种消息不可能一直留存在数据库中。这种情况的数据,就需要消息状态确认子系统定期捞取这些待确认超时的数据,去调用主动方应用系统中的业务查询接口进行核对确认。根据核对结果决定是发送消息还是删除数据。
       4.消息恢复子系统:如果消息数据已经接收到业务确认,这种经过业务确认的消息,就一定要发送到MQ,并被消费方成功消费,绝不能丢。消息恢复子系统定期捞取那些状态是“发送中”,而没有被消费确认的超时消息,进行重新发送。
       5.实时消息服务子系统(MQ):消费方监听程序,接收MQ消息,成功处理后调用消息服务子系统的接口,确认消息已被成功消费,可以删除。






你可能感兴趣的:(分布式事务方案:可靠消息最终一致方案)