面试官如果让你设计一个消息中间件如何将其网络通信性能优化倍以上石杉的架构笔记
目录
1、客户端与服务端的交互
2、频繁网络通信带来的性能低下问题
3、batch机制:多条消息打包成一个batch
4、request机制:多个batch打包成一个request
“这篇文章,给大家聊一个消息中间件相关的技术话题,对于一个优秀的消息中间件而言,客户端与服务端通信的时候,对于这个网络通信的机制应该如何设计,才能保证性能最优呢?甚至通过优秀的设计,让性能提升10倍以上。
我们本文就以Kafka为例来给大家分析一下,Kafka在客户端与服务端通信的时候,底层的一些网络通信相关的机制如何设计以及如何进行优化的。
1、客户端与服务端的交互
假如我们用kafka作为消息中间件,势必会有客户端作为生产者向他发送消息,这个大家应该都可以理解。
对于Kafka来说,他本身是支持分布式的消息存储的,什么意思呢?
比如说现在你有一个“Topic”,一个“Topic”你就可以理解为一个消息数据的逻辑上的集合。
比如现在你要把所有的订单数据都发送到一个“Topic”里去,那么这个“Topic”就叫做“OrderTopic”,里面都放的是订单数据。
接着这个“Topic”的数据可能量很大很大,不可能放在一台机器上吧?
所以呢,我们就可以分散存储在多台Kafka的机器上,每台机器存储一部分的数据即可。
这就是 Kafka的分布式消息存储的机制,每个Kafka服务端叫做一个Broker,负责管理一台机器上的数据。
一起来看看下面的图:
一个“Topic”可以拆分为多个“Partition”,每个“Partition”存储一部分数据,每个Partition都可以放在不同的Kafka Broker机器上,这样就实现了数据分散存储在多台机器上的效果了。
然后客户端在发送消息到Kafka Broker的时候,比如说你限定了“OrderTopic”的订单数据拆分为3个“Partition”,那么3个“Partition”分别放在一个Kafka Broker上,那么也就是要把所有的订单数据分发到三个Kafka Broker上去。
此时就会默认情况下走一个负载均衡的策略,举个例子,假设订单数据一共有3万条,就会给每个Partition分发1万条订单消息,这样订单数据均匀分散在了3台Broker机器上。
整个过程,如下图所示:
2、频繁网络通信带来的性能低下问题
好了,现在问题来了,客户端在发送消息给Kafka Broker的时候,比如说现在要发送一个订单到Kafka上去,此时他是怎么发送过去呢?
是直接一条订单消息就对应一个网络请求,发送到一台Broker上去吗?
如果是这样做的话,那势必会导致频繁的跟一台broker进行网络通信,频繁的网络通信,每次都涉及到复杂的网络连接、传输的流程,那么进而会导致客户端性能的低下。
给大家举个例子,比如说每次通过一个网络通信发送一条订单到broker,需要耗时10ms。
那么如果一个订单就一次网络通信发送到broker,每秒最多就是发送100个订单了,大家想想,是不是这个道理?
但是假如说你每秒有10000个订单要发送,此时就会造成你的发送性能远远跟不上你的需求,也就是性能的低下,看起来你的系统发送订单到kafka的速度就是特别的慢。
3、batch机制:多条消息打包成一个batch
所以首先针对这个问题,kafka做的第一个优化,就是实现了 batch机制。
这个意思就是说,他会在客户端放�
- 原文作者:知识铺
- 原文链接:https://geek.zshipu.com/post/%E4%BA%92%E8%81%94%E7%BD%91/%E9%9D%A2%E8%AF%95%E5%AE%98%E5%A6%82%E6%9E%9C%E8%AE%A9%E4%BD%A0%E8%AE%BE%E8%AE%A1%E4%B8%80%E4%B8%AA%E6%B6%88%E6%81%AF%E4%B8%AD%E9%97%B4%E4%BB%B6%E5%A6%82%E4%BD%95%E5%B0%86%E5%85%B6%E7%BD%91%E7%BB%9C%E9%80%9A%E4%BF%A1%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96%E5%80%8D%E4%BB%A5%E4%B8%8A%E7%9F%B3%E6%9D%89%E7%9A%84%E6%9E%B6%E6%9E%84%E7%AC%94%E8%AE%B0/
- 版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。
- 免责声明:本页面内容均来源于站内编辑发布,部分信息来源互联网,并不意味着本站赞同其观点或者证实其内容的真实性,如涉及版权等问题,请立即联系客服进行更改或删除,保证您的合法权益。转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。也可以邮件至 sblig@126.com