Spring Cloud Alibaba(四):Spring Cloud 使用 Sentinel 实现限流

本文介绍了如何在Spring Cloud项目中集成Sentinel,通过Sentinel控制台实现流量控制、熔断降级,保障服务稳定性。Sentinel是一个强大的高可用流量防护组件,具备丰富的应用场景和实时监控能力。文中详细展示了Sentinel控制台的安装启动,以及在Spring Cloud项目中设置限流规则,并进行了实际测试验证限流效果。
摘要由CSDN通过智能技术生成

本文为 Spring Cloud Alibaba 系列 的第四篇文章,系列文章持续更新,点此 查看更多

本示例代码基于之前的 m01 模块代码改造,项目启动依赖同 m01 模块,读者可以阅读此博文 《使用 Nacos + Dubbo 实现的远程服务调用》 了解 m01 模块代码功能。
本示例完整代码 点此查看

Sentinel 介绍

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

Sentinel 具有以下特征:

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

本文将介绍如何在 Spring Cloud 项目中使用 Sentinel 进行限流。

Sentinel 控制台安装与启动

获取控制台

可以从 release 页面 下载最新版本的控制台 jar 包。

也可以从最新版本的源码自行构建 Sentinel 控制台:

  • 下载 控制台 工程
  • 使用以下命令将代码打包成一个 fat jar: mvn clean package

启动控制台

Sentinel 控制台是一个标准的 Spring Boot 应用,以 Spring Boot 的方式运行 jar 包即可,本例中笔者下载的为 sentinel-dashboard-1.7.1,启动命令如下:

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

若启动时端口冲突,可使用 -Dserver.port=新端口 指定使用其他端口。

此处笔者使用 8019 端口启动 Sentinel 控制台,访问 http://localhost:8019 ,用户及密码默认都为 sentinel,登录成功进入如下界面:

在这里插入图片描述

Spring Cloud 集成 Sentinel

新建项目

复制之前 m01 模块中的代码,修各模块名称及相应依赖模块,如下:

修改前模块名修改后模块名
m01m03
m01-nacos-dubbo-apim03-nacos-dubbo-sentinel-api
m01-nacos-dubbo-consumerm03-nacos-dubbo-sentinel-consumer
m01-nacos-dubbo-providerm03-nacos-dubbo-sentinel-provider

添加依赖

m03/pom.xml

<properties> 节点下添加属性表示使用的 sentinel 版本

<properties>
    ......
    <!-- 指定使用的 sentinel 版本 -->
    <sentinel.version>1.7.1</sentinel.version>
    ......
</properties>
<!-- spring-cloud sentinel 支持 -->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
    <version>${spring-cloud-alibaba.version}</version>
</dependency>

<!-- Dubbo 集成 Sentinel -->
<dependency>
    <groupId>com.alibaba.csp</groupId>
    <artifactId>sentinel-apache-dubbo-adapter</artifactId>
    <version>${sentinel.version}</version>
</dependency>

m03-nacos-dubbo-sentinel-provider/pom.xml

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

<!-- Dubbo 集成 Sentinel -->
<dependency>
    <groupId>com.alibaba.csp</groupId>
    <artifactId>sentinel-apache-dubbo-adapter</artifactId>
</dependency>

说明

  • 添加 spring-cloud-starter-alibaba-sentinel 依赖后,会将项目所有的 web 接口定义为资源,可在 sentinel 控制台的 簇点链路 中对资源进行流控等操作;
  • 添加 sentinel-apache-dubbo-adapter 依赖后,会将当前服务提供的 Dubbo 接口实现方法定义为资源,可在 sentinel 控制台的 簇点链路 中对资源进行流控等操作,若读者不需要对 Dubbo 服务实现接口进行流控,可不添加此依赖;
  • 读者亦可通过 @SentinelResource 注解将指定的方法定义为资源,注意该方法不能为 private 修饰,若有兴趣了解此注解的详细用法,可参阅 @SentinelResource 注解

指定 Sentinel 控制台信息

m03-nacos-dubbo-sentinel-provider 下的 application.yml 中添加配置指定 Sentinel 控制台地址:

spring:
  cloud:
    sentinel:
      transport:
        dashboard: localhost:8019

此配置值请读者根据自己 sentinel-dashboard 服务的 IP 和端口地址进行修改;

启动项目

依次启动 m03-nacos-dubbo-sentinel-providerm03-nacos-dubbo-sentinel-consumer 模块。

访问 consumer 得到类似如下结果证明项目启动成功:

{"msg":"请求成功","result":"Shawearn,你好,你的用户 ID 是 1704517887","code":0}

添加流控规则

登入 Sentinel 控制台,在 m03-nacos-dubbo-sentinel-provider > 簇点链路 ,如下图:

在这里插入图片描述

上图红框标注的资源便是本示例中的 Dubbo 服务实现接口,点击 流控 按钮添加流控规则

在这里插入图片描述

为了方便看到限流效果,此处笔者将 单机阈值 设置为 1,阈值类型 为 QPS,表示每秒只允许一个请求,超过的请求直接返回失败,流控规则可在 流控规则 列表中进行查看与管理

在这里插入图片描述

测试规则

通过浏览器访问如下地址:

http://localhost:8021/hello?name=Shawearn

未超过阈值时返回结果如下:

{"msg":"请求成功","result":"Shawearn,你好,你的用户 ID 是 1704517887","code":0}

超过阈值时访问便会被快速失败掉:

在这里插入图片描述

结束语

至此,Spring Cloud 使用 Sentinel 实现限流便完成了,然而本示例毕竟只是一个最简单的入门示例,使用的也只是 sentinel 的部分功能。例如规则持久化、动态数据源、异常处理等功能都还未涉及。本示例通过 sentinel-dashboard 配置规则虽然方便,但配置的规则并没有被持久化,一旦项目重启,配置的规则就丢失了,这边需要修改 sentinel-dashboard 中规则存储的逻辑使规则持久化,这部分内容笔者会在后面逐一介绍。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值