集群:哪些环节会存在性能瓶颈和数据可靠性风险?

135 阅读3分钟

消息队列的性能和可靠性由生产者、Broker 集群、消费者三方共同保障,而不只是服务端的工作。

通常衡量集群性能的一个重要指标是全链路耗时,即客户端发出一条消息到消费者消费到这条消息的时间差。

生产者的性能和可靠性

在网络层面,对性能和可靠性的影响主要包括连接协议、传输加密、网路稳定性、网络延时、网络带宽五个方面。

一般我们会关注客户端节点网卡、中间网络链路、Broker 节点的网卡三个部分的带宽容量。经常忽略且不容易分析的是中间网络带宽的使用情况,比如在跨地域传输、跨云传输的场景下,中间网络带宽很容易成为瓶颈。

在 SDK 层面,对性能和可靠性的影响主要包括发送模式、批量语义、异常处理、生产者数量四个方面。发送模式的设计思想是希望在性能和可靠性之间寻找平衡。

Broker 的性能和可靠性

Broker 的性能和可靠性分为单机和集群两个维度。单机维度属于垂直扩容,集群维度属于水平扩容。

在单机维度,Broker 的性能和可靠性提升可以拆成应用程序、操作系统、物理硬件三个层面。

消息队列集群维度性能和可靠性的核心,包括分区、副本、集群构建、数据一致性、集群可靠性和性能等等几个方面。

消费者的性能和可靠性

消费者的性能和可靠性也分为客户端 SDK 和网络两个部分。

在消费性能方面,我们主要关注延时和堆积两个指标。延时是指 Broker 保存一条消息后,这条消息被客户端消费到的时间差。堆积是指 Broker 堆积很多消息没有被及时消费。

消费者的性能和可靠性主要跟消费模型、消费重平衡、消费模式、位点提交四个方面有关。

为了提高消息消费的及时性,最好是选择 Push 模型,即服务端有消息后主动 Push 给多个客户端,此时的消费的延时是最低的。从提高吞吐来看,为了避免服务端堆积,主流消息队列都是通过客户端主动批量 Pull 数据来提高吞吐、避免堆积。一般情况下,Pull 模型都是默认的消费模型。

在消费端,对性能影响最大的是网络链路的耗时。网络耗时会极大影响消费的性能,特别是在跨区、跨地域消费的情况下,问题会更加明显。所以建议你就近部署和消费。


此文章为11月Day14学习笔记,内容来源于极客时间《深入拆解消息队列 47 讲》