重要的服务需要做流量控制,保证服务正常工作。常见的招数有如下:
- 每秒会有 r 个令牌放入桶中,或者说,每过 1/r 秒桶中增加一个令牌
- 桶中最多存放 b 个令牌,如果桶满了,新放入的令牌会被丢弃
- 当一个 n 字节的数据包到达时,消耗 n 个令牌,然后发送该数据包
- 如果桶中可用令牌小于 n,则该数据包将被缓存或丢弃
- 数据被填充到桶中,并以固定速率注入网络中,而不管数据流的突发性
- 如果桶是空的,不做任何事情
- 主机在每一个时间片向网络注入一个数据包,因此产生一致的数据流
小结:
如果是一个服务希望限流的话,可以在服务的上游使用时间漏桶,在服务的接口上使用令牌桶。
调用方(使用漏桶)--> (使用令牌桶) 限流服务