一 、业务场景
在做项目系统接口服务的时候,为了防止客户端对于接口的滥用、保护服务器的资源, 通常来说我们会对于服务器上的各种接口进行请求次数的限制。比如对于某个用户,他在一个时间段内,比如 1 0秒,请求服务器接口的次数不能够大于一个上限,比如说5次。如果用户调用接口的次数超过上限的话,就直接拒绝用户的请求,返回错误信息。
服务接口的流量控制策略:限流、分流、降级、熔断等。本文讨论下限流策略,虽然降低了服务接口的访问频率和并发量,却换取服务接口和业务应用系统的高可用。
二、常用的限流算法
1、漏桶算法
漏桶(Leaky Bucket)算法思路比较简单,水(请求)先进入到漏桶里,漏桶以一定的速度出水(接口有响应速率),当水流进速度过大会直接导致桶溢出(访问频率超过接口响应速率),然后就拒绝请求,这里我们可以得出结论:漏桶算法能强行限制数据的传输速率。
漏桶算法的话一般有两个变量,一个是桶的大小,也就是你的承载量,比如流量突发增多时可以存多少的水,另一个就是你能够去正常处理的请求,水桶漏洞的大小。
因为漏桶的漏出速率是固定的,所以即使网络中不存在资源冲突(没有发生拥塞),漏桶算法也不能使流