SOA架构之限流

参考:

服务限流

1. 限流的作用

限流主要的作用是保护服务节点或者集群后面的数据节点,防止瞬时流量过大使服务和数据崩溃(如前端缓存大量实效),造成不可用;还可用于平滑请求。

2. 限流算法

限流算法有两种:

  • 一种就是简单的请求总量计数
  • 一种就是时间窗口限流(一般为1s),如令牌桶算法和漏牌桶算法就是时间窗口的限流算法

令牌桶算法(token Bucket)

  1. 系统以固定速率将令牌放入一个固定容量的令牌桶中,当令牌桶满时,系统将放弃添加新的令牌到桶中
  2. 客户的每一次请求都会消耗桶中的令牌,当桶中没有令牌时则放弃这次请求或者等待直到桶有新的令牌添加。

漏桶算法(Leaky Bucket)

漏桶算法和令牌桶算法思路一样


 
  1. 每一次请求都将令牌放入令牌桶中,如果桶满则放弃这次请求或者等到桶为空
  2. 系统以固定的速度消耗令牌直到桶为空

可以看出来和令牌桶思路一样,只是角色互换,方向相反,实现上可以使用第三方框架来学习,也可以使用Java阻塞队列来实现,或者使用Redis的List来实现。

原文地址:https://www.cnblogs.com/yeahwell/p/7518514.html