不论是对于令牌桶拿不到令牌被拒绝 , 还是漏桶的水满了溢出 , 都是为了保证大部分流量的正常使用 , 而牺牲掉了少部分流量 , 这是合理的 , 如果因为极少部分流量需要保证的话 , 那么就可能导致系统达到极限而挂掉 , 得不偿失 。
文章插图
限流神器:Guava RateLimiter
Guava不仅仅在集合、缓存、异步回调等方面功能强大 , 而且还给我们封装好了限流的API!
Guava RateLimiter基于令牌桶算法 , 我们只需要告诉RateLimiter系统限制的QPS是多少 , 那么RateLimiter将以这个速度往桶里面放入令牌 , 然后请求的时候 , 通过tryAcquire()方法向RateLimiter获取许可(令牌) 。
文章插图
分布式场景下的限流
上面所说的限流的一些方式 , 都是针对单机而言的 , 其实大部分的场景 , 单机的限流已经足够了 。分布式下限流的手段常常需要多种技术相结合 , 比如Nginx+Lua , redis+Lua等去做 。本文主要讨论的是单机的限流 , 这里就不在详细介绍分布式场景下的限流了 。
一句话 , 让系统的流量 , 先到队列中排队、限流 , 不要让流量直接打到系统上 。
来自51CTO博客作者zfz_linux_boy作品
推荐阅读
- 如何挑选高粱
- 如何挑选鱿鱼
- 如何挑选香榧
- 恒福,对话器与茶 共谋茶具行业未来
- 咸丰县高乐山镇,建设苗圃基地为茶农减负
- 高新科技草本提炼之茶叶也能排毒保健
- 四统促建成贵最大高端绿茶生产合作社
- 漂亮对男人更有吸引力吗?研究发现,女性拥有这3样东西才可以
- 味精是否真的对人体有害?
- 机械表芝麻链是什么意思?为何能提高走时精度,芝麻链工作原理