API网关(5) --限流

1.使用场景及需求

在高并发场景下,限流往往是控制服务器负载压力的一个可选方案,而在Spring Cloud Zuul上实现限流只需要编写一个过滤器就可以实现

备注:

  • 这里的限流是限制单位时段内对某个微服务或API的最大请求数,控制的是接受请求的速率
  • 信号量不同,信号量限制的是任意时间应用的可接受的最大请求数,当请求结束,该请求持有的信号量会相应释放

2.本地网关限流(限流计数器保存在网关内存)

在这种场景下,限流计数器使用Google Guava提供的工具RateLimiter。RateLimiter是令牌桶限流算法的一个封装实现,具体可以自行查阅

3.分布式限流(限流计数器保存在Redis)

此方案使用redis的缓存失效机制实现限流计数器,但网关需要依赖redis,每接受一个请求就要去redis查计数器,极大增加了时间成本,故不推荐使用

3.1 实现逻辑

一个微服务(或RESTApi)对应redis中的一个KV对,K值存储微服务的serviceId,V值存储该微服务的剩余可调用次数,请求每调用一次,计数器增加1,若在缓存失效时间内计数器未超过阀值,则可以处理任务。注意:必须设置KV对的缓存失效时间,否则就变成了信号量限制请求了

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容