分布式事务详解
2022-02-08 15:47:55 0 举报
分布式事务的原理及解决方案详解
作者其他创作
大纲/内容
4. 消费消息
3. 增加积分
5. 增加用户积分
3. 调用渠道发送短信
Cancel
MQ消息队列
6. Branch Commit/Rollback
TM
2. 新增用户
用户服务
2.BranchRegister
可用余额
TC触发事务回滚
1. 发送短信请求
Resource-TCC
红包服务
1. 创建支付订单
返回ack(确认消费完成)
3. 执行本地事务
RM
reference
如果事务执行失败,则删除该消息,不投递
冻结资金
begin transactioncommit/rollback
开始执行事务
2pc提交协议
分布式事务解决方案
分布式事务协调
参与者A
5. 异步回调通知短信发送结果最多通知N次(衰减)
2. Half消息发送成功
1.用户注册
Confirm
Try
TCC服务
下单
poratal
发起方
MQ消费者
重复接收同一个消息
资金服务
从用户红包账户扣除余额
2. 创建短信发送记录,并设置状态:已接受
3. 从红包账户扣款
MQ Broker
3. rollback
7. 主动查询短信发送状态
网络超时
TC
提交或回滚
totalAmout=70
支付成功
5. 未收到步骤4的确认,回调查询事务执行状态
支付服务
第一阶段(Try),检查余额,预留本次支付的金额进行冻结
1. 注册用户
由于网络延迟导致超时异常
4. Commit Or Rollback
参与者B
从资金账户中扣除余额
1. Begin
3.BranchRegister
gpmall-alibaba-portal
2. 从用户资金账户扣款
6. 检查本地事务执行结果
分布式事务的产生背景
积分服务
totalAmout=100
更新支付结果
返回结果
forzenAmount=30
4.Commit/Rollback
等待支付
事务日志
6. 更新短信发送状态:成功/失败
2. 创建订单
第二阶段
1. 扣减库存
投递消息,直到消息确认
4. 更新短信发送状态:已发送
事务执行结果
marking-service-provider
2.timeout
第二阶段(Confirm),扣减冻结的资金
扫描未发送的消息
4. Prepare
7. 根据事务的状态决定Commit/Rollback
网络延迟
业务B
短信发送供应商
第一阶段
如果事务执行成功,则把当前消息投递给消费者
短信平台
同一个本地事务,可以满足ACID特性
异步发送短信
user-service-provider
1. Prepare
发送积分消息
业务A
1. 发送Half消息
库存服务
MQ生产者
2. 增加抽奖次数
订单服务
支付中
第二阶段(Cancel),释放预留的冻结资金
3. 扣减账户余额
本地事务
0 条评论
下一页