安全稳定的Open API必须有限频措施,防止接口被某个用户非预期超量调用,影响正常用户使用
常用的限流算法有直接计数法,漏斗算法,令牌桶算法
计数法
单位时间内设定限频阈值,如果访问超过该阈值则拒绝。实现简单,缺点是容易在小突发流量情况下,拒绝很多请求,影响服务可用性
漏斗算法(Leaky Bucket)
核心思想就是请求收到后,会先进入漏斗,然后再按照限定速度请求服务,及可以达到限流的目的,也可以保证后台收到的请求都是平稳的。 但是也有一个缺点,就是突然流量的时候,会导致处理时间太长。当然流量更大的时候会被拒绝,这个是正常的。
常见实现方式有:限制大小的队列
令牌桶(Token Bucket)
核心思想是所有请求需要再令牌桶获取到令牌才可以处理, 同时有一个服务匀速的往令牌桶装令牌。
可以满足一定的突发请求处理,如果超过令牌桶的请求,也会被拒绝
常见实现方式有:gauva包中的RateLimiter
网友评论