常见限流算法之漏桶算法、令牌桶算法

在大型的网站中,高并发往往不能避免,就会涉及到一定的限流

限流

在系统的每个API以及服务中,每个接口的访问都有一定的上限,当达到接口承受的范围的时候,就有必要采取一定的措施来保证服务的可用性和降级处理,防止超过预期系统压力过大导致瘫痪等。所以对每个服务或者接口进行访问限制,进行拒绝访问、排队等待服务以及引流等

 

常见的限流算法有漏桶算法和令牌通算法

漏桶算法

常见限流算法之漏桶算法、令牌桶算法_第1张图片

从上图可见,一个漏桶(Leaky Bucket)可以承受很多的水(请求),然后以一定的速度出水,进行路由下一级服务请求,但每个接口也有相应的速率,当水流过大,请求突然剧增,那么漏桶会在短时间内迅速装满,然后就会拒绝其他的请求,漏桶算法可以强行限制请求的访问以及数据的传输速率

令牌通算法

常见限流算法之漏桶算法、令牌桶算法_第2张图片

令牌通算法以一定恒定的速度往桶里面放入令牌,就好比漏桶的水(请求),比如放入1000个令牌,每来一次请求,就从令牌通里面拿一个令牌,当令牌被拿完之后,其他服务就拒绝或者等待服务。

大小固定的令牌桶可自行以恒定的速率源源不断地产生令牌。如果令牌不被消耗,或者被消耗的速度小于产生的速度,令牌就会不断地增多,直到把桶填满。后面再产生的令牌就会从桶中溢出。最后桶中可以保存的最大令牌数永远不会超过桶的大小

 

相对比,漏桶算法强制限制一定的传输速率,而令牌通可以限制船速速率之外,还可以应对一些突发情况。

 

你可能感兴趣的:(java,微服务,分布式)