消息传递一致性分析

文章讨论了在分布式系统中,消息队列如何用于实现服务解耦、异步通信,以及如何保证业务最终一致性。文中提到了多种保证消息发送一致性的方案,包括分布式事务协议XA、本地事务表、事务消息、独立消息服务、CDC消息同步和消费确认方案。此外,还强调了消息消费一致性的重要性,如消息ACK和业务操作幂等性。文章推荐的方案顺序为:CDC消息同步、事务消息和消息确认。

分布式系统中消息队列常用于解决服务解耦,异步通信等问题,从而实现服务高性能,以及业务最终一致性。

这里业务最终一致性指消息上游业务和消息下游业务,在一段时间延迟后,业务逻辑的正确性。

为保证最终一致性,就需要上下游对某个业务操作执行一致的逻辑,同时成功或同时失败。

而业务操作的事件我们是通过消息来传递的,那就要求业务操作与消息传递一致性:

  • 上游业务操作和消息发送事务的一致性

  • 下游业务操作和消息消费事务的一致性

也就是:

  • 消息发送一致性:上游主分支事务与消息发送事务的一致

  • 消息消费一致性:下游支分支事务与消息消费事务的一致

消息发送一致性

常规的消息发送无法保证消息发送的一致性。常见的解决方案有:

  1. 分布式事务协议XA

  1. 本地事务表

  1. 独立消息服务

  1. 消息队列事务消息

  1. CDC消息同步

  1. 消息确认

  1. 实时计算

  1. 分布式事务协议XA

消息队列的引入是为解决服务耦合与性能问题,XA协议因为其性能较差,所以一般不会采用该方案。

  1. 本地事务表

本地事务表核心思路是新增本地消息表,业务操作与消息写入利用本地事务一致性提交。

本地事务表交互流程如下:

  1. 应用业务操作和消息写入使用本地事务一致性提交

  1. 应用定时程序,扫描消息表,发送消息到消息队列,并更新消息状态

该方案:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

salahi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值