为什么要限流?限流具体都有哪些策略?限流的实现方式有哪些?限流的设计要点有哪些?

打卡Day18:今天学习了《49|弹力设计篇之“限流设计”》,我的收获如下:

限流的目的

  • SLA
  • 多租户资源保护
  • 应对突发流量
  • 节约成本

限流的策略

  • 拒绝服务(恶意请求)
  • 服务降级(停掉不重要的服务、只返回部分数据)
  • 特权请求(保大客户)
  • 延时处理(缓冲队列)
  • 弹性伸缩(自动化监控+伸缩)

限流的实现方式

  • 计数器。当Counter>阈值时拒绝。
  • 队列。请求波动、处理匀速;优先级队列;权重队列;队列满时拒绝。
  • 漏斗Leaky Bucket。队列+限流器;Processor匀速处理。
  • 令牌桶Token Bucket。队列+令牌桶;中间人放入token,需要拿到token才处理请求;流量小时攒token,流量大时可快速处理。
  • 基于响应时间的动态限流。TCP协议的拥塞控制,RTT - Round Trip Time来探测网络的延时和性能,设定滑动窗口大小;90%的请求响应时间>阈值,限流。

限流的设计要点

  • 架构早期就要考虑;
  • 性能要好,对流量变化灵敏;
  • 手动开关;
  • 监控事件通知;
  • 返回限流错误码;
  • 让后端服务感知限流发生,触发降级。

左耳朵耗子带你重学《左耳听风》

https://time.geekbang.org/column/article/4245