计数器
滑动窗口
漏桶算法
令牌桶算法
算法对比
计数器 VS 滑动窗口
计数器算法是最简单的算法,可以看成是滑动窗口的低精度实现。滑动窗口由于需要存储多份的计数器(每一个格子存一份),所以滑动窗口在实现上需要更多的存储空间。也就是说,如果滑动窗口的精度越高,需要的存储空间就越大。
漏桶算法 VS 令牌桶算法
漏桶算法和令牌桶算法最明显的区别是令牌桶算法允许流量一定程度的突发。因为默认的令牌桶算法,取走token是不需要耗费时间的,也就是说,假设桶内有100个token时,那么可以瞬间允许100个请求通过。
令牌桶算法由于实现简单,且允许某些流量的突发,对用户友好,所以被业界采用地较多。当然我们需要具体情况具体分析,只有最合适的算法,没有最优的算法。
拓展
- 阿里实现的Sentinel 采用滑动窗口算法LeapArray
https://github.com/alibaba/Sentinel/wiki/介绍
但需要额外部署管理后台应用。 - Guava库实现了令牌桶算法,但是单机的实现。
Reference
- https://www.cnblogs.com/wuzhenzhao/p/11453649.html
- https://github.com/alibaba/Sentinel/wiki/介绍
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/229147.html原文链接:https://javaforall.net
