对高并发流量控制的一点思考( 二 )


不论是对于令牌桶拿不到令牌被拒绝 , 还是漏桶的水满了溢出 , 都是为了保证大部分流量的正常使用 , 而牺牲掉了少部分流量 , 这是合理的 , 如果因为极少部分流量需要保证的话 , 那么就可能导致系统达到极限而挂掉 , 得不偿失 。

对高并发流量控制的一点思考

文章插图
 
限流神器:Guava RateLimiter
Guava不仅仅在集合、缓存、异步回调等方面功能强大 , 而且还给我们封装好了限流的API!
Guava RateLimiter基于令牌桶算法 , 我们只需要告诉RateLimiter系统限制的QPS是多少 , 那么RateLimiter将以这个速度往桶里面放入令牌 , 然后请求的时候 , 通过tryAcquire()方法向RateLimiter获取许可(令牌) 。

对高并发流量控制的一点思考

文章插图
 
分布式场景下的限流
上面所说的限流的一些方式 , 都是针对单机而言的 , 其实大部分的场景 , 单机的限流已经足够了 。分布式下限流的手段常常需要多种技术相结合 , 比如Nginx+Lua , redis+Lua等去做 。本文主要讨论的是单机的限流 , 这里就不在详细介绍分布式场景下的限流了 。
一句话 , 让系统的流量 , 先到队列中排队、限流 , 不要让流量直接打到系统上 。
来自51CTO博客作者zfz_linux_boy作品




推荐阅读