分布式事务模型

193 阅读3分钟

可靠消息模型

本地消息表模型

实现方式
1.业务活动主动方,通过业务活动本地事务,记录消息信息到业务活动本地数据库中,保证操作业务数据与消息表信息在本地事务一致;
2.业务活动处理完成后,通过可靠消息系统将消息发送给业务的被动方;
3.在消息发送完成后,删除业务活动本地数据库中的消息信息;
4.消息恢复系统定期找到未成功发送的消息,交给实时消息服务补发送;
5.业务活动被动方获取消息后,处理业务;

约束条件
1.被动业务方的处理结果不影响主动业务方处理结果;
2.被动方消息处理需要支持幂等;

适用范围
1.对最终一致性实时性要求较高的场景;
2.降低业务被动方的实现成本;

使用业务场景
1.业务量不是特别大的场景(消息表信息要写入本地业务数据库,如果交易量大会导致本地消息表信息过大,占用业务数据库储存),适合通过异步消息方式进行解耦,并使用可靠MQ保障最终一致性的场景;如:消费送积分,消费送券;

事务性消息中间件模型

实现方式
1.主动方在业务处理服务在提交事务前,向实时消息服务发送消息,实时消息服务只记录消息,不发送消息
2.在主动方业务处理服务完成事务后,向实时消息系统发送确认消息,只有收到了确定消息后,实时消息系统才发送消息;
3.主动方业务处理失败后,向实时消息系统发送取消发送;
4.消息状态确认系统定期找到未确认发送或取消的消息,向业务系统确认消息的状态,业务系统需要根据消息体信息确认消息是否有效,是发送还是取消;

构建成本
1.一次消息发送需要两次请求;
2.业务系统需要实现消息状态回查接口;

优点
1.消息系统消息独立存储,独立伸缩;
2.主动方实现分布式事务逻辑简单,更加关注业务;

缺点
1.实现分布式事务消息中间件成本高,技术难度大;

适用范围
1.对最终一致性实时性要求加高的场景;
2.降低业务系统的实现成本,一致性的保证交由中间件保证;

适用场景
1.业务量较大的场景,通过分布式中间件进行补偿操作,满足最终一致性即可。
2.适合将大事务拆分为多个小事务加异步的方式,保证最终一致性的场景。