微服务治理:熔断、限流、降级区别
服务熔断、服务限流和服务降级是构建高可用、高弹性系统的三大基石,它们的目标一致(保证系统核心功能可用),但着眼点和实现方式不同。
一、核心概念对比
| 特性 | 服务熔断 (Circuit Breaker) | 服务限流 (Rate Limiting / Throttling) | 服务降级 (Service Degradation) |
|---|---|---|---|
| 核心目标 | 快速失败,防止连锁故障。故障隔离。 | 控制流量,防止系统被突发流量冲垮。过载保护。 | 弃车保帅,牺牲非核心功能,保证核心功能可用。体验保全。 |
| 触发条件 | 依赖的下游服务失败率/超时率达到阈值。 | 流量/并发数达到预设的阈值(如QPS、线程数)。 | 1. 系统资源普遍不足(如CPU、线程池满)。 2. 熔断或限流发生后。 |
| 作用对象 | 主要是对下游依赖服务的调用进行控制。 | 主要是对进入本服务的请求流量进行控制。 | 主要是对本服务提供的功能进行调整。 |
| 实现层面 | 通常集成在服务调用框架中(如Feign、Dubbo)。 | 通常位于网关/入口层或服务内部(如Sentinel、Hystrix)。 | 业务逻辑层,需要根据业务预先设计。 |
| 状态恢复 | 半开状态自动探测下游是否恢复,然后闭合电路。 | 一旦流量峰值过去,或下一个时间窗口到来,自动恢复。 | 需要手动或自动检测系统资源恢复后,重新开启完整功能。 |
| 好比 | 家里的空气开关。某个线路(下游服务)短路(故障),立即跳闸(熔断),保护整个家(系统)不被烧毁。 | 热门景区的限流措施。只允许同时进入5000人(阈值),后面的游客必须排队等待,防止景区(系统)崩溃。 | 双十一的电商网站。为了保证你能下单和支付(核心功能),暂时关闭了商品评论、推荐算法(非核心功能)。 |
二、详细解释与关系
1. 服务熔断 (Circuit Breaker)
- 是什么:一种自动化的故障保护机制。它监控对某个特定服务的调用(如A服务调用B服务)。
- 如何工作:
- 关闭状态 (Closed):正常调用下游服务。
- 打开状态 (Open):当调用失败(超时、异常等)的次数在一个时间窗口内达到阈值,熔断器会跳闸,进入打开状态。在此状态下,所有对此服务的调用会立即失败,不再真正发起网络请求(快速失败)。
- 半开状态 (Half-Open):熔断器打开一段时间后,会进入半开状态,尝试放行一个请求去探测下游服务是否恢复。如果成功,则闭合熔断器(回到Closed);如果仍然失败,则继续保持打开状态。
- 目的:防止单个下游服务的故障导致整个系统的线程池被占满、资源被拖垮,从而引发雪崩效应。
2. 服务限流 (Rate Limiting / Throttling)
- 是什么:控制请求的速率或并发数量,将流量限制在系统所能处理的合理范围之内。
- 常见算法:
- 计数器法:限制单位时间内的请求数(如每秒100次)。
- 漏桶算法:以恒定的速率处理请求,平滑流量。
- 令牌桶算法:允许一定程度的突发流量(比如每秒100个请求,但桶里攒了100个令牌,可以瞬间处理100个请求)。
- 目的:应对突发流量(如秒杀活动),保证系统不会因为超出其处理能力而崩溃,同时也能起到均匀利用系统资源的作用。
3. 服务降级 (Service Degradation)
- 是什么:一种有损策略。当系统资源(如响应时间、CPU、内存)紧张时,主动关闭或简化一些非核心的业务功能,从而释放出更多的资源来保证核心业务的顺畅运行。
- 如何实现:
- 手动降级:提前配置好降级开关,在大促前通过配置中心手动开启。
- 自动降级:系统根据监控指标(如平均响应时间、错误率)自动触发。
- 降级后的处理方式:
- 返回兜底数据 (Fallback):如返回一个默认值、缓存中的旧数据。
- 返回空值。
- 提示友好信息:如服务繁忙,请稍后再试。
- 目的:保证核心流程的通过,提升用户体验的底线。即使整个系统有点慢,但用户最关心的功能(如下单、付款)仍然可用。
三、三者之间的协同关系
这三者通常不是孤立存在的,而是在一个完整的微服务架构中协同工作,共同抵御流量洪峰和依赖故障。
一个典型的场景:
- 双十一零点,流量激增(触发条件)。
- 网关层首先进行限流,将超过系统处理能力的请求直接拒绝或排队,保护系统入口。
- 系统内服务A调用服务B,但由于服务B压力过大,响应缓慢且超时增多。
- 服务A中的熔断器检测到服务B的失败率超过阈值,迅速熔断对B的调用,避免服务A的线程被拖垮。
- 由于服务B不可用,而服务B提供的功能又是服务A的非核心功能(比如商品详情页的猜你喜欢),于是服务A触发服务降级,暂时屏蔽猜你喜欢模块,并返回一个空的兜底数据。
- 服务A的核心功能(如展示商品基本信息、库存)依然正常提供服务。
- 当流量高峰过去,服务B压力下降,熔断器探测到成功,自动闭合,系统逐步恢复正常。
总结
- 服务限流是预防措施,在系统入口控制流量,不让问题产生。
- 服务熔断是故障隔离措施,在依赖调用环节快速失败,防止问题扩散。
- 服务降级是应急措施,在系统内部牺牲次要功能,保证核心功能可用,是问题发生后的最终保障。
它们三者相辅相成,共同构成了分布式系统稳定性的护城河。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 技术之路!
评论


