首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
01 | 是什么推动了单体应用到微服务架构的演进?
02 | 微服务全家桶:走进 Spring Cloud 的世界
03 | 初窥门径:我们要搭建一个怎样的微服务实战项目?
04 | 十八般兵器:如何搭建项目所需的开发环境?
05 | 牛刀小试:如何搭建优惠券模板服务?
06 | 牛刀小试:如何搭建优惠券计算服务和用户服务?
07 | Nacos体系架构:什么是服务治理?
08 | 服务治理:Nacos集群环境搭建
09 | 集成 Nacos:如何将服务提供者注册到 Nacos 服务器?
10 | 集成 Nacos:如何通过服务发现机制向服务提供者发起调用?
11 | Loadbalancer 实战:通过自定义负载均衡策略实现金丝雀测试
12 | OpenFeign:服务间调用组件 OpenFeign 是怎么“隔空取物”的?
13 | OpenFeign 实战:如何实现服务间调用功能?
14 | OpenFeign 实战:OpenFeign 组件有哪些高级玩法?
15 | 配置中心在微服务中发挥着怎样的作用?
16 | 如何集成 Nacos Config 实现配置项动态刷新?
17 | Sentinel 体系结构:什么是服务容错(降级熔断、流量整形)?
18 | Sentinel 实战:如何实施流量整形与限流策略?
19 | Sentinel 实战:如何为项目添加异常降级方案?
20 | Sentinel 实战:如何接入 Nacos 实现规则持久化?
21 | Sleuth 体系架构:为什么微服务架构需要链路追踪?
22 | 调用链追踪:集成 Sleuth 和 Zipkin,实现链路打标
23 | 调用链追踪:如何通过 ELK 实现日志检索?
24 | 为什么微服务架构少不了微服务网关?
25 | 微服务网关:Gateway 中的路由和谓词有何应用?
26 | 微服务网关:如何设置请求转发、跨域和限流规则?
27 | 微服务网关:如何借助 Nacos 实现动态路由规则?
28 | 消息驱动:谁说消息队列只能削峰填谷?
29 | 消息驱动:如何集成 Stream 实现消息驱动?
30 | 消息驱动:如何高效处理 Stream 中的异常?
31 | 消息驱动:如何通过 RabbitMQ 插件实现延迟消息?
32 | Alibaba Seata 框架:什么是分布式事务?
33 | 分布式事务:搭建 Seata 服务器
34 | 分布式事务:使用 Nacos+Seata 实现AT模式
35 | 分布式事务:使用 Nacos+Seata 实现 TCC 补偿模式
36 | 说透微服务 | 什么是主链路规划?
当前位置:
首页>>
技术小册>>
Spring Cloud微服务项目实战
小册名称:Spring Cloud微服务项目实战
### 19 | Sentinel 实战:如何为项目添加异常降级方案? 在微服务架构中,服务的稳定性与可靠性是确保业务连续性的关键。随着系统复杂度的增加,服务间的依赖关系也日益复杂,任何一个服务的异常都可能引发连锁反应,影响整个系统的稳定性。为了应对这种挑战,微服务架构中常采用各种熔断降级策略来减轻故障对系统的影响。Alibaba 开源的 Sentinel 作为一款面向分布式服务架构的高可用防护组件,能够有效地实现服务的流量控制、熔断降级、系统负载保护等多个维度的高可用保障。本章将详细介绍如何在 Spring Cloud 微服务项目中集成 Sentinel,并为项目添加异常降级方案。 #### 一、Sentinel 简介 Sentinel 是面向分布式服务架构的高可用防护组件,主要用于流量控制、熔断降级、系统负载保护等。它提供了丰富的流量控制策略、熔断降级规则以及系统负载保护能力,能够确保系统在高并发、高负载的情况下依然能够稳定运行。Sentinel 的核心思想是通过资源的定义与规则的配置,对服务的访问进行精细化控制,从而达到保护系统的目的。 #### 二、Sentinel 在 Spring Cloud 中的集成 在 Spring Cloud 项目中集成 Sentinel,通常涉及以下几个步骤: 1. **添加依赖** 首先,需要在项目的 `pom.xml` 文件中添加 Sentinel 的 Spring Cloud Starter 依赖。以 Spring Cloud Alibaba 为例,可以添加如下依赖: ```xml <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId> <version>你的版本号</version> </dependency> ``` 注意替换 `你的版本号` 为实际使用的版本号。 2. **配置 Sentinel** 接下来,在 `application.yml` 或 `application.properties` 文件中配置 Sentinel 的相关参数,如控制台地址等(如果需要使用 Sentinel Dashboard 进行规则管理的话)。 ```yaml spring: cloud: sentinel: transport: dashboard: localhost:8080 # Sentinel 控制台地址 eager: true # 是否开启 Eager 加载规则 ``` 3. **定义资源** Sentinel 通过对资源的定义来进行流量控制、熔断降级等操作。在 Spring Cloud 中,可以通过 `@SentinelResource` 注解来定义资源。例如,为一个 RESTful 接口添加 Sentinel 资源定义: ```java @RestController public class UserController { @GetMapping("/user/{id}") @SentinelResource(value = "getUserById", blockHandler = "handleGetUserByIdBlock") public User getUserById(@PathVariable Long id) { // 模拟数据库查询 if (id % 10 == 0) { throw new RuntimeException("数据库异常"); } return new User(id, "User" + id); } // 降级处理逻辑 public User handleGetUserByIdBlock(Long id, BlockException ex) { return new User(-1L, "服务降级,获取用户信息失败"); } } ``` 在上述代码中,`@SentinelResource` 注解用于定义资源 `getUserById`,并指定了当该资源被 Sentinel 拦截时调用的降级处理方法 `handleGetUserByIdBlock`。 #### 三、配置熔断降级规则 在 Sentinel 中,熔断降级规则是控制服务行为的关键。这些规则可以在 Sentinel Dashboard 中进行配置,也可以通过编程方式动态设置。 1. **Sentinel Dashboard 配置** 启动 Sentinel Dashboard(如果尚未启动),在 Dashboard 中可以看到所有注册的服务和资源。通过界面操作,可以为指定的资源设置熔断降级规则。规则类型包括流量控制、熔断降级、热点参数限流等。 - **熔断降级规则**:主要设置当某个资源的调用失败率达到一定阈值时,自动触发熔断,对该资源的后续调用直接返回降级响应,直到一段时间后自动或半自动恢复。 2. **编程方式配置** 除了使用 Dashboard,还可以通过编程方式在代码中直接配置熔断降级规则。这通常涉及到 Sentinel 的 API 使用,如 `FlowRuleManager`、`DegradeRuleManager` 等管理类。 ```java import com.alibaba.csp.sentinel.Entry; import com.alibaba.csp.sentinel.SphU; import com.alibaba.csp.sentinel.slots.block.BlockException; import com.alibaba.csp.sentinel.slots.block.degrade.DegradeRule; import com.alibaba.csp.sentinel.slots.block.degrade.DegradeRuleManager; // 示例:编程方式设置熔断降级规则 public class SentinelConfig { public static void addDegradeRule() { List<DegradeRule> rules = new ArrayList<>(); DegradeRule rule = new DegradeRule(); rule.setResource("getUserById"); rule.setGrade(RuleConstant.DEGRADE_GRADE_RT); // 响应时间 rule.setCount(100); // 阈值,RT rule.setTimeWindow(10); // 时间窗口,单位秒 rules.add(rule); DegradeRuleManager.loadRules(rules); } } ``` 上述代码示例展示了如何编程方式设置一个基于响应时间的熔断降级规则。 #### 四、测试与验证 完成 Sentinel 的集成和规则配置后,需要对系统进行测试以验证熔断降级机制是否按预期工作。 1. **模拟异常场景** 通过修改服务逻辑或外部依赖(如数据库、第三方服务等),模拟服务异常场景,如高延迟、高错误率等。 2. **观察熔断降级效果** 观察 Sentinel Dashboard 上的实时监控数据,查看熔断降级规则是否被触发。同时,通过接口测试工具(如 Postman、Curl 等)调用服务接口,验证当触发熔断降级时,接口是否能够返回预期的降级响应。 3. **调整优化** 根据测试结果,对熔断降级规则进行调整优化,以达到最佳的保护效果。 #### 五、总结 通过本章的学习,我们了解了 Sentinel 在 Spring Cloud 微服务项目中的集成与配置方法,掌握了如何通过 Sentinel 实现服务的熔断降级功能。Sentinel 的使用不仅提高了系统的稳定性和可靠性,还降低了故障对业务的影响。在实际项目中,建议根据业务需求和系统特点,合理配置 Sentinel 规则,以达到最佳的性能与稳定性平衡。 未来,随着微服务架构的不断发展,Sentinel 这类高可用防护组件将发挥越来越重要的作用。因此,深入理解并掌握其使用方法和最佳实践,对于构建高可用、高可靠的微服务系统至关重要。
上一篇:
18 | Sentinel 实战:如何实施流量整形与限流策略?
下一篇:
20 | Sentinel 实战:如何接入 Nacos 实现规则持久化?
该分类下的相关小册推荐:
Mybatis合辑2-Mybatis映射文件
Java语言基础2-运算符
Java语言基础3-流程控制
Java语言基础6-面向对象高级
Java高并发秒杀入门与实战
SpringBoot合辑-高级篇
Java语言基础4-数组详解
深入理解Java虚拟机
Mybatis合辑4-Mybatis缓存机制
Java语言基础10-Java中的集合
Java必知必会-Maven初级
Java面试指南