分布式系统架构常见的三种限流算法

分布式系统架构常见的三种限流算法如下:

1、计数器算法
计数器算法是限流算法里最简单也是最容易实现的一种算法。比如我们规定,对于A接口来说,我们1分钟的访问次数不能超过100个。那么我们可以这么做:在一开 始的时候,我们可以设置一个计数器counter,每当一个请求过来的时候,counter就加1,如果counter的值大于100并且该请求与第一个 请求的间隔时间还在1分钟之内,那么说明请求数过多;如果该请求与第一个请求的间隔时间大于1分钟,且counter的值还在限流范围内,那么就重置 counter。counter实现一般使用AutomicLong实现。多见于秒杀、抢购的场景。
  
2、漏桶算法

分布式系统架构常见的三种限流算法_第1张图片

  漏桶算法其实很简单,可以粗略的认为就是注水漏水过程,往桶中以一定速率流出水,以任意速率流入水,当水超过桶流量则丢弃,因为桶容量是不变的,保证了整体的速率。
 
3、令牌桶算法

分布式系统架构常见的三种限流算法_第2张图片
令牌桶算法是比较常见的限流算法之一,大概描述如下:
 1)、所有的请求在处理之前都需要拿到一个可用的令牌才会被处理;
 2)、根据限流大小,设置按照一定的速率往桶里添加令牌;
 3)、桶设置最大的放置令牌限制,当桶满时、新添加的令牌就被丢弃或者拒绝;
 4)、请求达到后首先要获取令牌桶中的令牌,拿着令牌才可以进行其他的业务逻辑,处理完业务逻辑之后,将令牌直接删除;
 5)、令牌桶有最低限额,当桶中的令牌达到最低限额的时候,请求处理完之后将不会删除令牌,以此保证足够的限流;

你可能感兴趣的:(分布式架构,架构,java,开发语言)