美文网首页
API网关(5) --限流

API网关(5) --限流

作者: 沉沦2014 | 来源:发表于2019-01-16 11:33 被阅读14次

    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对的缓存失效时间,否则就变成了信号量限制请求了

    相关文章

      网友评论

          本文标题:API网关(5) --限流

          本文链接:https://www.haomeiwen.com/subject/lqapdqtx.html