基于消息的分布式事务简单方案

原创 2016年05月30日 16:50:22

System-A为主系统



流程描述

1. system-A执行本地事务,

发送msg到redis,此时msg状态为unknown(这里全是unknown状态的msg,消息需要持久化,只有msg存在,即使system-b处理失败也可以有其他方式处理,一般是人工)

2.1本地事务提交

2.1.1 更改redis的msg状态为提交,从老的内存队列删除,并放入另一个内存队列(这里全是commit状态的msg)

2.1.2 monitorsystem负责把commit状态的msg发送到MQ,并把msg转移到commited的存储中

2.2.本地事务回滚

2.2.1删除redis中的msg

3.System-B执行事务

3.1从MQ接收msg,执行本地事务,需要有重试的机制和避免重复处理的能力。(当超过最大重试次数后还失败,则需要预警,人工参与处理。)

3.2处理成功后需通知system-a,system-a做相应处理,并删除redis中的msg

4.处理完通知

5.补偿通知

 

Monitorsystem的作用

1.      监控commit状态的msg 进行发送

2.      监控unknown状态的msg,根据具体逻辑去检查system-a,看看system-a的事务是否成功,来变更msg的状态。

3.      监控commited状态的msg,若过了一段时间还存在,则可能system-b通知失败,则monitor system去查system-b,然后进行补偿通知。

用来保证system-a成功的事务的消息可以发送,如果事务失败,则消息是unknown状态也不会被下游系统处理。

 

 

Messageresend system

基于某些情况,消息丢失,需要可以从system-a生成msg重新投递。

 

 

Precommit 阶段选择redis的理由

本来开始想用MQ来存储,由于这是消息的中转阶段,因为需要根据msgId对消息进行查询,然后还得更新已存在的消息的数据(状态值),然后查看了几个mq中间件,比较activemq,metaq,前者不支持查询消息,而对于更新消息状态则都不支持。所以mq无法支持这种消息中转存储。



参考:

http://blog.jobbole.com/89140/

相关文章推荐

分布式消息队列RocketMQ--事务消息--解决分布式事务的最佳实践

说到分布式事务,就会谈到那个经典的”账号转账”问题:2个账号,分布处于2个不同的DB,或者说2个不同的子系统里面,A要扣钱,B要加钱,如何保证原子性?一般的思路都是通过消息中间件来实现“最终一致性”:...

深入理解分布式事务,高并发下分布式事务的解决方案

深入理解分布式事务,高并发下分布式事务的解决方案

用消息队列和消息应用状态表来消除分布式事务

由于数据量的巨大,大部分Web应用都需要部署很多个数据库实例。这样,有些用户操作就可能需要去修改多个数据库实例中的数据。传统的解决方法是使用分布式事务保证数据的全局一致性,经典的方法是使用两阶段提交协...
  • it_man
  • it_man
  • 2014年03月20日 09:02
  • 13135

如何用消息系统避免分布式事务?

前阵子从支付宝转账1万块钱到余额宝,这是日常生活的一件普通小事,但作为互联网研发人员的职业病,我就思考支付宝扣除1万之后,如果系统挂掉怎么办,这时余额宝账户并没有增加1万,数据就会出现不一致状况了。 ...

spring MVC 国际化实现配置

众里寻他千百度,蓦然回首,那人却在灯火阑珊处。。。。 这两天,一直被国际化所困扰着,一直在查询资料 ,从自己手动实现,到找到最佳实现方案,才知道,其实国际化很简单,现在将我的总结分享给大家。。。。 其...

基于React.js实现webapp的技术实践

git原文链接:https://github.com/my-fe/wiki/issues/1 由于最近的reactjs实在太火,而且距离第一版已经快2年的时间了,已经相对稳定和成熟了,基于这两个前提...

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

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

"分布式事务"解决方案汇总 -- 2PC/TCC/事务消息/1PC

说到分布式事务,网上的文章汗牛充栋,理论很多,实践也多。有的清晰的说明了问题,有些越看越糊涂。 之前我也写过一篇分布式事务的文章《分布式消息队列RocketMQ–事务消息–解决分布式事务的最佳实践》...

如何用消息系统避免分布式事务

  • 2017年06月13日 11:59
  • 86KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:基于消息的分布式事务简单方案
举报原因:
原因补充:

(最多只允许输入30个字)