作者回复: 你好,思考的非常全面,我尝试对你的这些思考,做一个补充说明: 1、引入了MQ,整个系统就多增加了一项外部依赖,出现问题的几率确实会增大,通常的解决方案确实如你所说,MQ需要使用集群部署。 2、第二点,这里我觉得你思考的比较全面,但措施可能有些悲观,我在这里谈谈我的一些观点: 1)消息发送端,设置合理的ack,这个是正确的,通常采取的措施一般类似两阶段提交思想,通过引入半消息,本地消息表来实现消息发送的分布式最终一致性,这块内容在第22讲有重点提及。 2)MQ服务端数据丢失,采取同步刷盘,这样会降低性能,资源的利用率会升高,通常我们会进行权衡,一般而言,只要数据容易恢复,容易进行补偿,通常还是可以使用异步刷盘。关于消费端消息丢失,消息中间件基本都是采取最小位点提交机制(ack),可以确保在消费端不会丢消息,最多就是会重复消费。 3、一致性问题,通常会使用类似分布式事务机制,例如本地消息表等手段,这块在第22讲有专门介绍,当然对账或手动修复,也是需要的。
作者回复: 对的,笔误,谢谢指正,已修改。
作者回复: 嗯,对的,如何来做分布式事务,我在我们专栏的第22讲专门介绍了,建议关注一下,多多交流。