SpringBoot使用Sentinel实现资源的流量控制、熔断降级、系统负载保护

最近和别人合作的项目进入了交付阶段,需求方提出了项目流控和请求数据可视化的需求,因此我们在项目中引入了Sentinel为资源的流量控制、熔断降级、系统负载保驾护航。

Sentinel具有以下特征:

丰富的应用场景:Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景,例如秒杀(即突发流量控制在系统容量可以承受的范围)、消息削峰填谷、集群流量控制、实时熔断下游不可用应用等。
完备的实时监控:Sentinel 同时提供实时的监控功能。您可以在控制台中看到接入应用的单台机器秒级数据,甚至 500 台以下规模的集群的汇总运行情况。
广泛的开源生态:Sentinel 提供开箱即用的与其它开源框架/库的整合模块,例如与 Spring Cloud、Dubbo、gRPC 的整合。您只需要引入相应的依赖并进行简单的配置即可快速地接入 Sentinel。
完善的 SPI 扩展点:Sentinel 提供简单易用、完善的 SPI 扩展接口。您可以通过实现扩展接口来快速地定制逻辑。例如定制规则管理、适配动态数据源等。


sentinel分为控制台和核心库两大部分
核心库(Java 客户端)不依赖任何框架/库,能够运行于所有 Java 运行时环境,同时对 Dubbo / Spring Cloud 等框架也有较好的支持。
控制台(Dashboard)基于 Spring Boot 开发,打包后可以直接运行,不需要额外的 Tomcat 等应用容器。

java -Dserver.port=8080 -Dcsp.sentinel.dashboard.server=localhost:8080 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard-1.6.3.jar

默认用户名和密码都是 sentinel。可以参考 鉴权模块文档 配置用户名和密码。
http://192.168.95.136:8080

#### jar包的application.properties

#spring settings
spring.http.encoding.force=true
spring.http.encoding.charset=UTF-8
spring.http.encoding.enabled=true

#logging settings
logging.level.org.springframework.web=INFO
logging.file=${user.home}/logs/csp/sentinel-dashboard.log
logging.pattern.file= %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n
#logging.pattern.console= %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n

#auth settings
auth.filter.exclude-urls=/,/auth/login,/auth/logout,/registry/machine
auth.filter.exclude-url-suffixes=htm,html,js,css,map,ico,ttf,woff,png
auth.username=sentinel
auth.password=sentinel

在SpringBoot/SpringCould应用中进行配置

spring:
  application:
    name: service-user
  cloud:
    nacos:
      config:
        server-addr: 192.168.95.136:8848
        namespace: bfaf7fc0-cf2e-4614-b760-537332fe9c47
        file-extension: yml

控制台,限流、降级、监控
引入依赖
<!--sentinel-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
            <version>2.1.0.RELEASE</version>
        </dependency>

SpringBoot配置

spring:
  application:
    name: plat-admin
  cloud:
    sentinel:
      transport:
        dashboard: 192.168.95.136:8080
server:
  port: 18081


  http://119.23.218.48:50011/#/dashboard/metric/dofun-test-gateway


指定需要限流的资源
@SentinelResource("/test/currentLimiting",blockHandler = "handleException",blockHandlerClass = {ExceptionUtil.class})

添加对应的限流规则 即可

发布了117 篇原创文章 · 获赞 17 · 访问量 8万+

猜你喜欢

转载自blog.csdn.net/Jack__iT/article/details/102844479