Sentinel的安装与使用
安装部署Sentinel
下载Sentinel: https://github.com/alibaba/Sentinel/releases
Sentinel控制台
用户和密码为sentinel
使用Sentinel
加依赖:
写配置:
输入: java -Dserver.port=8080 -Dcsp.sentinel.dashboard.server=localhost:8080 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard-1.8.7.jar
启动内容中心、用户中心服务,访问内容中心api:
我们在Sentinel控制台的实时监控菜单,可以看到服务通过的QPS等信息,说明Sentinel与我们的应用整合成功。
Sentinel的容错策略
流控规则。
概念:
流控规则的是监控应用或服务流量的QPS指标,当指标达到设定的阈值时立即拦截流量,避免应用被瞬时的流量高峰冲垮,从而保障应用高可用性。
应用场景:
削峰填谷,使流量匀速通过。
当资源争抢时,留足资源给优先级高的接口。
预热启动,避免大流量冲击。
流控规则配置项
针对来源: 默认值为:default。 可以指定是浏览器还是APP。
阈值类型:
QPS:可通过的最大请求量。
线程数:达到一定的线程数就开始限流。
单机阈值:数值,是阈值类型的最大值。
流控模式。
直接:达到请求数,直接就报错。
关联:当关联的资源达到阈值,就限流自己。
链路:只记录指定链路上的流量。
流控效果。
快速失败:直接失败,抛异常。
Warm Up:根据codeFactor(冷加载因子,默认3)的值,从阈值/codeFactor,经过预热时长,才达到设置的QPS的阈值。适用于秒杀微服务。
排队等待:匀速排队的设计,让请求以均匀的速度通过,阈值类型必须设成QPS,否则无效。适用于突发大量请求。
降级规则。
概念:
由于调用关系的复杂性,如果调用链路中的某个资源出现了不稳定,最终会导致请求发生堆积。熔断降级功能会在调用链路中某个资源出现不稳定时(例如某资源出现超时或异常比例升高),对这个资源的调用进行限制,让请求快速失败,避免影响到其它的资源而导致级联错误。
应用场景:
监控应用下游依赖应用的响应时间或异常比例。 被监控的达到阈值时立即降低下游依赖应用优先级。 保障应用可用性。
慢调用比例:
设置允许的慢调用RT(即最大的响应时间),请求的响应大于该值则统计为慢调用。
当单位统计时长内请求数目大于设置的最小请求数目,并且慢调用比的比例大于阈值,则接下来的熔断时长内请求会自动被熔断。
经过熔断时长后熔断器会进入探测恢复状态(HALF-OPEN 状态),若接下来的一个请求响应时间小于设置的慢调用 RT 则结束熔断,若大于设置的慢调用 RT 则会再次被熔断。
异常比例:
当单位统计时长(statIntervalMs)内请求数目大于设置的最小请求数目,并且异常的比例大于阈值,则接下来的熔断时长内请求会自动被熔断。
经过熔断时长后熔断器会进入探测恢复状态(HALF-OPEN 状态),若接下来的一个请求成功完成(没有错误)则结束熔断,否则会再次被熔断。
异常比率的阈值范围是 [0.0, 1.0],代表 0% - 100%。
异常数:
当单位统计时长内的异常数目超过阈值之后会自动进行熔断。
经过熔断时长后熔断器会进入探测恢复状态(HALF-OPEN 状态),若接下来的一个请求成功完成(没有错误)则结束熔断,否则会再次被熔断。
热点规则。
概念:
热点就是经常访问的数据,比如商品接口的 QPS 限定的是 100,有一天要秒杀,带着秒杀商品 id 的请求的 QPS 限制在 50,这样还能有 50 的 QPS 用来访问其他的商品。
应用场景:
根据请求的参数来做限流
注意点: 参数必须是基本类型或者String。
热点规则配置项
资源名:@SentinelResource(value="xxx")中的value值。
参数索引:针对第几个参数,从0开始。
参数类型:配置的参数索引位置的参数类型。
参数值:具体要限流的参数值。 限流阈值:允许的QPS值。
单机阈值:不是1的情况下,允许的QPS就是10。
统计时间窗口:统计的时间单位,一般都是1s。
系统规则。
概念:
系统规则是针对一个应用设定的,是粗粒度的配置。
应用场景:
一般不建议使用,配置后,可能导致程序在莫名情况下发生异常,导致整个程序不能使用。
系统规则配置
Load: 当系统Load1(1分钟的load)超过阈值,且并发线程数超过系统容量时触发,建议设置为CPU核心数*2.5(仅对Linux/Unix-like机器生效)。
系统容量: maxQps * minRt maxQps:秒级统计出来的最大QPS minRt:秒级统计出来的最小响应时间。
RT: 所有入口流量的平均RT达到阈值触发。
线程数: 所有入口流量的并发线程数达到阈值触发。
入口QPS: 所有入口流量的QPS达到阈值触发。
授权规则。
集群流控。
为Feign整合Sentinel
在application.yml中增加配置,再看sentinel控制台会发现,资源变成了feign的形式,并且服务提供者的资源也会显示出来,具体配置如下:
Sentinel错误页优化
实现BlockExceptionHandler接口,根据异常类型判断:
DegradeException,限流规则异常。
FlowException,降级规则异常。
ParamFlowException,热点规则异常。
SystemBlockException, 系统规则异常。
AuthorityException, 授权规则异常。
Sentinel实现区分来源
实现RequestOriginParser接口,实现parseOrigin,解析参数:
可以使用URL参数指定,但不推荐。
可以使用Header指定,推荐使用。
Sentinel持久化
两种模式:
推模式,更适用于生产环境,但实现复杂,修改源码。
拉模式,实现简单,但更新规则会有延迟。