springcloud sentinel教程

‌QPS(Queries Per Second)即每秒查询率

TPS,每秒处理的事务数目

PV(page view)即页面浏览量

UV 访问数(Unique Visitor)指独立访客访问数

一、初识Sentinel

什么是雪崩问题?

微服务之间相互调用,因为调用链中的一个服务故障,引起整个链路都无法访问的情况。

如何避免因瞬间高并发流量而导致服务故障?

流量控制

如何避免因服务故障引起的雪崩问题?

超时处理

线程隔离

降级熔断

认识sentinel

Sentinel是阿里巴巴开源的一款微服务流量控制组件。官网地址: https://sentinelquard.io/zh-cn/index.html

Sentinel具有以下特征:

丰富的应用场景:Sentinel承接了阿里巴巴近10年的双十一大促流量的核心场景,例如秒杀(即突发流量控制在系统容量可以承受的范围)、消息削峰填谷、集群流量控制、实时熔断下游不可用应用等。

**完备的实时监控:**Sentinel同时提供实时的监控功能。您可以在控制台中看到接入应用的单台机器秒级数据,甚至500 台以下规模的集群的汇总运行情况。

广泛的开源生态:Sentinel提供开箱即用的与其它开源框架/库的整合模块,例如与Spring Cloud、Dubbo、qRPC的整合。您只需要引入相应的依赖并进行简单的配置即可快速地接入 Sentinel。

完善的 SPI 扩展点:Sentinel提供简单易用、完善的 SPI扩展接口。您可以通过实现扩展接口来快速地定制逻辑。例如定制规则管理、适配动态数据源等。

安装Sentinel控制台

sentinel官方提供了U控制台,方便我们对系统做限流设置。大家可以在GitHub下载。

https://github.com/alibaba/Sentinel/releases

将其拷贝到一个你能记住的非中文目录,然后运行命令:

java -jar sentinel-dashboard-1.8.7.jar

然后访问:localhost:8080 即可看到控制台页面,默认的账户和密码都是sentinel

微服务整合Sentinel

我们在order-sentinel中整合Sentinel,并且连接Sentinel的控制台,步骤如下:

1.引入sentinel依赖:

2.配置控制台地址:

spring:

application:

name: meitemayikt-sentinel

cloud:

nacos:

discovery:

server-addr: 192.168.0.111:8848

#register-enabled: true

sentinel:

enabled: true

transport:

dashboard: 192.168.0.111:8080 # Sentinel 控制台地址

clientIp: 192.168.0.103 # 很重要,要告诉Sentinel服务端的ip

eager: true # 是否立即加载 Sentinel 规则

3、访问微服务的任意端点,触发sentinel监控

我这里访问的 http://localhost:7090/test/15099meitemayikt-sentinel服务的一个接口我这里访问的 http://localhost:7090/test/15099

访问sentinel控制台就看到了

限流规则-快速入门

簇点链路 : 就是项目内的调用链路,链路中被监控的每个接口就是一个资源。

默认情况下sentinel会监控SpringMVC的每一个端点(Endpoint),因此SpringMVC的每一个端点(Endpoint)就是调用链路中的一个资源。

点击资源http://localhost:7090/test/112后面的流控按钮,就可以弹出表单。表单中可以添加流控规则,如下图所示:

给 /test/111这个资源设置流控规则,QP5不能超过 5。然后利用jemeter测试。

流量控制

在添加限流规则时,点击高级选项,可以选择三种流控模式:

直接: 统计当前资源的请求,触发阈值时对当前资源直接限流,也是默认的模式

关联: 统计与当前资源相关的另一个资源,触发阈值时,对当前资源限流

链路: 统计从指定链路访问到本资源的请求,触发阈值时,对指定链路限流

流控模式-关联

关联模式: 统计与当前资源相关的另一个资源,触发值时,对当前资源限流。

使用场景: 比如用户支付时需要修改订单状态,同时用户要查询订单。查询和修改操作会争抢数据库锁,产生竞争。业务需求是有限支付和更新订单的业务,因此当修改订单业务触发阈值时,需要对查询订单业务限流。

测试案例

在Controller新建两个端点:/test/query和/test/update,无需实现业务.

配置流控规则,当/test/update资源被访问的QPS超过5时,对/test/query请求限流

jemeter测试

浏览器访问test/query,可以看到限流结果

流控模式 - 关联

链路模式: 只针对从指定链路访问到本资源的请求做统计,判断是否超过阈值

案例

查询订单和创建订单业务,两者都需要查询商品。针对从查询订单进入到查询商品的请求统计并设置限流。

步骤:

  1. 添加一个queryGoods方法,不用实现业务

在Controller中,改造/test/query端点,调用TestService中的queryGoods方法

2.在Controller中添加一个/test/save的端点,调用TestService的queryGoods方法给queryGoods设置限流规则,从/test/query进入queryGoods的方法限制QPS必须小于2

Sentinel默认只标记Controller中的方法为资源,如果要标记其它方法,需要利用

复制代码
@SentinelResource("goods")注解,示例:

Sentinel默认会将Controler方法做context整合,导致链路模式的流控失效,需要修改application.yml,添加配置:

spring:

cloud:

sentinel:

web-context-unify: false #关context型合

流控效果

流控效果是指请求达到流控阈值时应该采取的措施,包括三种:

快速失败 : 达到阈值后,新的请求会被立即拒绝并抛出FlowException异常。是默认的处理方式。
warm up : 预热模式,对超出阈值的请求同样是拒绝并抛出异常。但这种模式阔值会动态变化,从一个较小值逐渐增加到最大阈值
排队等待: 让所有的请求按照先后次序排队执行,两个请求的间隔不能小于指定时长

流控效果-warm up

需求:给/test/warm_up 这个资源设置限流,最大QPS为10,利用warmup效果,预热时长为5秒

相关推荐
1.01^100018 小时前
[023-01-40].第40节:组件应用 - OpenFeign与 Sentinel 集成实现fallback服务降级
sentinel
月落星还在1 天前
Redis Sentinel 深度解析:构建高可用分布式缓存系统的核心机制
redis·缓存·sentinel
扣丁梦想家2 天前
Spring Cloud Alibaba 实战:Sentinel 保障微服务的高可用性与流量防护
微服务·sentinel·springcloud·熔断降级·服务监控
WeiLai11123 天前
面试基础--高并发高可用架构深度实践:降级熔断(Hystrix vs Sentinel)核心原理与源码解析
java·分布式·后端·hystrix·面试·架构·sentinel
久睡成瘾.4463 天前
Sentinel熔断降级
java·开发语言·sentinel
君科程序定做3 天前
Sentinel-1 InSAR&&& ISCE数据处理:stackSentinel.py 完全指南
sentinel
!!!5254 天前
Sentinel 笔记
笔记·sentinel
我不是代码教父4 天前
[原创](Modern C++)现代C++的关键性概念: 非常独特的std::sentinel_for概念(哨兵概念)
开发语言·c++·sentinel
小马爱打代码4 天前
SpringBoot与Sentinel整合,解决DDoS攻击与异常爬虫请求问题
spring boot·sentinel·ddos