Java框架-SpringCloud框架-5
背景
本文是《Java 后端从小白到大神》修仙系列之框架学习,Spring Cloud 微服务实战系列的 第五篇
。Spring Cloud 是构建微服务架构的基石,拥有完整的服务治理生态,在云原生架构中广泛应用。本系列将从架构认知到实际工程,逐步构建一套企业级 Spring Cloud 微服务项目。若想详细学习请点击首篇博文开始,现在开始学习。
文章概览
服务熔断、限流、降级与系统稳定性防线:
- 熔断机制原理与线程隔离模型
- Sentinel 快速集成与 Dashboard 配置
- 接口级限流 + 热点参数限流实践
- 系统保护规则与高可用降级策略
- 服务级别限流 + 自定义降级返回模板
1. Sentinel 快速集成
微服务之间通过 HTTP 或 RPC 调用形成“调用链”,但链条越长、服务越多,系统稳定性也越脆弱。Spring Cloud Alibaba 提供的服务保护利器 —— Sentinel,通过限流、熔断、降级等机制,构筑系统的“最后防线”。
添加依赖(所有要保护的服务模块)
以 user-service
为例,在 pom.xml
添加:
配置 application.yaml
启动 Dashboard 控制台
2. 熔断机制原理与线程隔离模型
- 熔断:指某个服务调用失败率或响应时间过高时,中断请求链。
- 线程隔离:每个服务维护自己的线程池,防止“雪崩效应”。
示例:模拟 User 接口慢响应
然后在 Sentinel 控制台中为资源 userDelay
配置 熔断策略(慢调用比例)。
3. 接口级限流 + 热点参数限流实践
接口级限流
Sentinel 控制台中配置资源名 getUserInfo
,并设置 QPS 限流(如 1 秒只能访问 2 次)。
热点参数限流(必须显式标注)
控制台中资源名为 hotKey
,配置热点参数限流策略。
4. 系统保护与高可用降级策略
系统保护规则包括:
- Load(系统负载)
- RT(平均响应时间)
- QPS
- 线程数
- 入口 QPS
这些规则在 Sentinel 控制台「系统规则」中配置,常用于入口服务(如 gateway-service
)限流保护。
降级策略使用:
控制台配置熔断触发条件如异常比例超过 50%。
5. 服务级别限流 + 自定义降级模板
服务级限流(基于服务名)
可使用 Gateway Sentinel 规则在网关层统一配置:
然后在 Sentinel 控制台配置 Gateway 规则。
降级返回模板
自定义全局异常处理器:
总结
核心对比 Resilience4j vs Sentinel
维度 | Resilience4j | Sentinel |
---|---|---|
所属方 | Netflix 社区演进(Spring 官方推荐) | 阿里巴巴开源(Alibaba Cloud 提供) |
整合生态 | Spring Cloud CircuitBreaker / Micrometer | Spring Cloud Alibaba |
功能模块 | 熔断、限流、重试、缓存、RateLimiter 等 | 熔断、限流、系统保护、热点参数、流控链路 |
配置方式 | 代码优先(Java API + 注解) | 控制台优先(支持持久化规则) |
依赖轻量 | 体积小,零依赖于 Netty/线程池 | 本身带有 Netty server,稍重 |
控制台支持 | ❌(需自建监控) | ✅ 自带可视化 Dashboard |
热点参数限流 | ❌ 不支持 | ✅ 支持特定参数维度限流 |
服务级链路限流 | ❌ | ✅ 支持调用链限流策略 |
对网关层支持 | ❌ | ✅ 专门的 Gateway Sentinel 模块 |
服务端协调能力 | ❌ | ✅ 多实例集中控制(如控制台统一推送规则) |
社区活跃度 | 高(与 Spring Boot 高度兼容) | 高(国内广泛使用) |
技术路线不同
- Resilience4j:专注于本地 Java 级容错,面向开发者、轻量级、模块化。适用于单体服务或轻量微服务。
- Sentinel:不仅支持本地容错,还支持服务链路层级的流控、限流策略,可以部署为统一控制平台。
功能覆盖范围
- Resilience4j 更关注“熔断、限流、重试、退避”等行为;
- Sentinel 更全面,适合网关 + 下游服务联动控制,如热点参数限流、流控链路、系统规则(如线程/负载保护)。
控制台 & 运维视角
- Resilience4j 默认无 Dashboard,需配合 Micrometer + Prometheus + Grafana;
- Sentinel 自带控制台,支持页面实时配置、推送限流/熔断规则,适合运维接手配置。
使用场景
场景 / 需求 | 建议使用 |
---|---|
微服务架构、服务众多、希望统一控制规则 | Sentinel |
需要热点参数限流、系统级限流、网关层保护等复杂策略 | Sentinel |
小型项目、轻量服务、不需要可视化规则控制 | Resilience4j |
偏重代码控制,习惯注解 + 编程方式配置 | Resilience4j |
国际项目、不想引入阿里生态 | Resilience4j |
和 Spring Cloud Gateway / Nacos / Dubbo 配套使用 | Sentinel 更合适 |
真实使用建议
架构层 | 推荐组件 | 说明 |
---|---|---|
网关层 | Sentinel | 配合 Gateway Sentinel 使用,提供服务级链路限流 |
服务层 | Resilience4j | 注解式熔断/重试/Fallback,简单轻量,Spring Boot 兼容 |
复杂链路场景 | Sentinel | 控制台统一流控配置,如电商/活动系统 |
文章作者 会写代码的小郎中
上次更新 2025-08-01
许可协议 CC BY-NC-ND 4.0