当前位置:   article > 正文

springcloud3 Sentinel的搭建以及案例操作_sentinel-datasource-nacos

sentinel-datasource-nacos

sentinel的概念

1.1 sentinel

Sentinel是分布式系统流量控制的哨兵阿里开源的一套服务容错的综合性解决方案

主要用来处理:

服务降级

服务熔断

超时处理

流量控制

sentinel 的使用可以分为两个部分:

核心库(Java 客户端):不依赖任何框架/库,能够运行于 Java 8 及以上的版本的运行时环境,同时对 Dubbo / Spring Cloud 等框架也有较好的支持

控制台(Dashboard):Dashboard 主要负责管理推送规则、监控、管理机器信息等。基于 Spring Boot 开发,打包后可以直接运行。

二 sentinel的安装

2.1 sentinel的安装

中文文档:

quick-start | Sentinel

程序包下载:

Releases · alibaba/Sentinel · GitHub

启动jar包

F:\>java -jar sentinel-dashboard-1.7.2.jar

页面访问: sentinel /  sentinel

输入地址: http://localhost:8080/

 三   sentinel的各种用途

3.1 实时监控

3.1.1 架构图

3.1.2 sentinel消费项目

1.pom

  1. <dependencies>
  2. <dependency>
  3. <groupId>junit</groupId>
  4. <artifactId>junit</artifactId>
  5. <version>4.13</version>
  6. <scope>test</scope>
  7. </dependency>
  8. <!--SpringCloud ailibaba nacos -->
  9. <dependency>
  10. <groupId>com.alibaba.cloud</groupId>
  11. <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
  12. <version>2021.1</version>
  13. </dependency>
  14. <!--SpringCloud ailibaba sentinel-datasource-nacos 后续做持久化用到-->
  15. <dependency>
  16. <groupId>com.alibaba.csp</groupId>
  17. <artifactId>sentinel-datasource-nacos</artifactId>
  18. <version>1.5.2</version>
  19. </dependency>
  20. <!--SpringCloud ailibaba sentinel -->
  21. <dependency>
  22. <groupId>com.alibaba.cloud</groupId>
  23. <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
  24. <version>2021.1</version>
  25. </dependency>
  26. <!--openfeign-->
  27. <dependency>
  28. <groupId>org.springframework.cloud</groupId>
  29. <artifactId>spring-cloud-starter-openfeign</artifactId>
  30. </dependency>
  31. <!-- SpringBoot整合Web组件+actuator -->
  32. <dependency>
  33. <groupId>org.springframework.boot</groupId>
  34. <artifactId>spring-boot-starter-web</artifactId>
  35. </dependency>
  36. <dependency>
  37. <groupId>org.springframework.boot</groupId>
  38. <artifactId>spring-boot-starter-actuator</artifactId>
  39. </dependency>
  40. <!--日常通用jar包配置-->
  41. <dependency>
  42. <groupId>org.springframework.boot</groupId>
  43. <artifactId>spring-boot-devtools</artifactId>
  44. <scope>runtime</scope>
  45. <optional>true</optional>
  46. </dependency>
  47. <dependency>
  48. <groupId>cn.hutool</groupId>
  49. <artifactId>hutool-all</artifactId>
  50. <version>4.6.3</version>
  51. </dependency>
  52. <dependency>
  53. <groupId>org.projectlombok</groupId>
  54. <artifactId>lombok</artifactId>
  55. <optional>true</optional>
  56. </dependency>
  57. <dependency>
  58. <groupId>org.springframework.boot</groupId>
  59. <artifactId>spring-boot-starter-test</artifactId>
  60. <scope>test</scope>
  61. </dependency>
  62. </dependencies>

2.application配置文件

  1. server:
  2. port: 7005
  3. spring:
  4. application:
  5. name: mscloud-sentinel-consumer
  6. cloud:
  7. nacos:
  8. discovery:
  9. server-addr: localhost:8848 #Nacos服务注册中心地址
  10. sentinel:
  11. transport:
  12. dashboard: localhost:8080 #配置Sentinel dashboard地址
  13. port: 8719
  14. management:
  15. endpoints:
  16. web:
  17. exposure:
  18. include: '*'

3.业务类

  1. @RestController
  2. @Slf4j
  3. public class DataLimitController {
  4. @GetMapping("/testA")
  5. public String testA()
  6. {
  7. return "------testA";
  8. }
  9. @GetMapping("/testB")
  10. public String testB()
  11. {
  12. log.info(Thread.currentThread().getName()+"\t"+"...testB");
  13. return "------testB";
  14. }
  15. }

4.启动类

  1. @EnableDiscoveryClient
  2. @SpringBootApplication
  3. public class App
  4. {
  5. public static void main( String[] args )
  6. {
  7. SpringApplication.run(App.class, args);
  8. }
  9. }

3.1.3 操作

1.启动nacos

2.启动sentinel服务

 3.启动sentinel消费服务

 3.1.4 进行监控访问

访问地址: http://localhost:7005/testA      多次刷新访问几次

 2.查看监控

访问地址: http://localhost:7005/testB      多次刷新访问几次

3.2 流量控制

3.2.1 qps+阈值进行限流

1.查看资源,针对资源进行流控

 2.设置配置

1秒钟qps的阈值为3,一秒钟请求大于3,则容错提示。

 联系请求大于3次,则 给出如下提示:

 3.2.2 线程数+阈值进行限流

当线程数达到阈值后,进行限流提示。

1.设置

2.访问验证

 3.2.3 线程数+阈值+关联进行限流

1.通过资源A关联的资源B,资源B发生qps超过规定的阈值,则导致资源A进行限流提示。

2.设置

 3.postman定时设置请求接口B

2.执行 

3.设置执行参数 

4.查看访问资源A:http://localhost:7005/testA

 3.2.4 线程数+阈值+关联+预热(warm up)进行限流

1.说明:

默认的coldfactor的值为3,QPS是从(threshold/coldfactor=threshold/3)开始,coldfactor为冷加载因子,即:系统初始化的阈值为:12/3约等于4,,即阈值初始化为4,经过5秒后阈值才升到设定的12。刚开始以QPS为4进行限流,经过5秒后,QPS变为12进行限流。

2.配置

3.访问: 前5秒,不停刷新会提示限流信息,

 5秒过后,不停刷新(手工不停刷新达不到设定的阈值12),所以不再限流

 3.2.5 线程数+阈值+排队等待进行限流

1.说明

匀速排队:让请求以均匀的速度通过,阈值类型必须设置成QPS,否则无效。

设置含义:/testB 每秒3次请求,超过阈值后就进行排队,等待大于20秒则满足超时时间,进行请求。

2.配置

 3.查看效果

情况2: 设置qps为5,超时为20秒,delay为1s,且在方法增加随机延迟

2.流控规则设置 : 目前不理解超时时间这个参数有何作用

 3.调用频率设置

4.调取结果

可以看到:代码中走3秒请求的连接+请求本身设置的1s延迟,总共4s,其他代码中没有走3秒请求的,只有请求本身的1s延迟 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/512569
推荐阅读
相关标签
  

闽ICP备14008679号