微服务学习-Sentinel 限流保护服务

1. 微服务框架为什么要使用流控降级组件?

为了提高系统运行期间的稳定性和可用性。

在微服务环境下,服务之间存在复杂的调用关系,单个服务的故障或过载可能迅速影响到整个系统,导致服务雪崩效应。流控组件可以限制进入系统的流量,防止系统因超出处理能力而崩溃。降级组件则在服务不可用或响应过慢时,提供降级逻辑,如返回备用数据或执行降级操作,以保证核心业务的正常运行。

需求:对下单接口进行流控。

2. Sentinel 是什么?

官方文档:introduction | Sentinel

Sentinel 是面向分布式、多语言异构化服务架构的流量治理组件,主要以流量为切入点,从流量路由、流量控制、流量整形、熔断降级、系统自适应过载保护、热点流量防护等多个维度来帮助开发者保障微服务的稳定性。

3. Sentinel 的安装

官方参考文档:quick-start | Sentinel

3.1. sentinel 有两部分构成

  • 核心库(Java 客服端):不依赖任何框架/库,能够运行域 Java8 及以上的版本的运行时环境,同时对 Dubbo/Spring Cloud 等框架也有较好的支持。
  • 控制台(Dashboard):Dashboard 主要负责管理推送规则、监控、管理机器信息等。

3.2. 安装 Sentinel 控制台

3.2.1. 注意版本

Sentinel Version:1.8.6

3.2.2. 官方文档地址

dashboard | Sentinel

3.2.3. 下载地址

https://github.com/alibaba/Sentinel/releases

3.2.4. 启动 sentinel 客户端

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

3.2.5. 访问 sentinel 控制台

http://icoolkj-mall-sentinel-dashboard:8888/#/login

从 Sentinel 1.6.0 起,Sentinel 控制台引入基本登录功能,默认用户名和密码都是 sentinel 。

4. sentinel 整合微服务

4.1. 官方参考文档

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

4.2. 以订单服务为例

4.2.1. 引入 sentinel 的依赖
复制代码
<!-- sentinel 依赖-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
4.2.2. 业务代码中配置需要保护的资源

当 SpringBoot 应用接入 Sentinel starter 后,可以针对某个 URL 进行流控,所有的 URL 就自动称为 Sentinel 中的埋点资源,可以针对某个 URL 进行流控。或者使用 @SentinelResource 注解用来标识资源是否被限流、降级。

注意:

  • MVC 接口方法自动埋点,不需要配置;
  • 非 MVC 接口方法可以使用 @SentinelResource 注解用来标识资源是否被限流、降级;
  • 对下单接口进行流控,此处不需要配置处理。
4.2.3. 订单服务添加 application.yml 配置,为订单服务设置 sentinel 控制台地址
复制代码
spring:
  cloud:
    sentinel:
      transport:
        # 添加sentinel的控制台地址 (icoolkj-mall-sentinel-dashboard 注意 host 映射配置)
        dashboard: icoolkj-mall-sentinel-dashboard:8888

优化:可以将 sentinel-dashboard 配置移到 Nacos 配置中心。

    1. Nacos 控制台创建 dataId 为 sentinel-dashboard.yml 配置文件,配置内容如下:

    spring:
    cloud:
    sentinel:
    transport:
    # 添加sentinel的控制台地址
    dashboard: icoolkj-mall-sentinel-dashboard:8888

注意:

这里可以指定 spring.cloud.sentinel.transport.port****端口配置,会在应用对应的机器上启动一个 Http Server,该 Server 会与 Sentinel 控制台做交互。比如 Sentinel 控制台添加了一个限流规则,会把规则数据 push 给这个 Http Server 接收,Http Server 再将规则注册到 Sentinel 中。

    1. 订单微服务的 application.yml 引入 sentinel-dashboard.yml 配置

    spring:
    config:
    import:
    - optional:nacos:${spring.application.name}.yml
    - optional:nacos:db-mysql-common.yml # mysql数据库公共配置
    - nacos:nacos-discovery.yml
    - optional:nacos:seata-client.yml # Seata Client 配置
    - optional:nacos:sentinel-dashboard.yml # Sentinel Dashboard 配置

4.3. 重启订单服务,测试

4.3.1. 启动 sentinel 控制台,在 sentinel 控制台配置下单资源的流控规则。
    1. 资源名: 接口的API
    2. 针对来源: 默认是default,当多个微服务都调用这个资源时,可以配置微服务名来对指定的微服务设置阈值
    3. 阈值类型: 分为QPS和线程数 假设阈值为10
    4. QPS类型: 只得是每秒访问接口的次数>10就进行限流
    5. 线程数: 为接受请求该资源分配的线程数>10就进行限流

注意:需要先访问一次下单接口,sentinel 控制台才会有订单服务配置菜单。

4.3.2. 测试,调整下单接口资源的单机阈值为 1,进行用户下单接口,是否被流控。

注意:

sentinel 需要与应用能够交互,Sentinel 控制台添加了一个限流规则,会把规则数据 push 给这个 Http Server 接收,Http Server 再将规则注册到 Sentinel 中。如果你本地应用,远程云服务部署 sentinel 控制台,就无法交互。

5. 小结

通过 sentinel 可以实现微服务的流控降级。

相关推荐
stark张宇1 天前
微服务架构必备:Gin + gRPC + Consul + Nacos + GORM 打造用户服务
微服务·gin·grpc
阿里云云原生5 天前
MSE Nacos Prompt 管理:让 AI Agent 的核心配置真正可治理
微服务·云原生
阿里云云原生5 天前
阿里云微服务引擎 MSE 及 API 网关 2026 年 1 月产品动态
微服务
西岸行者5 天前
学习笔记:SKILLS 能帮助更好的vibe coding
笔记·学习
悠哉悠哉愿意5 天前
【单片机学习笔记】串口、超声波、NE555的同时使用
笔记·单片机·学习
别催小唐敲代码5 天前
嵌入式学习路线
学习
毛小茛5 天前
计算机系统概论——校验码
学习
babe小鑫5 天前
大专经济信息管理专业学习数据分析的必要性
学习·数据挖掘·数据分析
麦聪聊数据5 天前
统一 Web SQL 平台如何收编企业内部的“野生数据看板”?
数据库·sql·低代码·微服务·架构
winfreedoms5 天前
ROS2知识大白话
笔记·学习·ros2