作者:禅与计算机程序设计艺术
1.简介
在消息驱动系统(Message-driven systems)中,流动的数据消息经过一个管道或通道,从源头传输到达目的地,最终被消费者消费处理。对于中间件的设计者而言,如何控制数据处理速度、确保资源的合理利用、避免死锁、及时释放占用资源等方面均是一项复杂的工作。其中重要的一环便是数据流控制策略——令牌速率限制器(Token Rate Limiters)。
什么是令牌速率限制器?简单来说,它是一个将消费者所需的服务质量作为目标,通过限制生产者发送数据的速率来约束消费者对数据的处理能力的一种方式。简单的说,消费者要处理的数据越多,令牌速率限制器就需要允许生产者发送更多的数据,直到消耗掉所有的令牌为止。这就像车站出行控制系统一样,只有足够的车票供消费者选择乘坐的交通工具。如果没有足够的车票,则会阻碍他乘坐其它交通工具。类似的道理,生产者可以控制自己发送数据的速率,以保证消费者对其处理能力的合理利用。
而实现令牌速率限制的方法有很多种,比如滑动窗口、请求过滤器、丢包重传算法等。本文主要介绍两种最基本的、被广泛使用的令牌速率限制器——基于时间间隔的限速器(Time Interval based Limiter)和基于消息大小的限速器(Size-based Limiter)。
2.基本概念术语说明
2.1 消息
首先,我们需要了解一下什么是消息。所谓消息,就是指数据的载体。一般情况下,一条消息通常由几个属性组成,包括消息ID、消息类型、创建时间、内容等。消息的内容可能是各种各样的信息,如日志信息、文本消息、图像、视频流等。消息除了提供数据的