漏桶算法与令牌桶算法简介

前言

我们项目中的API接口都是有访问上限的,当访问频率或者并发量超过其承受范围时,我们就必须考虑限流来保证接口的可用性。防止非预期的请求对系统压力过大而引起的系统瘫痪。本篇文章会介绍限流算法中比较常见的漏桶算法和令牌桶算法。

漏桶算法

漏桶算法比较简单:首先有一个固定容量的漏桶,然后请求会先进入漏桶,漏桶会以一定的速率放出请求。如果请求进入漏桶的速率过大则会溢出,溢出部分请求会被丢弃。

示意图如下:

漏桶算法示意图

ps:图片来源于网络,侵删。

令牌桶算法

令牌桶算法:首先有一个存放了固定数量的令牌的桶,然后请求过来,会先从令牌桶中获取令牌,拿到令牌的请求会被处理。系统需要以一个恒定的速率向令牌桶中添加令牌,如果桶满时,新添加的令牌会被丢弃或拒绝;如果令牌桶中没有令牌,则拒绝服务或者阻塞。添加令牌的速率:

示意图如下:

令牌桶算法示意图

ps:图片来源于网络,侵删。

漏桶算法和令牌桶算法对比

令牌桶算法限制的是平均流入速率,允许某种程度的突发传输,即只要有足够的令牌,支持一次拿2个令牌,3个令牌或者更多;而漏桶算法限制的是常量流出速率 ,即漏桶放出请求的速率是一个固定的常量值,不能这次是1,下次是2。

总结

这篇文章主要是介绍了漏桶算法和令牌桶算法的原理,在项目中我们可以根据业务场景选择合适的限流算法。

欢迎关注博主其他的文章。

感谢您的支持!

本文标题:漏桶算法与令牌桶算法简介

文章作者:yoga

发布时间:2018年03月26日 - 13:03

原始链接:https://yoga0521.github.io/2018/03/26/漏桶算法与令牌桶算法简介/

版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。 转载请注明出处!