SpringCloudAlibaba——Sentinel(流控规则)
什么是Sentinel
一个轻量级的面向云原生微服务的流量控制,熔断降级组件。
Sentinel主要分为两个部分
-
核心库:Java客户端,不依赖任何框架,能够运行所有Java运行时环境,同时对Dubbo/SpringCloud等框架
也有较好的支持。 -
控制台:Dashboard基于SpringBoot开发,打包后可以直接运行,不需要额外的Tomcat等应用容器。
Sentinel的下载与安装
下载地址:
https://github.com/alibaba/Sentinel/releases
选择版本
下载的是一个jar包,只要电脑上有java运行环境就可以运行
启动Sentinel
构建演示案例
新建cloudalibaba-sentinel-service8401 model
-
新建model
-
改pom
<dependencies> <!--SpringCloud alibaba sentinel-datasource-nacos:后续做持久化用到--> <dependency> <groupId>com.alibaba.csp</groupId> <artifactId>sentinel-datasource-nacos</artifactId> </dependency> <!--SpringCloud alibaba Sentinel--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId> </dependency> <!--openFeign--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency> <!--spring cloud alibaba nacos--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> <!--web/actuator这两个一般一起使用,写在一起--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!--监控--> <dependency> <groupId> org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies>
-
改yml
server: port: 8401 spring: application: name: cloudalibaba-sentinel-service cloud: nacos: discovery: # Nacos服务注册中心地址 server-addr: xxxxxx:8848 sentinel: transport: # 配置Sentinel dashboard地址 dashboard: localhost:8080 # 默认8719端口,假如被占用会自动从8719开始一次+1扫描,直至找到被占用的端口。 port: 8719 management: endpoints: web: exposure: include: "*"
-
业务类
-
启动Sentinel和演示model并测试
- 要在Sentinel可视化界面中显示启动的演示类,必须先访问一次controller业务才能显示(懒加载机制)
流控规则
名词解析
测试效果
QPS+直接+快速失败
当每秒访问的次数大于2时直接显示该失败页面
线程数 = 1
线程数1:一次只能处理一个该api:/testA请求,当调用该api的线程数达到阈值的时候,进行限流
流控模式——关联
testA关联的资源testB达到阈值后,就限流testA自己
流控模式——链路
链路流控模式指的是,当从某个接口过来的资源达到限流条件时,开启限流
流控效果
-
快速失败: 直接失败,抛出异常:Blocked by Sentinel(flow limiting)
-
Warm Up: 预热,即突然间有大量的请求打过来,会给一个缓冲时间
即预热5s ,在这5s内的阈值为 阈值除以coldFactor(默认是3)= 3,经过预热时长后才会达到真正的阈值 -
排队等待
当阈值超出时,不要直接拒绝,让其排队
当排队超过超时时间才失败