领导要求下班前画一张图把分布式事务问题说清楚

21,598 阅读1分钟

# 分布式事务一张图-最全论述 对本文的两张图展开讨论

图解分布式事务的全部解决方案

图解分布式事务难题

Seata和Rocketmq事务消息也是我们我们正在使用的,非常适合中小型公司

AP、CP两个维度展开解决方案

image.png

Seata和Rocketmq事务消息方案

本方案具有: 强弱结合型事务 全部特点 非常适合中小型项目使用

秒杀/抢购/电商库存增减/供应链库存增减 等场景,都是属于 强弱结合型 的数据一致性场景

image.png

image.png

首先看看 RocketMQ 的事务消息, 能够保证本地操作 + 消息发送的原子性。具体来说, 主要是保证了本地方法执 行和消息发送在一个分布式事务中,要不全部成功,要不全部失败。

RocketMQ 通过发送 half 消息来实现,下面详细说明一下:

  1. 消息发送方 向 Broker 发送一条 half 消息;
  2. half 消息发送成功后,消息发送方 执行本地事务;
  3. 如果 消息发送方 执行本地事务成功,则向 Broker 发送 commit 请求,否则发送 rollback 请求;
  4. 如果 Broker 收到的是 rollback 请求,则删除保存的 half 消息;
  5. 如果 Broker 收到的是 commit 请求,则把 half 消息投递到 真实 队列, 等待消费服务来拉取,然后删除保存的 half 消息;
  6. 如果 Broker 没有收到 rollback/commit 请求,则会发送请求到 Producer 查询本地事务状态,然后根据 Producer 返回的本地状态做 commit/rollback 相关处理。