分布式系统中消息队列常用于解决服务解耦,异步通信等问题,从而实现服务高性能,以及业务最终一致性。
这里业务最终一致性指消息上游业务和消息下游业务,在一段时间延迟后,业务逻辑的正确性。
为保证最终一致性,就需要上下游对某个业务操作执行一致的逻辑,同时成功或同时失败。
而业务操作的事件我们是通过消息来传递的,那就要求业务操作与消息传递一致性:
上游业务操作和消息发送事务的一致性
下游业务操作和消息消费事务的一致性
也就是:
消息发送一致性:上游主分支事务与消息发送事务的一致
消息消费一致性:下游支分支事务与消息消费事务的一致
消息发送一致性
常规的消息发送无法保证消息发送的一致性。常见的解决方案有:
分布式事务协议XA
本地事务表
独立消息服务
消息队列事务消息
CDC消息同步
消息确认
实时计算
分布式事务协议XA
消息队列的引入是为解决服务耦合与性能问题,XA协议因为其性能较差,所以一般不会采用该方案。
本地事务表
本地事务表核心思路是新增本地消息表,业务操作与消息写入利用本地事务一致性提交。
本地事务表交互流程如下:
应用业务操作和消息写入使用本地事务一致性提交
应用定时程序,扫描消息表,发送消息到消息队列,并更新消息状态
该方案:

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

1万+

被折叠的 条评论
为什么被折叠?



