Sentinel的介绍:随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 是面向分布式服务架构的流量控制组件,主要以流量为切入点,从流量控制、熔断降级、系统自适应保护等多个维度来帮助您保障微服务的稳定性。
流量控制 :流量控制在网络传输中是一个常用的概念,它用于调整网络包的发送数据。然而,从系统稳定性角度考虑,在处理请求的速度上,也有非常多的讲究。任意时间到来的请求往往是随机不可控的,而系统的处理能力是有限的。我们需要根据系统的处理能力对流量进行控制。Sentinel 作为一个调配器,可以根据需要把随机的请求调整成合适的形状,如下图所示:
阈值类型
- QPS(每秒钟的请求数量):当调用该接口的QPS达到了阈值的时候,进行限流
- 线程数:当调用该接口的线程数达到阈值时,进行限流
流控模式:流控模式分为直接模式,关联模式,链路模式
1.直接模式:直接模式相当比较简单:就是对当前资源进行流量控制
2.关联模式:如图所示:testA资源对testB资源 进行关联,请求发给testB,当testA的QPS的阈值到达5的时候,B就会被限流。
3.链路模式:以调用链路为单位做限流处理,例如:A->B->C 这个链路的总体流量只按入口A的请求量来计算
流控效果
流控效果分为直接失败、预热和排队等待。
1.直接失败:理解起来比较简单,就是限流的时候直接提示:Blocked by Sentinel (flow limiting) com.alibaba.csp.sentinel.slots.block.flow.controller.DefaultController。
2.预热模式:如果qps 10,预热时长10s 冷加载因子是3 从qps=10/3 开始控制流量,逐步达到10,这种情况主要是为了保护系统,例如在秒杀系统的开启瞬间,会有很多流量上来,系统可能会因为突增的访问量而出现问题,预热方式就是为了保护系统,可以慢慢的把流量放进来,慢慢的把阈值增长到设定值,不至于让系统承受不住。
3.排队等待:/getest2每秒5次请求,超过的话就排队等待,等待的超时事件为10ms,目的是为了匀速处理请求,保证服务的均匀性,避免在同一时间系统处理大量的请求,过段时间没有请求可以处理。
熔断:
- 服务熔断
当下级的服务因为某种原因突然变得不可用或响应过慢,上级服务为了保证自己整体服务的可用性,不再继续调用目标服务,直接返回,快速释放资源。如果目标服务情况好转则恢复调用。
一般是指软件系统中,由于某些原因使得服务出现了过载现象,为防止造成整个系统故障,从而采用的一种保护措施,所以很多地方把熔断亦称为过载保护。
适用场景:防止应用程序直接调用那些很可能会调用失败的远程服务或共享资源
- 服务降级
当服务器压力剧增的情况下,根据当前业务情况及流量对一些服务和页面有策略的降级,以此释放服务器资源以保证核心任务的正常运行。
应该这么理解:服务降级有很多种降级方式,如开关降级、限流降级、熔断降级。服务熔断属于降级方式的一种!
在熔断中值得注意的点是:熔断计算异常比例有一个隐藏的前提条件:
当qps达到5的前提下,计算异常比例,如果达到10%,执行熔断,不再往底层发送请求,30S过后,发送5笔请求,
如果结果为成功,则结束熔断,如果结果为失败,继续熔断30s