服务降级
为什么要降级:当服务器出现负载过高的情况时,由于系统资源有限,服务器请求不过来,可能会导致系统崩盘。为了保障系统的稳定性并保证核心业务的运行,需要进行服务降级。
服务降级的核心思想:保留核心服务功能,降低非核心功能或者直接关闭非核心功能,主打一个“断臂求生”。
功能
- 保障核心业务:在系统资源有限的情况下,优先保障核心业务
- 增加系统的可用性:避免服务器因为负载过高而崩盘,将有限的资源紧着核心业务使用
服务熔断
为什么要熔断:当一个系统中某些服务器出现问题,可能会影响整个系统的运行,因为系统中的服务器不是独立于整体的,它也会有输出数据或请求数据和系统中的其它组件有交互。当某个服务器出现异常时及时隔离自己而保障系统。
服务熔断的核心思想:当某个服务器出现故障时,快速失败或者采取其它解决方法,避免自己的故障影响整个系统,主打一个“顾全大局”
功能
- 阻止单个服务器故障蔓延:防止单个服务器故障影响到系统中的其它组件,进而影响整个系统
- 快速失败和恢复 :快速失败后释放资源,恢复正常后提供服务
- 增加系统的稳定性:隔离故障的服务器,保证其它服务器正常运行
启动服务熔断的过程
- 正常服务阶段:熔断器是关闭的,所有请求都正常
- 监控阶段:监控异常服务的指标,例如响应失败次数,响应时长等,指标超过阈值后会开启熔断
- 半开启状态:熔断开启后经过一段时间,允许接收少量请求,检查请求是否被执行,目的是为了试探服务器有没有好,如果好了则进入正常状态,关闭熔断;如果没好,则继续打开熔断
- 备用机制:在服务器熔断期间,所有的请求都会收到程序设定结果,要么返回默认失败结果,要么跳过执行,要么请别的实例或服务器执行
服务限流
为什么要限流:单个服务器的处理能力有限,无法响应突发大量的服务请求,服务器若不采取措施,大量的请求服务会冲垮服务器
限流的核心思想:限制处理请求的速率防止系统资源被耗尽,“别着急,排好队,一个一个来”
功能
- 防止系统过载:防止短时间内大量的流量冲垮服务器
- 保障系统的稳定性:让系统能够在瞬间高并发的情况下不死机,只是响应速度慢了,并不是不处理请求,功能依然正常
限流算法
固定窗口计数器算法:规定在一个规定的时间窗口能能处理的最大请求数量
优点:简单

缺点:无法应对瞬间高并发场景,如果在每个时间窗口的请求次数接近于限流此时且都集中在的最后1s和最开始1s,系统可能会崩溃

滑动窗口计数器算法
是对固定窗口算法的改进,将固定窗口分割成多个窗口,在每个小窗口内规定最大的请求数量

漏桶算法
设定一个漏桶,每当来一个请求时,就将请求放入漏桶中,如果漏桶满了,服务端就丢掉请求;漏桶会按照一定的速率取出一个请求给服务端执行

令牌桶算法
服务端按照一定的速率生成令牌,将令牌放到一个固定容量的桶中,防止令牌过度堆积,每当来一个请求就取一个令牌,只有获得了令牌的请求才能被服务器执行,没有获得令牌的请求会被延迟或者拒绝处理
