微服务学习-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 可以实现微服务的流控降级。

相关推荐
小Tomkk31 分钟前
2025年PMP 学习十五 第10章 项目资源管理
学习·pmp·项目pmp
oceanweave1 小时前
【K8S学习之生命周期钩子】详细了解 postStart 和 preStop 生命周期钩子
学习·kubernetes
黄暄4 小时前
初识计算机网络。计算机网络基本概念,分类,性能指标
笔记·学习·计算机网络·考研
梅子酱~4 小时前
Vue 学习随笔系列二十三 -- el-date-picker 组件
前端·vue.js·学习
Alice-YUE5 小时前
【HTML5学习笔记1】html标签(上)
前端·笔记·学习·html·html5
jerry6095 小时前
LLM笔记(五)概率论
人工智能·笔记·学习·概率论
zy happy6 小时前
搭建运行若依微服务版本ruoyi-cloud最新教程
java·spring boot·spring cloud·微服务·ruoyi
threelab8 小时前
12.three官方示例+编辑器+AI快速学习webgl_buffergeometry_indexed
学习·编辑器·webgl
jerry6098 小时前
LLM笔记(六)线性代数
笔记·学习·线性代数·自然语言处理
ghost1438 小时前
C#学习第23天:面向对象设计模式
开发语言·学习·设计模式·c#