RabbitMQ的流量控制策略

RabbitMQ的流量控制策略

什么是流量控制

流量控制,是一个在计算机网络和网络软件中已存在数十年的概念。本质上,它是一种向发送者施加背压来避免接收者过载的机制。

通常来讲,接收者会以缓冲数据包(或者消息)的方式来处理超过其处理能力的请求。比如网络线程会将接收到的请求数据,push到业务线程的线程队列中,业务线程从自己的线程队列获取请求消息进行处理。业务线程因需要进行大量的计算,每秒只能处理1000个请求消息,而网络线程业务高峰期时每秒接收了2000个来自客户端的请求,无法及时得到处理的请求消息,都被缓存在线程队列中。

但是内存有限制,接收者的缓冲区不可能永远增长,因此,要么发送速率暂时超过接收者处理能力(突发流量),或者发送者必须降低发送速度(背压策略)。

流量控制是一种对发送者施加背压,使其减慢发送速度的方式,使接收者的缓冲区不会溢出,并且延迟不会变得太大。在发送者/接收者数据链路中,这种背压可以沿调用链向上传播到流量的起点。在更为复杂的连接链路图中,流量控制可以平衡快速发送者和慢速发送者之间的入口流量,避免过载,即使在发送者数量不同、速率不同、负载模式不同(稳定或突发)的情况下,系统仍然可以达到最高利用率。

RabbitMQ中的流控制

RabbitMQ看起来很像一个网络。内部的每个RabbitMQ代理都通过Actor模型实现,Actor模型是指,不同的组件之间通过消息传递相互通信,有时通过本地通信,有时通过网络通信。通过网络,生产者将消息发布给代理,消费者从代理接收消息。
消息流的简单描述
在消息流转链路图的任一时间点,都有可能出现瓶颈,导致拥塞。拥塞会导致缓冲区和端口使用完,磁盘上的数据会增长,而硬件资源消耗很少(可以理解为此时在等待IO,系统负荷会比较高,但CPU使用率不一定高)。如果不加控制,RabbitMQ可能会耗尽所有可用内存,从而导致崩溃或被操作系统杀死。

从整个系统的角度来看,我们有四种可用的流量控制机制:

  • 基于信任的流控机制
  • 内存告警
  • 发布者confirms
  • 消费者confirms和预取机制

原文: Quorum Queues and Flow Control – The Concepts

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值