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持久化

两种模式:

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

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

相关推荐
黄油饼卷咖喱鸡就味增汤拌孜然羊肉炒饭1 小时前
SpringBoot如何实现缓存预热?
java·spring boot·spring·缓存·程序员
李小白662 小时前
Spring MVC(上)
java·spring·mvc
Java程序之猿3 小时前
微服务分布式(一、项目初始化)
分布式·微服务·架构
Lojarro4 小时前
【Spring】Spring框架之-AOP
java·mysql·spring
Yvemil75 小时前
《开启微服务之旅:Spring Boot Web开发举例》(一)
前端·spring boot·微服务
zjw_rp5 小时前
Spring-AOP
java·后端·spring·spring-aop
撒呼呼8 小时前
# 起步专用 - 哔哩哔哩全模块超还原设计!(内含接口文档、数据库设计)
数据库·spring boot·spring·mvc·springboot
Yvemil79 小时前
《开启微服务之旅:Spring Boot Web开发》(二)
前端·spring boot·微服务
维李设论9 小时前
Node.js的Web服务在Nacos中的实践
前端·spring cloud·微服务·eureka·nacos·node.js·express
天使day9 小时前
SpringMVC
java·spring·java-ee