为什么要限流?限流具体都有哪些策略?限流的实现方式有哪些?限流的设计要点有哪些?
打卡Day18:今天学习了《49|弹力设计篇之“限流设计”》,我的收获如下:
限流的目的
- SLA
- 多租户资源保护
- 应对突发流量
- 节约成本
限流的策略
- 拒绝服务(恶意请求)
- 服务降级(停掉不重要的服务、只返回部分数据)
- 特权请求(保大客户)
- 延时处理(缓冲队列)
- 弹性伸缩(自动化监控+伸缩)
限流的实现方式
- 计数器。当Counter>阈值时拒绝。
- 队列。请求波动、处理匀速;优先级队列;权重队列;队列满时拒绝。
- 漏斗Leaky Bucket。队列+限流器;Processor匀速处理。
- 令牌桶Token Bucket。队列+令牌桶;中间人放入token,需要拿到token才处理请求;流量小时攒token,流量大时可快速处理。
- 基于响应时间的动态限流。TCP协议的拥塞控制,RTT - Round Trip Time来探测网络的延时和性能,设定滑动窗口大小;90%的请求响应时间>阈值,限流。
限流的设计要点
- 架构早期就要考虑;
- 性能要好,对流量变化灵敏;
- 手动开关;
- 监控事件通知;
- 返回限流错误码;
- 让后端服务感知限流发生,触发降级。