限流
限流指的是通过限制到达系统的并发请求数量,保证系统能够正常响应部分用户请求,而对于超出限制的流量,只能通过拒绝服务的方式来保证整体系统的可用性。
限流算法:
- 固定时间窗口算法:简单,但是有效性差,不能处理临界时间点的集中流量
- 滑动时间窗口算法:复杂度增加,解决了临界时间点集中流量的问题,但不能对流量塑形,无法控制流量让流量更加平滑
- 漏桶算法:在流量产生端和接收端之间增加一个漏桶,流量会进入和暂存到漏桶里面,漏桶按照固定频率将流量漏出到接收端,这样就可以起到平滑流量的效果
- 令牌桶算法:维护一个令牌桶,定期向桶内放入令牌,请求方需要成功获取到令牌才能调用服务方
熔断
熔断指的是当发起服务调用的时候,如果返回错误或者超时的次数超过一定阈值,则后续的请求不再发往远程服务而是暂时返回错误。
熔断可以看作断路器模式的实现,在断路器模式下,服务调用方为每一个调用的服务维护一个有限状态机:
- 关闭,调用远程服务
- 打开,不调用远程服务,直接返回错误
- 半打开,尝试调用远程服务
降级
广义上,降级是更抽象的概念,限流和熔断都可以看作是降级。
狭义上,一般说到降级指的是开关降级,即通过在代码中预埋开关来控制业务逻辑。