分布式 接口限流(漏桶/令牌桶算法)

简介:每一个对外提供的API接口都是需要做流量控制的,不然会导致系统直接崩溃,如果API上的流量请求超过核定的数值,我们就得对请求进行分流或者直接拒绝等操作。

一、限流

  1. 作用:由于业务应用系统的负载能力有限,为了防止非预期的请求对系统压力过大而拖垮业务应用系统;

  2. 大流量控制策略:分流、降级、限流;

  3. 限流策略:客户端限流、Nginx限流、服务端限流和数据库限流;

  4. 限流算法:漏桶算法和令牌桶算法,经常用在流量整形或速率限制中。

 

二.、漏桶算法(Leaky Bucket)

  1. 原理:把请求比作水,水先进入漏桶里,漏桶以一定的速度出水,当水注入速率超过出水速率时就会导致水直接溢出,然后就拒绝请求服务;

  2. 特点:能限制数据的传输速率,平滑网络上的突发流量,但不适合于有突发特征的流量场景;

  3. 应用场景:必须读写分离的情况下,限制读取的速率。

 

三、令牌桶算法(Token Bucket)

  1. 原理:系统会以一个恒定的速度往桶里放入令牌,如果请求需要被处理,则先需要从桶里获取一个令牌,当桶里没有令牌可取时,则拒绝服务;

  2. 特点

    A. 在能够限制数据的平均传输速率外,还允许某种程度的突发传输;

    B. 与漏桶算法是相反的,一个是“进水”,一个是“出水”;

  3. 应用场景:必须读写分离的情况下,限制写的速率。

 

四、限流工具

  1. 工具类:RateLimiter;  

  2. 基于Redis实现;

  3. 使用Semphore进行并发控制。

 

可参考:使用Redis进行API防刷限流

    开放API接口签名验证

posted @ 2020-08-25 10:29  如幻行云  阅读(1354)  评论(0编辑  收藏  举报