Spring Cloud微服务入门(五)

Sentinel的安装与使用

安装部署Sentinel

下载Sentinel: https://github.com/alibaba/Sentinel/releases
Sentinel控制台

https://localhost:8080

用户和密码为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持久化

两种模式:

推模式,更适用于生产环境,但实现复杂,修改源码。

拉模式,实现简单,但更新规则会有延迟。

相关推荐
程序猿零零漆3 小时前
SpringCloud系列教程:微服务的未来(二十)Seata快速入门、部署TC服务、微服务集成Seata
java·spring·spring cloud·微服务
Miketutu13 小时前
Spring MVC消息转换器
java·spring
小小虫码14 小时前
项目中用的网关Gateway及SpringCloud
spring·spring cloud·gateway
带刺的坐椅19 小时前
无耳科技 Solon v3.0.7 发布(2025农历新年版)
java·spring·mvc·solon·aop
精通HelloWorld!1 天前
使用HttpClient和HttpRequest发送HTTP请求
java·spring boot·网络协议·spring·http
LUCIAZZZ1 天前
基于Docker以KRaft模式快速部署Kafka
java·运维·spring·docker·容器·kafka
拾忆,想起1 天前
如何选择Spring AOP的动态代理?JDK与CGLIB的适用场景
spring boot·后端·spring·spring cloud·微服务
zhuyasen1 天前
多维度详细比较 kratos、go-zero、goframe、sponge 框架
后端·http·微服务·rpc·golang
鱼骨不是鱼翅1 天前
Spring Web MVC基础第一篇
前端·spring·mvc
掘金-我是哪吒1 天前
分布式微服务系统架构第90集:现代化金融核心系统
分布式·微服务·金融·架构·系统架构