Spring Cloud Alibaba(10)---Sentinel控制台搭建+整合SpringCloudAlibaba

Sentinel实战:Spring Cloud Alibaba流量控制与降级策略
本文介绍了如何搭建Sentinel控制台并整合Spring Cloud Alibaba,实现流量控制和降级规则。通过配置QPS或线程数阈值进行限流,并设置降级策略以确保服务高可用。文中提供了详细的配置示例和测试过程。

上一篇博客讲了Sentinel一些概念性的东西 Spring Cloud Alibaba(9)---Sentinel概述

这篇博客主要讲 Sentinel控制台搭建,和 整合SpringCloudAlibaba来实现流量控制降级控制。至于其它比如热点配置、系统规则和授权规则等

自己去官网详细看,这里就不叙述了。

一、Sentinel控制台搭建

1、下载地址

官方有提供直接下载地址,我们可以下载自己需要的版本,我这边下载的版本是 1.8.0

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

2、启动控制台

下载之后我们发现就是一个jar包,我们就可以用jar的方式去启动它

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

说明 这里我通过 8282 端口来启动它。

3、登陆控制台

重点 启动之后访问 localhost:8282; 登录即可用户名和密码默认是sentinel

登录之后看到左侧的菜单只有默认的一个;因为现在sentinel还没有发现其他微服务,这样一来Sentinel客户端就搭建成功了,接下来开始整合SpringCloudAlibaba。

 

二、Sentinel整合SpringCloudAlibaba

这篇也是在之前搭建好的基础上添加,这里在mall-goods微服务上做演示

1、pom.xml

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

2、application.yml

spring:
  application:
    name: mall-goods
  cloud:
    sentinel:
      transport:
        dashboard: localhost:8282
        port: 9999

3、SentinelTestController

这里新增一个接口,来方便接下来测试限流、熔断等。

@RestController
@RequestMapping("api/v1/sentinel")
public class SentinelTestController {

    private volatile int total = 0;
    
    @RequestMapping("test-sentinel")
    public Object findByGoodsId() {
        return total++;
    }
}

4、测试

这个是时候我们重新启动 mall-goods微服务。重启之后我们发现Sentinel还是并没有mall-goods服务,那是因为于Sentinel是懒加载模式,所以需要先访问上面这个接口后才会

在控制台出现。所以这里我们访问下

http://localhost:6001/api/v1/sentinel/test-sentinel

访问之后我们再看控制台

我们可以看到控制台已经有 mall-goods 服务了。而且我们刚刚请求的接口这里也有了。这说明Sentinel 默认会把接口直接当成一个资源。既然是这样,接下来就对这个请求

进行流控、降级、授权、热点等配置了;先来介绍如何添加流控吧。

 

三、流量控制规则及示例

概念 流量控制(flow control), 其原理是监控应用的QPS并发线程数等指标,当达到指定的阈值时对流量进行控制,以避免被瞬时的流量高峰冲垮,从而保障应用的高可用性。

流量控制官方文档

https://github.com/alibaba/Sentinel/wiki/%E6%B5%81%E9%87%8F%E6%8E%A7%E5%88%B6

1、规则说明

点击+流控的按钮,出现下面弹窗。

图中一共有6个名词

资源名

默认是请求路径,可⾃定义

针对来源

对哪个微服务进⾏限流,默认是不区分来源,全部限流。这个是针对 区分上游服务进⾏限流, ⽐ 如 商品服务 被 订单服务、⽤户服务调⽤,就可以针对来源进⾏限流。

阈值类型

其实就是通过哪种方式限流,是通过QPS呢,还是通过线程数。他们的含义我这里不在过多解释了,具体可以看这篇文章。什么是QPS,TPS,吞吐量

单机阈值

很好理解,就是现在每秒QPS或者线程数达到这个数量就会限流。

举例子

1)上面阈值类型设置QPS,下面单机阈值设置1。那组合的意思就是 每秒的请求数超过1会直接被限流。
2)上面阈值类型设置线程数量,下面单机阈值设置1。那组合的意思就是 当第一个线程未处理完成时,其他新开启请求的线程都将被限流。

线程数稍微难理解点,这里再通俗的解释下 我们对一个接口资源 阈值类型设置线程数量,下面单机阈值设置1。这个接口方法内有2秒钟的睡眠延迟,那么,当第一个线程未

处理完成时(即2秒内),其他新开启请求的线程都将被限流,只有第一个未限流的线程成功处理,新的请求才会进来。

并发数控制⽤于保护业务线程池不被慢调⽤耗尽Sentinel 并发控制不负责创建和管理线程池,⽽是简单统计当前请求上下⽂的线程数⽬(正在执⾏的调⽤数⽬)
如果超出阈值,新的请求会被⽴即拒绝,效果类似于信号量隔离。并发数控制通常在调⽤端进⾏配置

流控模式

这里有三种模式 直接 关联 链路,这个这里也不做过度解释,具体看上面官方文档。

流控效果

这里也有三种:快速失败Warm Up 、排队等待。具体也看上面官方文档说明。

总结

2、测试

我这里配置如下

阈值类型:QPS,单机阈值:1,流控模式:直接,流控效果:快速失败

然后我们在来请求上面的接口

很明显,如果一秒内有两个请求就会限流。

 

四、降级规则说明及示例

除了流量控制以外,对调用链路中不稳定的资源进行熔断降级也是保障高可用的重要措施之一。

降级规则官方文档

https://github.com/alibaba/Sentinel/wiki/%E7%86%94%E6%96%AD%E9%99%8D%E7%BA%A7

1、规则说明

熔断策略

Sentinel 提供以下几种熔断策略:慢调用比例异常比例异常数

慢调用比例:选择以慢调用比例作为阈值,需要设置允许的慢调用 RT(即最大的响应时间),请求的响应时间大于该值则统计为慢调用。

异常比例 :当单位统计时长内请求数目大于设置的最小请求数目,并且异常的比例大于阈值,则接下来的熔断时长内请求会自动被熔断。

异常数 :当单位统计时长内的异常数目超过阈值之后会自动进行熔断。

熔断降级规则说明

熔断降级规则(DegradeRule)包含下面几个重要的属性:

2、测试

这里添加如下规则配置

然后我们新增一个接口

 @RequestMapping("test-sentinel-exception")
    public Object testSentinelException() {
        int i = (int) (Math.random() * 100);
        if(i>10){
            throw new NullPointerException("随机错误");
        }
        return "成功";
    }

测试

我们可以看出 当请求超过2次异常,那么就会报熔断的异常错误。有关其它的规则我这里不在阐述了,具体的都可以看官网。

参考

1、还这样学Spring Cloud?学透这份Alibaba笔记手册,面试官都佩服

2、阿里新一代微服务,内部大佬手抄的笔记+脑图不容错过,全是精华

3、Java代码优化神技,金九银十薪水double就靠它

<think>首先,用户的问题是关于如何集成 Spring Cloud Alibaba Sentinel 的,具体是 "springcloud集成spring-cloud-starter-alibaba-sentinel的方法"。用户提供了两个引用:[^1] 和 [^2],它们描述了 Sentinel 的功能和优势,但没有直接给出集成方法。所以我需要基于我的知识和这些引用来回答。 用户的上一次问题或对话历史没有被提供,所以我只能基于当前的查询。系统指令要求回答必须使用中文,结构清晰,帮助用户逐步解决问题,并保证真实可靠。 关键点: - 引用[1]提到 Spring Cloud Alibaba Sentinel Gateway,适用于网关场景。 - 引用[2]描述 Spring Cloud Alibaba Sentinel 的核心能力和迁移优势。 用户的问题焦点是集成方法,所以我应该提供一个步骤指南,展示如何在 Spring Cloud 项目中集成 spring-cloud-starter-alibaba-sentinel。 回想标准集成步骤: 1. **添加依赖**:在 Maven 或 Gradle 中添加 Sentinel starter 依赖。 2. **配置属性**:在 application.yml 或 application.properties 中配置 Sentinel 的属性,如 dashboard 地址。 3. **启用 Sentinel**:可能需要添加注解或配置类。 4. **定义资源**:使用 Sentinel 的注解(如 @SentinelResource)来定义保护的方法。 5. **配置规则**:通过控制台或代码配置流量控制规则、熔断规则等。 由于引用中提到动态规则推送,我应该强调与 Sentinel Dashboard 的集成。 回答结构: - **引言**:简要介绍 Sentinel 和集成的重要性。 - **步骤指南**:分步解释集成过程。 - **代码示例**:提供示例代码片段,使用正确的 LaTeX 格式化数学表达式(如果有),但这里可能没有数学表达式,专注于代码。 - **添加引用标识**:在引用来源的段落末尾添加 [^1] 或 [^2]。 - **生成相关问题**:在回答结束后添加相关的问题部分。 确保使用中文。 最终回答大纲: 1. **介绍**:基于引用,解释为什么集成 Sentinel。 2. **集成方法**: - 步骤 1:添加依赖(Maven 或 Gradle)。 - 步骤 2:配置 Sentinel Dashboard。 - 步骤 3:启用 Sentinel- 步骤 4:使用 Sentinel 注解定义资源。 - 步骤 5:配置规则。 3. **代码示例**:展示依赖添加和配置示例。 4. **结尾**:简要总结。 5. **相关问题**:生成三个相关问题。 添加引用: - 在介绍部分或配置部分末尾自然地添加 [^1] 和 [^2]。 例如: - "Sentinel 提供动态流量控制等功能 [^2]。" 生成相关问题: - 基于主题,如配置优化、迁移指南、常见问题解决等。 相关问题想法: 1. 如何配置 Sentinel Dashboard 进行规则管理? 2. Sentinel 与 Hystrix 的迁移比较? 3. 在高并发场景下如何优化 Sentinel 规则? 现在,编译回答。 </think>### Spring Cloud 集成 spring-cloud-starter-alibaba-sentinel 的方法 Spring Cloud Alibaba Sentinel 是一个强大的微服务稳定性工具,提供动态流量控制、熔断降级和系统自适应保护等功能[^2]。对于已在 Spring Cloud 项目中集成 Sentinel 的需求,以下是详细的分步指南。集成过程主要涉及依赖添加、配置设置和资源定义,确保高可用性和实时监控。参考 Spring Cloud Alibaba 官方文档和社区实践,以下是可靠方法(基于 Maven 构建工具示例)。 #### 1. **添加 Maven 依赖** 在项目的 `pom.xml` 中添加 Sentinel starter 依赖。确保 Spring Cloud 版本兼容(推荐 Spring Cloud 2020.0.x 或更高版本)。 ```xml <dependencies> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId> <version>2022.0.0.0</version> <!-- 版本应与 Spring Cloud 对齐 --> </dependency> </dependencies> ``` 如果使用 Spring Cloud Gateway,还需添加网关适配器依赖(参考引用[1]:`spring-cloud-alibaba-sentinel-gateway`): ```xml <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-alibaba-sentinel-gateway</artifactId> <version>2022.0.0.0</version> </dependency> ``` #### 2. **配置 Sentinel Dashboard** 在 `application.yml` 或 `application.properties` 中配置 Sentinel Dashboard 地址(用于动态规则推送和管理)。Sentinel Dashboard 是独立部署的控制台,需单独下载运行。 ```yaml spring: cloud: sentinel: transport: dashboard: localhost:8080 # Sentinel Dashboard 默认端口 eager: true # 启用时立即初始化,避免首次请求无保护 ``` 此步骤实现了动态规则推送能力,提升实时性[^2]。 #### 3. **启用 Sentinel 并定义资源** 在 Spring Boot 主类或配置类中,无需显式注解(依赖添加后自动装配)。使用 `@SentinelResource` 注解定义受保护的方法资源(如 Service 层方法)。 ```java import com.alibaba.csp.sentinel.annotation.SentinelResource; import org.springframework.stereotype.Service; @Service public class UserService { @SentinelResource(value = "getUser", blockHandler = "handleBlock") public String getUser(String id) { // 业务逻辑 return "User " + id; } public String handleBlock(String id, BlockException ex) { return "请求被限流或熔断: " + id; } } ``` - `value` 指定资源名,用于规则匹配。 - `blockHandler` 定义限流或熔断时的降级方法。 #### 4. **配置规则(可选初始规则)** 规则可通过 Dashboard 动态配置,或在代码中初始化(适合测试环境)。添加配置类: ```java import com.alibaba.csp.sentinel.slots.block.flow.FlowRule; import com.alibaba.csp.sentinel.slots.block.flow.FlowRuleManager; import javax.annotation.PostConstruct; import java.util.Collections; @Configuration public class SentinelConfig { @PostConstruct public void initRules() { FlowRule rule = new FlowRule(); rule.setResource("getUser"); rule.setGrade(RuleConstant.FLOW_GRADE_QPS); // 基于 QPS 限流 rule.setCount(10); // 阈值:每秒 10 个请求 FlowRuleManager.loadRules(Collections.singletonList(rule)); } } ``` 生产环境推荐使用 Dashboard 推送规则,支持长轮询更新[^2]。 #### 5. **验证集成** 启动应用并访问 Sentinel Dashboard(默认地址 `http://localhost:8080`),查看资源监控和规则生效情况。测试触发限流: - 发送高并发请求模拟流量,验证降级方法是否执行。 - 如果集成网关,Sentinel Gateway 模块会自动保护路由资源[^1]。 #### 注意事项 - **版本兼容性**:确保 `spring-cloud-starter-alibaba-sentinel` 版本与 Spring CloudSpring Boot 匹配(参考 [Spring Cloud Alibaba 文档](https://github.com/alibaba/spring-cloud-alibaba))。 - **动态规则**:优先使用 Dashboard 管理规则,避免硬编码。 - **迁移提示**:如果从 Hystrix 迁移,Sentinel 在实时性和扩展性上更具优势[^2]。 - **性能监控**:集成后,结合 Prometheus 或 Grafana 监控流量指标。 以上步骤基于社区最佳实践,适用于大多数场景。如果遇到问题,检查依赖冲突或日志输出。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值