分布式 接口限流(漏桶/令牌桶算法)
简介:每一个对外提供的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防刷限流