当前位置:   article > 正文

SpringCloud框架集成Sentinel保姆级教程_springcloud继承 sentinel

springcloud继承 sentinel

#基本介绍

  • 什么是熔断和降级

服务的稳定是公司可持续发展的重要基石,随着业务量的快速发展,一些平时正常运行的服务,会出现各种突发状况,而且在分布式系统中,每个服务本身又存在很多不可控的因素,比如线程池处理缓慢,导致请求超时,资源不足,导致请求被拒绝,又甚至直接服务不可用、宕机、数据库挂了、缓存挂了、消息系统挂了...对于一些非核心服务,如果出现大量的异常,可以通过技术手段,对服务进行降级并提供有损服务,保证服务的柔性可用,避免引起雪崩效应。

服务熔断一般是指软件系统中,由于某些原因使得服务出现了过载现象,为防止造成整个系统故障,从而采用的一种保护措施。

服务降级是在服务器压力陡增的情况下,利用有限资源,根据当前业务情况,关闭某些服务接口或者页面,以此释放服务器资源以保证核心任务的正常运行。

  • 为什么要使用熔断和降级

在一个分布式系统里,一个服务依赖多个服务,可能存在某个服务调用失败,比如超时、异常等,需要保证在一个依赖出问题的情况下,不会导致整体服务失败。

  • sentinel 熔断和降级

随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel是面向分布式服务架构的流量控制组件,主要以流量为切入点,从流量控制、熔断降级、系统自适应保护等多个维度来帮助您保障微服务的稳定性。

sentinel具有以下特征:

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

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

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

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

下面是sentinel的架构图: 

sentinel

  • 核心概念

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

核心库不依赖任何框架/库,能够允许在jdk7以上的版本运行时环境,同时对Dubbo、SpringCloud等框架也有比较好的支持。

控制台主要负责管理推送规则、监控、集群限流分配管理、机器发现等。

#下载方式

注意:启动 Sentinel 控制台需要 JDK 版本为 1.8 及以上版本。

  • Windows平台安装包下载

可以从https://github.com/alibaba/Sentinel/releases下载sentinel-dashboard-$version.jar包。

使用如下命令启动控制台:

java -Dserver.port=8718 -Dcsp.sentinel.dashboard.server=localhost:8718 -Dproject.name=sentinel-dashboard -Dcsp.sentinel.api.port=8719 -jar D:\sentinel\sentinel-dashboard-1.8.0.jar

其中-Dserver.port=8718用于指定Sentinel控制台端口为8718F:\software\sentinel\sentinel-dashboard-1.8.0.jar为下载的包路径地址。

提示

如果觉得官网下载慢,可以使用我分享的网盘地址: https://pan.baidu.com/s/1E9J52g6uW_VFWY34fHL6zA 提取码: vneh

  • 打开控制台

Sentinel提供了一个可视化的操作平台,安装好之后,在浏览器中输入(http://localhost:8718 (opens new window))就可以访问了,默认的用户名和密码都是sentinel(我使用的是1.8.0版本)

sentinel

#如何使用

1、添加依赖

  1. <!-- springcloud alibaba sentinel -->
  2. <dependency>
  3. <groupId>com.alibaba.cloud</groupId>
  4. <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
  5. </dependency>
  6. <!-- SpringBoot Web -->
  7. <dependency>
  8. <groupId>org.springframework.boot</groupId>
  9. <artifactId>spring-boot-starter-web</artifactId>
  10. </dependency>

2、添加Sentinel配置

  1. spring:
  2. application:
  3. # 应用名称
  4. name: ruoyi-xxxx
  5. cloud:
  6. sentinel:
  7. # 取消控制台懒加载
  8. eager: true
  9. transport:
  10. # 控制台地址
  11. dashboard: 127.0.0.1:8718

3、自定义限流异常处理

  1. public class SentinelFallbackHandler implements WebExceptionHandler
  2. {
  3. private Mono<Void> writeResponse(ServerResponse response, ServerWebExchange exchange)
  4. {
  5. return ServletUtils.webFluxResponseWriter(exchange.getResponse(), "请求超过最大数,请稍候再试");
  6. }
  7. @Override
  8. public Mono<Void> handle(ServerWebExchange exchange, Throwable ex)
  9. {
  10. if (exchange.getResponse().isCommitted())
  11. {
  12. return Mono.error(ex);
  13. }
  14. if (!BlockException.isBlockException(ex))
  15. {
  16. return Mono.error(ex);
  17. }
  18. return handleBlockedRequest(exchange, ex).flatMap(response -> writeResponse(response, exchange));
  19. }
  20. private Mono<ServerResponse> handleBlockedRequest(ServerWebExchange exchange, Throwable throwable)
  21. {
  22. return GatewayCallbackManager.getBlockHandler().handleRequest(exchange, throwable);
  23. }
  24. }

4、网关限流配置

  1. @Configuration
  2. public class GatewayConfig
  3. {
  4. @Bean
  5. @Order(Ordered.HIGHEST_PRECEDENCE)//定义组件的加载顺序:(最早执行)
  6. public SentinelFallbackHandler sentinelGatewayExceptionHandler()
  7. {
  8. return new SentinelFallbackHandler();
  9. }
  10. }

5、控制台配置流控规则(此配置代表1s内访问system路径下的接口的阈值为1次)否则触发限流

#Nacos持久化配置规则

sentinel重新启动时,sentinel dashboard中原来的数据将会全部消失,这样就需要重新定义限流规则,无疑是不可取的。所以需要将sentinel中定义的限流规则保存到配置中心里面。

具体的实现方法如下:

1、在nacos中定义自定义限流策略sentinel-ruoyi-gateway

  1. [
  2. {
  3. "resource": "wjyk-system",
  4. "count": 1,
  5. "grade": 1,
  6. "limitApp": "default",
  7. "strategy": 0,
  8. "controlBehavior": 0
  9. }
  10. ]

2、添加依赖

  1. <!-- springcloud alibaba nacos config -->
  2. <dependency>
  3. <groupId>com.alibaba.cloud</groupId>
  4. <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
  5. </dependency>
  6. <!-- sentinel datasource nacos -->
  7. <dependency>
  8. <groupId>com.alibaba.csp</groupId>
  9. <artifactId>sentinel-datasource-nacos</artifactId>
  10. </dependency>

3、添加相关配置,sentinel下面的dataSource中配置nacos

  1. spring:
  2. application:
  3. # 应用名称
  4. name: ruoyi-xxxx
  5. cloud:
  6. nacos:
  7. config:
  8. # 配置中心地址
  9. server-addr: 127.0.0.1:8848
  10. # 配置文件格式
  11. file-extension: yml
  12. # 共享配置
  13. shared-configs:
  14. - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
  15. sentinel:
  16. # 取消控制台懒加载
  17. eager: true
  18. transport:
  19. # 控制台地址
  20. dashboard: 127.0.0.1:8718
  21. # nacos配置持久化
  22. datasource:
  23. ds1:
  24. nacos:
  25. server-addr: 127.0.0.1:8848
  26. dataId: sentinel-ruoyi-gateway
  27. groupId: DEFAULT_GROUP
  28. data-type: json
  29. rule-type: flow

4、启动sentinel应用,可以看到我们在nacos中配置的限流规则

 #访问接口触发限流

“钱虽然没挣着,但是倒也没白干,起码累着了!”                                                     ——奥德彪

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

闽ICP备14008679号