文章目录

  • 什么是分布式系统
  • 为什么会出现分布式事务
  • 分布式事务的一些常用解决方案
  • 通过一个电商场景聊聊RebbitMQ解决分布式事务。


什么是分布式系统

简单来说,就是一个用户请求需要多个系统协同完成。

为什么会出现分布式事务

因为两个业务系统直接操作的是两个不同的数据库,用的是两个不同的connection连接对象。无法像传统单体项目一样通过普通的数据库事务特性(acid)保证数据库数据的一致性。

分布式事务的一些常用解决方案

  • 基于数据库XA/JTA协议方式; (需要数据库厂商支持;Java组件有 atomikos);
  • 异步数据校对方式;(支付宝/微信支付主动查询支付状态,对账单的形式);
  • 基于可靠消息(MQ)的解决方案; (异步场景,通用性强,扩展性高);
  • TCC编程式解决方案;(听说像阿里这些牛逼的公司都自己封装DTX)。

通过一个电商场景聊聊RebbitMQ解决分布式事务。

先来看看不做分布式处理的情况:

分布式管理监控模式 分布式管理是什么意思_分布式管理监控模式


这种情况下可能遇到的问题:

1、当库存系统响应较慢,或者极端些库存系统挂了,会导致用户的订单信息和库存信息不一致的情况。

2、订单系统没有成功生成订单(订单数据库相应超时),但是库存系统却更新了库存。两数据库的信息又不一致了(很坑爹)。接下来再看看加了RabbitMQ做柔性事务管理的分布式方案:

分布式管理监控模式 分布式管理是什么意思_分布式管理监控模式_02


这样虽然没有办法保证两数据库之间的实时一致性,但却保证了数据的最终一致性。

** 细节: **

  • 消息一定要发送到MQ(可靠消息生产)
  • 消息发布确认机制(publisher-confirms:true)
    消息发布确认+本地消息表 保证数据一定发送成功
  • 消费者被消费掉(可靠的消息消费)
  • 消费确认机制