赞
踩
sentinel是面向分布式、多语言异构化服务架构的流量治理组件,主要以流量为切入点,从流量路由、流量控制、熔断降级、系统自适应过载保护、热点流量防护等多个维度来帮助开发者保障服务的稳定性。
sentinel 的使用可以分为两个部分:
核心库(Java 客户端):不依赖任何框架/库,能够运行于 Java 8 及以上的版本的运行时环境,同时对 Dubbo / Spring Cloud 等框架也有较好的支持。
控制台(Dashboard):Dashboard 主要负责管理推送规则、监控、管理机器信息等。基于 Spring Boot 开发,打包后可以直接运行。
中文文档:
程序包下载:
Releases · alibaba/Sentinel · GitHub
启动jar包
F:\>java -jar sentinel-dashboard-1.8.6.jar
页面访问: sentinel / sentinel
输入地址: http://localhost:8080/
1.pom文件
- <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- <modelVersion>4.0.0</modelVersion>
- <parent>
- <groupId>com.jurf.ms</groupId>
- <artifactId>mscloud-demo-2024</artifactId>
- <version>1.0-SNAPSHOT</version>
- </parent>
-
- <groupId>com.jurf.ms.alibaba.sentinel</groupId>
- <artifactId>ms-alibaba-sentinel-8888</artifactId>
- <packaging>jar</packaging>
-
- <name>ms-alibaba-sentinel-8888</name>
- <url>http://maven.apache.org</url>
-
- <properties>
- <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
- </properties>
-
- <dependencies>
- <!--SpringCloud ailibaba 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>
- <!--nacos-discovery-->
- <dependency>
- <groupId>com.alibaba.cloud</groupId>
- <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
- </dependency>
- <!-- 引入自己定义的api通用包 -->
- <dependency>
- <groupId>com.jurf.ms.api</groupId>
- <artifactId>ms-api-commons</artifactId>
- <version>1.0-SNAPSHOT</version>
- </dependency>
- <!--SpringBoot通用依赖模块-->
- <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>
- <!--hutool-->
- <dependency>
- <groupId>cn.hutool</groupId>
- <artifactId>hutool-all</artifactId>
- </dependency>
- <!--lombok-->
- <dependency>
- <groupId>org.projectlombok</groupId>
- <artifactId>lombok</artifactId>
- <version>1.18.28</version>
- <scope>provided</scope>
- </dependency>
- <!--test-->
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-test</artifactId>
- <scope>test</scope>
- </dependency>
- </dependencies>
- </project>

2.application配置文件
- server:
- port: 8888
-
- spring:
- application:
- name: ms-alibaba-sentinel8888
- cloud:
- nacos:
- discovery:
- server-addr: localhost:8848 #Nacos服务注册中心地址
- sentinel:
- transport:
- dashboard: localhost:8080 #配置Sentinel dashboard控制台服务地址
- port: 8719 #默认8719端口,假如被占用会自动从8719开始依次+1扫描,直至找到未被占用的端口
-
3.业务类
- package com.jurf.ms.alibaba.sentinel.controller;
-
- import org.springframework.web.bind.annotation.GetMapping;
- import org.springframework.web.bind.annotation.RestController;
-
- /**
- * @ClassName: LimitFlowController
- * @Description: TODO
- * @Author: admin
- * @Date: 2024/06/11 09:23:45
- * @Version: V1.0
- **/
- @RestController
- public class LimitFlowController {
- @GetMapping("/testA")
- public String testA()
- {
- return "------testA";
- }
-
- @GetMapping("/testB")
- public String testB()
- {
- return "------testB";
- }
- }

4.启动类
- package com.jurf.ms.alibaba.sentinel;
-
- import org.springframework.boot.SpringApplication;
- import org.springframework.boot.autoconfigure.SpringBootApplication;
- import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
-
- /**
- * Hello world!
- *
- */
- @EnableDiscoveryClient
- @SpringBootApplication
- public class App8081
- {
- public static void main( String[] args )
- {
-
- SpringApplication.run(App8081.class,args);
- System.out.println( "Hello World!" );
- }
- }

5.启动服务验证
a)启动nacos服务
E:\nacos-server2.2.3\bin>startup.cmd -m standalone
b)启动sentinel服务
F:\>java -jar sentinel-dashboard-1.8.6.jar
c)启动业务服务
d)
nacos: http://localhost:8848/nacos/
sentinel 访问地址: http://localhost:8080/#/login
sentinel能够对流量进行控制,主要是监控应用的QPS流量或者并发线程数等指标,如果达到制定的阈值时,就会被流量进行控制,以避免服务瞬时的高并发流量击垮,保证服务的高可靠性。
1.配置
2.验证: 频繁快速刷新,超过1秒内超过2次,则进行限流
当关联资源/testB的qps阈值超过1时,就限流/testA的rest访问地址,当关联资源达到阈值后限制配置的资源名,B惹事,A挂掉。
1.jemter访问/testB
2.访问/testA
指定请求地址进行限流
1.增加c和d方法
2.访问地址
限流配置
3.进行访问:
下图的配置如下:5s内qps的阈值为3,在5s后qps的阈值为10
按照单机阈值,1秒钟同构一个请求,10秒后的请求作为超时处理,放弃
1.代码逻辑
2.配置
3.验证
单位时间内,限制通过的线程数。
1.模拟100个线程并发访问
2.查看资源B
sentinel熔断降级会在调用链路中某个资源出现不稳定状态时(例如调用超时或异常比例升高),对这个资源的调用进行限制,让请求快速失败,避免影响到其他的资源而导致级联错误。当资源被降级后,在接下来的降级时间窗口之内,对该资源的调用都自动熔断(默认行为是抛出DegradeException), 如下图所示:
1.设置处理方法
2.配置策略
翻译就是: 在滑动窗口【5s内,请求数为3】,且相应时长大于30毫秒的请求比例大于0.4,则触发熔断,熔断时长为6s。
3.查看效果
1.设置处理方法
2.配置策略
翻译就是: 在滑动窗口【2s内,请求数为2】,且异常比例大于0.1,则触发熔断,熔断时长为5s。
3.查看结果
1.设置处理方法
2.配置策略
翻译就是: 在滑动窗口【1s内,请求数为1】,且异常比例数大于1,则触发熔断,熔断时长为5s。
3.验证结果
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。