一、基于Sentinel的微服务限流及熔断
系统常见的保护策略有:服务降级、限流 和 熔断。
1、限流的算法
1.1 计数器算法
在指定周期内累加访问次数,当访问次数到达设定的阈值时,触发限流策略,当进入下一个时间周期时进行访问次数的清零。
缺点:存在临界问题,当两个时间段内相近时间分别出现大量请求,整体来看短时间内请求量超过了设置的阈值。
1.2 滑动窗口算法
原理:在固定窗口中分割出多个小时间窗口,分别在每个小时间窗口中记录访问次数,然后根据时间将窗口往前滑动并删除过期的小时间窗口。最终只需要统计滑动窗口范围内的所有小时间窗口总的计数即可。
优点:解决了计数器算法所带来的临界问题。
使用场景:TCP网络通信协议中、Sentinel中
1.3 令牌桶限流算法
介绍:令牌桶是网络流量整形和速率限制中最常用的一种算法。
原理:系统会以一个恒定速度往固定容量的令牌桶中放入令牌。对于每一个请求,都需要从令牌桶中获取一个令牌,如果没有令牌,则触发限流策略。
优点:能够处理突发流量
1.4 漏桶限流算法
作用:控制数据注入网络的速度,平滑网络上的突发流量。
原理:内部维护一个容器,这个容器以恒定的速度出水,不管上面的水流的速度多快,漏桶水滴的流出速度始终保持不变。
使用场景:消息中间件(不管生产者的请求量有多大,消息的处理能力取决于消费者)
缺点:无法处理短时间内的突发流量,是一种恒定速度的限流算法。
2 、服务熔断与降级
服务熔断:指当某个服务提供者无法正常为服务调用者提供服务时,比如请求超时,服务异常等,为了防止整个系统出现雪崩效应,暂时将出现故障的接口隔离出来,断绝与外部接口的联系,当触发熔断之后,后续一段时间内该服务调用者的请求都会直接失败,直到目标服务恢复正常。
服务降级:有一个参考指标,一般有 平均响应时间、异常比列、异常数量 三种。
Sentinel提供了熔断功能