设计一个基于用户的API限流策略 Rate Limit
应用场景
API接口的流量控制策略:缓存、降级、限流。限流可以认为服务降级的一种,限流就是限制系统的输入和输出流量已达到保护系统的目的。限流策略虽然降低了服务接口的访问频率和并发量,却换取服务接口和业务应用系统的高可用。
常用的限流策略:
-
Nginx
限流按照一定的规则如帐号、IP、系统间调用逻辑等在
Nginx
层面做限流 -
业务系统限流
-
客户端限流
-
服务端限流
-
-
数据库限流
常用限流算法
-
计数器
计数器是最简单粗暴的算法,通过直接统计每个时间的请求数目来判断是否需要拒绝。
比如某个服务最多只能每秒钟处理
100
个请求。我们可以设置一个1
秒钟的滑动窗口,窗口中有10
个格子,每个格子100
毫秒,每100
毫秒移动一次,每次移动都需要记录当前服务请求的次数。内存中需要保存10
次的次数。可以用数据结构LinkedList
来实现。格子每次移动的时候判断一次,当前访问次数和LinkedList
中最后一个相差是否超过100
,如果超过就需要限流了。