系统性能调优必知必会
陶辉
智链达 CTO,前阿里云 P8 高级技术专家
36367 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 47 讲
系统性能调优必知必会
15
15
1.0x
00:00/00:00
登录|注册

27 | 消息队列:如何基于异步消息提升性能?

实践中使用消息队列的问题
exactly once
at least once
at most once
Kafka每秒处理百万条消息
Kafka每秒处理10万条消息
实时监控系统
Y轴拆分功能
生产者具备异步功能
提高系统可用性
实现削峰填谷
可伸缩性
降低系统耦合性
监控成本
维护负载均衡组件
实现BASE理论中的Basically Available
削峰填谷
组件间耦合
write-back模式向缓存写入数据
gRPC提供的异步API
思考题
服务质量
性能
优点
问题
异步消息提升性能
消息队列

该思维导图由 AI 生成,仅供参考

你好,我是陶辉。
在前 26 讲中我们介绍了许多异步实现机制,这节课我们来看看如何通过消息队列提升分布式系统的性能。
异步通讯是最常用的性能提升方式,比如 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
立即购买
登录 后留言

全部留言(4)

  • 最新
  • 精选
  • NullPointer
    我们以前碰到过rabbitmq的过量保护,临时解决方案是升级SSD,进阶方案是重新分配忙碌的队列,最终升级了新版本,可以允许接近e级的数据积压

    作者回复: 谢谢NullPointer的分享!

    2020-07-17
    7
  • Eric
    消息队列作为生产者和消费者之间的第三方组件,为了应对消息队列可能出现的异常,消费者服务的幂等性非常重要。还有一个问题请教老师,监控可以及时发现消息队列的积压,请问除了消息队列的重放外,业界有没有其他成熟的处理方案?
    2020-08-17
    2
  • 始之源稳于心
    老师,我问一下24讲 一致性哈希的思考题。为什么 一致性哈希 与 元数据反向代理服务 是两个不同的方案?我觉得,一致性哈希应该是代理服务在实现数据与节点的映射时的方法,不知道这个想法有什么问题,希望老师能指点一下。 另外希望老师能定期将类似思考题的答案或者是解决思路公布一下。
    2020-07-18
    2
  • Bug? Feature!
    消息队列可以做到:1,异步提升性能;2,流量削峰填谷;3,系统之间解耦。
    2020-11-06
收起评论
显示
设置
留言
4
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部