分布式事务解决方案的理论依据
- CAP理论
- BASE理论
- 2PC协议
- 3PC协议
- Paxos算法.
- Raft一致性协议
1.基于RabbitMQ消息队列的分布式事务解决方案
1.1 整体设计思路
实现说明
用户下单后,可以等待支付中心数据生成,并非强制要求同时性
- 可靠生产:保证消息一定会发送到RabbitMQ服务
- 可靠消费:保证消息取出来一定正确消费掉
- 最终使多方数据达到一致
1.2 S1-可靠消息生产-记录消息发送事件
- 存在风险:消息发送失败
解决办法
确保消息一定发送到MQ
在同一个本地事务中增加事件记录表,记录每一条发送到MQ的数据以及它的发送状态和次数
订单系统中增加一个本地事件表
1.2 S2-可靠消息生产-修改消息发送状态
实现说明
- 利用RabbitMQ的消息确认机制,消息发送成功后收到ack确认,更新本次事件状态
- 如果出现ack没有收到,消息状态修改失败等情况,采用兜底方案定时检查事件消息表,超时没有发送成功,再次重发,发送超过设定最大次数进行告警通知
1.3 S3-可靠消息消费处理-正常处理
问题说明
- 支付系统中心消费过程中出现异常或者自身Down机消息存在丢失风险
实现说明
- 消费端保证业务幂等性,防止重复消息数据的处理
- 手动开启ACK模式,由消费者控制消息的重发/清除/丢弃
1.4 S4- 可靠消息处理-消息重发
实现说明
- 消费者处理失败,需要MQ再次重发给消费者
- 出现异常一般会重试几次,由消费者自身记录重试次数,并进行次数控制超过最大次数发送告警通知
1.4 S5- 可靠消息处理-消息丢弃
实现说明
- 消费者处理失败,直接丢弃或者转移到死信队列(DLQ)
- 通过线上预警机制通知运维人员