1 极速了解MQ

介绍Rabbitmg用于解决分布式事务必须掌握的5个核心概念

一款分布式消息中间件,基于erlang语言开发, 具备语言级别的高并发处理能力。和Spring框架是同一家公司。
支持持久化、高可用

核心5个概念:

  1. Queue: 真正存储数据的地方
  2. Exchange: 接收请求,转存数据
  3. Bind: 收到请求后存储到哪里
  4. 消息生产者:发送数据的应用
  5. 消息消费者: 取出数据处理的应用
    基于MQ的分布式事务解决方案 - MQ分布式消息中间件实战应用

2、分布式事务问题

分布式事务是一个业务问题,不能脱离具体的场景。

2.1 分布式事务的几种解决方案

● 基于数据库XA/ JTA协议的方式
需要数据库厂商支持; JAVA组件有atomikos等
● 异步校对数据的方式
支付宝、微信支付主动查询支付状态、对账单的形式;
● 基于可靠消息(MQ)的解决方案
异步场景;通用性较强;拓展性较高
● TCC编程式解决方案
严选、阿里、蚂蚁金服自己封装的DTX

本文目标:针对所有人群,学会基于可靠消息来解决分布式事务问题。
分布式事务的解决方案,业务针对性很强,重要的是思路,而不是照搬

  • 美团点评系统架构
    基于MQ的分布式事务解决方案 - MQ分布式消息中间件实战应用

2.2 多系统间的分布式事务问题

基于MQ的分布式事务解决方案 - MQ分布式消息中间件实战应用

  • 用户下单生成订单
    基于MQ的分布式事务解决方案 - MQ分布式消息中间件实战应用
  • 需要传递订单数据,由此产生两个事务一致性问题
    基于MQ的分布式事务解决方案 - MQ分布式消息中间件实战应用

错误的案例

基于MQ的分布式事务解决方案 - MQ分布式消息中间件实战应用

当接口调用失败时,订单系统事务回滚,提示用户操作失败

误以为这样的接口调用写法,就不会有分布式事务问题

接口调用成功或者失败,都会产生分布式事务问题:

  1. 接口调用成功,订单系统数据库事务提交失败,运单系统没有回滚,产生数据
  2. 接口调用超时,订单系统数据库事务回滚,运单系统接口继续执行,产生数据

上述两种情况,都会导致数据不一致的问题

3、实现分布式事务 - 五步法

通过MQ解决分布式事务的5个步骤, 以及分布式事务处理中要注意的地方

  • 之前都是订单系统发送HTTP请求运单系统的接口,出问题了!基于MQ的分布式事务解决方案 - MQ分布式消息中间件实战应用
  • 因此我们考虑发消息给MQ, 异步暂存!
    基于MQ的分布式事务解决方案 - MQ分布式消息中间件实战应用

3.1 整体设计思路

基于MQ的分布式事务解决方案 - MQ分布式消息中间件实战应用

  1. 可靠生产:保证消息一定发送到Rabitmq服务
  2. 可靠消费:保证消息取出来一定正确消费掉

最终多方数据达到一致。

4、总结及扩展

MQ方案的优点和缺点解决分布式事务的其他方案

参考

美团配送系统架构演进实践

相关文章:

  • 2022-02-14
  • 2022-02-07
  • 2021-11-26
  • 2021-09-09
  • 2021-09-04
  • 2021-11-16
  • 2021-09-02
猜你喜欢
  • 2021-10-30
  • 2022-02-07
  • 2021-04-17
  • 2021-06-05
  • 2022-01-29
  • 2021-04-26
  • 2021-12-20
相关资源
相似解决方案