保护高并发系统的三大利器:缓存、降级、限流。
- 缓存:提升系统的访问速度,增大系统处理容量;
- 降级:当服务出现问题或影响到核心流程时,需要暂时屏蔽掉,待高峰过后或问题解决后再打开;
- 限流:当不可降级场景出现时,需要采用限流限制该场景的并发请求,有损服务而不是不服务;
本文主要针对限流描述如下:
限流目的:
通过对并发访问/请求进行限速或者一个时间窗口内的的请求进行限速来保护系统,一旦达到限制速率则可以拒绝服务、排队或等待、降级。
超过阈值时策略:
- 定向到错误页或告知没有资源
- 返回兜底数据或默认数据,如商品详情页库存默认有货
常见限流场景:
- 线程池
- 数据库连接池
- 并发请求数
- 接口调用速率
- MQ的消费速率
常见限流算法:
- 令牌桶:一个存放固定容量令牌的桶,按照固定速率往桶里添加令牌,请求获取令牌,令牌不足时拒绝请求。
- 漏桶:流入速率过快,超过桶的容量,拒绝请求。
- 计数器(简单粗暴)
注意事项:
- 限流需要评估好,不可乱用,否则会正常流量出现一些奇怪的问题而导致用户抱怨。
- 在实际应用时也不要太纠结算法问题,不要一味去找最佳模式,白猫黑猫能解决问题的就是好猫。