06 | 分布式事务:All or nothing(非原创)

分布式事务的处理主要有三种:

1、基于xa的二阶段提交(协调者下发请求事务操作,参与者将操作结果通知协调者,协调者根据所有参与者的反馈结果决定各参与者是要提交操作还是撤销操作。)【投票,提交】称为二阶段

06 | 分布式事务:All or nothing(非原创)06 | 分布式事务:All or nothing(非原创)

2、三阶段提交(把之前的投票拆成了投票和预提交)

06 | 分布式事务:All or nothing(非原创)06 | 分布式事务:All or nothing(非原创)06 | 分布式事务:All or nothing(非原创)

3、基于base理论的最终一致性提交

 

06 | 分布式事务:All or nothing(非原创)

 

06 | 分布式事务:All or nothing(非原创)

06 | 分布式事务:All or nothing(非原创)

订单系统把订单消息发给消息中间件,消息状态标记为“待确认”。

消息中间件收到消息后,进行消息持久化操作,即在消息存储系统中新增一条状态为“待发送”的消息。

消息中间件返回消息持久化结果(成功 / 失败),订单系统根据返回结果判断如何进行业务操作。

失败,放弃订单,结束(必要时向上层返回失败结果);成功,则创建订单。

订单操作完成后,把操作结果(成功 / 失败)发送给消息中间件。

消息中间件收到业务操作结果后,根据结果进行处理:失败,删除消息存储中的消息,结束;成功,则更新消息存储中的消息状态为“待发送(可发送)”,并执行消息投递。如果消息状态为“可发送”,则 MQ 会将消息发送给支付系统,表示已经创建好订单,需要对订单进行支付。

支付系统也按照上述方式进行订单支付操作。订单系统支付完成后,会将支付消息返回给消息中间件,中间件将消息传送给订单系统。订单系统再调用库存系统,进行出货操作。

【比较】

06 | 分布式事务:All or nothing(非原创)

【总结】

06 | 分布式事务:All or nothing(非原创)

【心得体会】

通过以上的学习。在实际工作中,如果对并发要求不高完全可以采用二阶段或三阶段提交,如果是电商那种高并发对业务场景最好使用最终一致性的方案。