27 | 消息队列:如何基于异步消息提升性能?
陶辉
该思维导图由 AI 生成,仅供参考
你好,我是陶辉。
异步通讯是最常用的性能提升方式,比如 gRPC 提供的异步 API,或者基于 write-back 模式向缓存写入数据时,系统性能都可以提高。然而,对于复杂的大规模分布式系统,这些分散、孤立的异步实现机制,无法解决以下问题:
组件间耦合在一起,不只迭代变更时更为困难,而且当它们之间的性能有差异时,吞吐量较低的组件就会成为系统瓶颈;
当业务在时间上具有明显的峰谷访问差异时,实现削峰填谷需要一定的开发成本;
实现 BASE 理论中的 Basically Available 并不容易;
每个组件都要自行维护负载均衡组件,以此提供可伸缩性;
每个组件的请求格式、日志都不尽相同,因此系统总体的监控成本相对较高;
批量处理请求、异步化都可以提升性能,但每个组件独立实现这些基础功能付出的成本并非完全必要。
想必你肯定听过 Kafka、RabbitMQ、RocketMQ 这些流行的消息队列吧?通过消息队列实现组件间的异步交互方式,上述问题就会迎刃而解。这一讲我们就来看看如何在分布式系统中使用消息队列,以及高可用性又是如何保证的。
消息队列解决了哪些问题?
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
消息队列在分布式系统中扮演着重要角色,通过异步消息提升性能。文章介绍了消息队列解决的问题和服务质量保障。首先,消息队列降低了系统的耦合性,提高了可伸缩性,实现了“削峰填谷”功能,提高了系统可用性,降低了数据规模,提供了实时监控。其次,消息队列的服务质量通过at least once级别的QoS保证消息不丢失,且消费端不会重复消费消息。文章还介绍了消息队列的性能优化点,包括网络通讯效率、磁盘写入速度和缓存命中率。总之,消息队列作为分布式系统的基础设施,具有高性能和服务质量保障,对于提升系统性能和可靠性具有重要意义。消息队列可以解耦分布式系统,其缓存的消息提供了削峰填谷功能,将消息持久化则提高了系统可用性,共享队列则为系统提供了可伸缩性,而且统计消息就可以监控整个系统,因此消息队列已成为当下分布式系统的必备基础设施。虽然消息队列自身拥有优秀的性能,但若想提高使用效率,我们就需要确保在生产端实现网络传输上的并发,在消费端扩容时同步增加队列或者分区,并且需要持续监控系统,确保消息的生产能力小于消费能力,防止消息积压。消息队列的Qos提供三种语义,其中at most once很少使用,而主流的at least once由消息持久化时的冗余,以及生产端、消息端使用消息的方式共同保障。Kafka通过幂等性、事务消息这两个特性,在at least once的基础上提供了exactly once语义。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《系统性能调优必知必会》,新⼈⾸单¥59
《系统性能调优必知必会》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(4)
- 最新
- 精选
- NullPointer我们以前碰到过rabbitmq的过量保护,临时解决方案是升级SSD,进阶方案是重新分配忙碌的队列,最终升级了新版本,可以允许接近e级的数据积压
作者回复: 谢谢NullPointer的分享!
2020-07-177 - Eric消息队列作为生产者和消费者之间的第三方组件,为了应对消息队列可能出现的异常,消费者服务的幂等性非常重要。还有一个问题请教老师,监控可以及时发现消息队列的积压,请问除了消息队列的重放外,业界有没有其他成熟的处理方案?2020-08-172
- 始之源稳于心老师,我问一下24讲 一致性哈希的思考题。为什么 一致性哈希 与 元数据反向代理服务 是两个不同的方案?我觉得,一致性哈希应该是代理服务在实现数据与节点的映射时的方法,不知道这个想法有什么问题,希望老师能指点一下。 另外希望老师能定期将类似思考题的答案或者是解决思路公布一下。2020-07-182
- Bug? Feature!消息队列可以做到:1,异步提升性能;2,流量削峰填谷;3,系统之间解耦。2020-11-06
收起评论