一、Sentinel概述
强大的优势:
1、丰富的应用场景:
Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景, 例如秒杀(即突发流量控制在系统容量可以承受的范围)、消息削峰填谷、集群流量控制、实时熔断下游不可用 应用等。
2、完备的实时监控:
Sentinel 提供了实时的监控功能。通过控制台可以看到接入应用的单台机器秒级数据, 甚至 500 台以下规模的集群的汇总运行情况。
3、广泛的开源生态:
Sentinel 提供开箱即用的与其它开源框架/库的整合模块, 例如与 Spring Cloud、Dubbo、gRPC 的整合。只需要引入相应的依赖并进行简单的配置即可快速地接入Sentinel。
4、完善的 SPI 扩展点:
Sentinel 提供简单易用、完善的 SPI 扩展接口。您可以通过实现扩展接口来快速地定制逻辑。例如定制规则管理、适配动态数据源等。
组成部分:
Sentinel 分为两个部分:
核心库(Java 客户端)
不依赖任何框架/库,能够运行于所有 Java 运行时环境,同时对 Dubbo / Spring Cloud 等框架也有较好的支持。
控制台(Dashboard)
基于 Spring Boot 开发,打包后可以直接运行,不需要额外的 Tomcat 等应用容器。
二、微服务集成Sentinel
版本说明
sentinel-dashboard:1.8.4
spring-boot-starter-parent:2.3.12.RELEASE
spring-cloud-dependencies:Hoxton.SR12
spring-cloud-alibaba-dependencies:2.2.8.RELEASE
安装Sentinel控制台:
Sentinel 提供一个轻量级的控制台, 它提供机器发现、单机资源实时监控以及规则管理等功能。
1、docke安装
直接运行命令:
docker run \ --name sentinel \ --restart=always \ -p 8858:8858 \ -v /usr/local/sentinel_home:/home/sentinel_home \ -d bladex/sentinel-dashboard:1.8.4
2、jar安装
- 下载jar包,解压到文件夹
https://github.com/alibaba/Sentinel/releases - 启动控制台,直接使用jar命令启动项目(控制台本身是一个SpringBoot项目)
java -Dserver.port=8858 -Dcsp.sentinel.dashboard.server=localhost:8858 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard-1.7.0.jar
启动控制台
安装启动完毕,通过浏览器访问localhost:8858 进入控制台 ( 默认用户名密码是 sentinel/sentinel )
微服务集成Sentinel:
为微服务集成Sentinel核心库非常简单, 只需要加入Sentinel的依赖即可,版本不写,用springboot提供的默认版本。
<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId> </dependency>
然后在配置文件中添加控制台的信息
spring: cloud: sentinel: transport: port: 9999 #跟控制台交流的端口,随意指定一个未使用的端口即可 dashboard: localhost:8858 # 指定控制台服务的地址
随便调用微服务的一个接口,sentinel就可以监控到该接口的数据。
查看控制台监控数据
打开控制台,查看可能会有延迟,刷新就好
三、流控规则详解
流量控制概述
任意时间到来的请求往往是随机不可控的,而系统的处理能力是有限的,我们需要根据系统的处理能力对流量进行控制。
Sentinel从以下两个方面的数量,对流量进行控制:
- QPS:每秒请求个数
- 线程数:并发线程个数
什么是流控规则
原理:
其原理是监控应用流量的QPS(每秒查询个数) 或并发线程数等指标,当达到指定的阈值(规定的大小)时对流量进行控制。以避免被瞬时的流量高峰冲垮,从而保障应用的高可用性。
配置流控规则:
参数说明
资源名:
某个接口,默认请求路径(如:http://localhost:8089/testA)
针对来源:
针对调用者进行限流,填写微服务名,指定对哪个微服务进行限流 ,默认default(不区分来源,全部限制)
阈值类型和阈值:
QPS:每秒钟的请求数量,当调用该接口的QPS达到了阈值(某个数量)的时候,实现流控效果。
并发线程数:当调用该接口的线程数达到阈值(某个数量)时,请求直接失败。
流控模式(限制谁):
直接:就限制设置的资源
关联:设置一个关联的资源,关联的资源达到阈值时,就限制设置的资源
链路:规定一个入口,设置的资源的流量达到阈值,就限制入口的资源
流控效果(设置为QPS时可配):
快速失败:请求直接失败 (返回429)
Warm up:请求 QPS 从 阈值 / 3 开始,还会设置一个预热时长,在预热时间中逐渐升至设定的 QPS 阈值。也就是允许通过的请求数量由少逐渐变多,有一个缓冲的效果。
排队等待:阈值为每秒通过数量,多余的请求会排队等待(挂起),还会设置一个超时时间,当请求超过超时间时间还未处理,请求就被丢弃了(已取消)