Sentinel详细使用步骤

Sentinel是一个用于微服务架构的流量控制、熔断降级和系统保护工具。它通过定义资源和规则来实现服务的稳定性保护。资源可以是服务、方法等,规则包括流量控制、熔断和降级规则。Sentinel控制台提供实时监控和管理功能,帮助开发者动态调整规则。在服务出现问题时,熔断会拒绝调用,降级则会拒绝非核心请求,限流限制请求量,防止系统过载。Sentinel适用于Dubbo和SpringCloud等框架。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

微服务架构系统,随着服务增加,当一个服务出现问题,影响很多服务正常运行。

image.png

image.png

image.png
所以出现熔断、降级、限流策略解决这类问题。

一、什么是熔断、降级、限流

1.熔断(拒绝调用)

  服务熔断,当某服务出现不可用或响应超时的情况时,为了防止整个系统出现雪崩,暂时停止对该服务的调用。

停止是说,当前服务一旦对下游服务进行熔断,当请求到达时,当前服务不再对下游服务进行调用,而是使用设定好的策略(如构建默认值)直接返回。

暂时是说,熔断后,并不会一直不再调用下游服务,而是以一定的策略(如每分钟调用 10 次,若均返回成功,则增大调用量)试探调用下游服务,当下游服务恢复可用时,自动停止熔断。

image.png

2.降级(拒绝非核心请求)

  降级是指当自身服务压力增大时,采取一些手段,增强自身服务的处理能力,以保障服务的持续可用。比如,下线非核心服务以保证核心服务的稳定、降低实时性、降低数据一致性。

  为了预防某些功能出现负荷过载或者响应慢的情况,在其内部暂时舍弃一些非核心接口和数据的请求(如评论、积分),而直接返回一个提前准备好的 fallback(退路) 错误处理信息。释放CPU和内存资源,以保证整个系统的稳定性和可用性。

3.限流(限制请求量)

  限流是指上游服务对本服务请求 QPS 超过阙值时,通过一定的策略(如延迟处理、拒绝处理)对上游服务的请求量进行限制,以保证本服务不被压垮,从而持续提供稳定服务。常见的限流算法有滑动窗口、令牌桶、漏桶等。

二、怎么使用Sentinel?

1.熔断、降级、限流方案对比

image.png

2.Sentinel介绍

  随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。

Sentinel 分为两个部分:

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

Sentinel 可以简单的分为 Sentinel 核心库和 Dashboard。核心库不依赖 Dashboard,但是结合 Dashboard 可以取得最好的效果。

3. 基本概念及作用

基本概念:

资源:是 Sentinel 的关键概念。它可以是 Java 应用程序中的任何内容,例如,由应用程序提供的服务,或由应用程序调用的其它应用提供的服务,甚至可以是一段代码。在接下来的文档中,我们都会用资源来描述代码块。

只要通过 Sentinel API 定义的代码,就是资源,能够被 Sentinel 保护起来。大部分情况下,可以使用方法签名,URL,甚至服务名称作为资源名来标示资源。

规则:围绕资源的实时状态设定的规则,可以包括流量控制规则、熔断降级规则以及系统保护规则。所有规则可以动态实时调整。

主要作用:

  1. 流量控制
  2. 熔断降级
  3. 系统负载保护

我们说的资源,可以是任何东西,服务,服务里的方法,甚至是一段代码。使用 Sentinel 来进行资源保护,主要分为几个步骤:

  1. 定义资源
  2. 定义规则
  3. 检验规则是否生效

先把可能需要保护的资源定义好,之后再配置规则。也可以理解为,只要有了资源,我们就可以在任何时候灵活地定义各种流量控制规则。在编码的时候,只需要考虑这个代码是否需要保护,如果需要保护,就将之定义为一个资源。

4.Sentinel应用

官方文档:https://github.com/alibaba/spring-cloud-alibaba/wiki/Sentinel

4.1 Sentinel控制台搭建

下载对应的jar包:https://github.com/alibaba/Sentinel/releases 下载适合自己的版本

通过命令行启动:

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

启动后需要输入账号密码:sentinel sentinel

image.png

登录成功后看到的页面

image.png

4.2 服务监控

  如果我们需要把自己的服务被Sentinel监控,那么我们需要添加对应的依赖

        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
        </dependency>

然后需要添加对应的属性信息

image.png

然后我们访问请求后,在控制台就可以看到对应的监控信息了

image.png

然后我们可以指定简单的限流规则

image.png

表示1秒中内只能有一个QPS,超过就限流

image.png

测试我们发送请求快一点就会出现限流的处理。

4.3 实时监控

  实时监控这块需要引入Acuator

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

endpoint端点:

image.png

4.4 限流信息自定义

@Component
public class SentinelUrlBlockHandler implements BlockExceptionHandler {
    @Override
    public void handle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, BlockException e) throws Exception {
        R r = R.error(500,"访问太快,稍后再试!");
        httpServletResponse.setContentType("application/json;charset=UTF-8");
        httpServletResponse.getWriter().write(JSON.toJSONString(r));
    }
}

image.png

5.sentinel容器安装

  直接在windows中安装Sentinel启动管理还是不太方便,所以我们还是把Sentinel安装在Docker容器中

拉取对应的镜像文件

docker pull bladex/sentinel-dashboard:1.7.2

启动容器

docker run --name sentinel  -d -p 8858:8858 -d  bladex/sentinel-dashboard:tagname

开机自启动

docker update --restart=always sentinel

访问:

image.png

对应的客户端的使用:需要调整的配置信息

image.png

image.png

6.Sentinel监控所有服务

  我们需要对每一个服务都添加Sentinel的配置。

image.png

7.熔断降级

https://github.com/alibaba/spring-cloud-alibaba/wiki/Sentinel

1.添加对应的配置

image.png

2.添加托底的方法

image.png

image.png

手动配置:客户端的Sentinel版本需要和服务器的版本要保持一致。

image.png

<think>好的,我现在需要帮用户了解Sentinel 1.8.8的使用方法和配置指南。根据用户提供的引用内容,首先我需要整理这些信息,看看有哪些部分可以直接用上。 首先,引用1提到了下载Sentinel Dashboard的步骤,用户使用的是JDK17,下载了1.8.8版本的jar包。启动命令是java -jar,这部分应该放在配置指南的基础步骤里。然后引用3给出了Spring Boot项目的配置示例,包括application.properties中的配置项,比如dashboard地址和端口,这些是关键配置点,需要详细说明。 接下来,引用2提到了Spring Cloud Sentinel的自动配置,特别是Feign客户端的支持。用户可能需要知道如何启用Sentinel对Feign的集成,这部分应该包含在配置章节中,说明如何添加相关注解和配置属性。 引用4讨论了控制台的链路限流配置,特别是WEB_CONTEXT_UNIFY参数。用户可能需要了解如何关闭上下文收敛以实现更细粒度的限流,这里需要解释配置项的作用和设置方法。 引用5关于规则持久化,用户可能想了解如何将规则保存到Nacos,但用户的问题主要聚焦在1.8.8的使用,所以可能需要简要提及持久化的步骤,但注意引用5提到需要修改Dashboard源码,这部分可能比较复杂,是否需要详细展开?根据用户的问题,可能先给出基本使用,再提到持久化需要额外步骤。 然后,用户需要示例,引用3中的application.properties配置可以直接作为示例,同时可能需要一个简单的Controller示例来展示流控规则的应用。此外,代码示例中的BlockHandler处理方法也是关键,需要说明如何定义降级逻辑。 还需要检查是否有遗漏的配置点,比如启动Dashboard的参数,或者其他相关依赖。比如,在Spring Cloud项目中是否需要添加特定的starter依赖?引用2中的配置类可能属于自动配置的一部分,但用户可能需要添加依赖,比如spring-cloud-starter-alibaba-sentinel。 此外,注意事项部分需要提醒版本兼容性,比如Spring Cloud Alibaba版本与Sentinel的对应关系,避免用户因版本不匹配出现问题。引用4中提到SCA 2.1.1对应Sentinel 1.7.0,但用户使用的是1.8.8,可能需要确认版本对应情况,但用户提供的引用中没有更详细的信息,所以可能需要建议查阅官方文档。 最后,相关问题部分需要生成几个用户可能进一步询问的问题,比如如何持久化规则、整合Nacos、处理异常等,这些可以基于引用内容中的主题来设计。 总结步骤:下载与启动、Spring Boot配置、控制台使用、规则配置示例、注意事项、相关问题。确保各部分引用正确,比如引用3的配置示例,引用4的web-context-unify配置,引用2的Feign配置。需要将各个引用内容自然地融入到指南中,并在适当位置添加引用标记。</think>### Sentinel 1.8.8 使用教程与配置指南 #### 一、环境准备与启动 1. **下载Dashboard** 访问[GitHub Releases页面](https://github.com/alibaba/Sentinel/releases),选择`sentinel-dashboard-1.8.8.jar`(适用于JDK17)[^1]。 2. **启动控制台** 执行以下命令启动Sentinel Dashboard: ```bash java -jar sentinel-dashboard-1.8.8.jar ``` 默认访问地址:`http://localhost:8080`(账号/密码:sentinel/sentinel)。 --- #### 二、Spring Boot集成配置 1. **添加依赖** 在`pom.xml`中引入Spring Cloud Alibaba Sentinel依赖: ```xml <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId> <version>2021.0.5.0</version> </dependency> ``` 2. **基础配置** 在`application.properties`中配置Dashboard地址与端口[^3]: ```properties spring.application.name=sentinel-test-001 server.port=8080 spring.cloud.sentinel.transport.dashboard=localhost:8081 spring.cloud.sentinel.transport.port=8791 ``` 3. **Feign客户端支持** 启用Sentinel对Feign的熔断功能[^2]: ```properties feign.sentinel.enabled=true ``` --- #### 三、控制台规则配置 1. **流控规则** - 登录Dashboard → 选择资源 → 配置QPS或线程数阈值。 - 示例:对接口`/api/test`设置QPS=10,超限触发降级。 2. **链路限流优化** 关闭上下文收敛以实现细粒度限流[^4]: ```properties spring.cloud.sentinel.web-context-unify=false ``` --- #### 四、代码示例 1. **定义资源与降级逻辑** ```java @RestController public class TestController { @GetMapping("/api/test") @SentinelResource(value = "testApi", blockHandler = "handleBlock") public String test() { return "Normal Response"; } // 降级处理方法 public String handleBlock(BlockException ex) { return "Triggered Block Handler"; } } ``` 2. **查看监控数据** 调用接口后,Dashboard的`簇点链路`页面会显示资源`testApi`的实时流量。 --- #### 五、注意事项 1. **版本兼容性** Spring Cloud Alibaba 2021.x 对应Sentinel 1.8.x,需确保依赖版本一致。 2. **规则持久化** 需修改Dashboard源码并集成Nacos[^5],步骤包括: - 下载Dashboard源码,添加`sentinel-datasource-nacos`依赖。 - 配置Nacos数据源,实现规则自动同步。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值