授课语音

熔断、限流、降级的基本概念

在分布式系统中,为了应对高并发、服务故障或流量激增等问题,熔断、限流和降级机制广泛应用于确保系统的稳定性和高可用性。下面是这三种机制的基本概念及其工作原理。


1. 熔断(Circuit Breaker)

定义

熔断是一种容错机制,当系统中的某个服务的调用失败率超过一定阈值时,主动中断对该服务的请求,防止持续的失败进一步影响到系统的其他部分。

目的

防止故障在系统中传播,保护系统整体稳定性。当某个服务发生故障时,通过短路机制避免该服务的异常请求再次影响到系统的其他部分。

工作原理

熔断器通常有三种状态:

  1. Closed(关闭状态):在关闭状态下,所有请求都会正常通过。如果请求失败达到一定比例,熔断器会跳转到“打开”状态。
  2. Open(打开状态):在打开状态下,所有请求都会被立即拒绝,不再尝试访问该服务。熔断器会记录一段时间内的失败信息。
  3. Half-Open(半打开状态):在半打开状态下,熔断器会允许部分请求通过,用以检测服务是否恢复正常。如果请求成功,则熔断器恢复到“关闭状态”;如果失败,熔断器则重新转为“打开状态”。

2. 限流(Rate Limiting)

定义

限流是控制单位时间内对某个资源或服务的请求数量的机制。通过限制每秒、每分钟等时间窗口内的请求次数来防止流量过大造成系统过载。

目的

防止系统因过高的并发请求或流量突增而导致服务崩溃,确保系统的平稳运行。

常见算法

  1. 固定窗口计数(Fixed Window Counter):将时间划分为固定大小的窗口,每个窗口内对请求的次数进行计数,当超过设定的阈值时,拒绝后续请求。
  2. 滑动窗口计数(Sliding Window Counter):与固定窗口类似,但每个请求都会参与到最近一段时间窗口的计数中,可以有效避免“突发流量”。
  3. 漏桶算法(Leaky Bucket):将请求放入一个容器中,容器以固定速率“泄漏”请求。请求在超过桶的容量时会被丢弃,防止流量过载。
  4. 令牌桶算法(Token Bucket):桶中有一定数量的令牌,请求必须先从桶中获取令牌才能执行。令牌以固定速率产生,当桶满时,新的令牌会被丢弃。此算法允许突发流量,但会有一个最大请求速率。

3. 降级(Fallback)

定义

降级是指当某个服务不可用或其性能下降时,自动采取简化的功能或返回默认值,以保证系统的基本可用性和用户体验。

目的

在服务发生故障或不可用时,通过降级处理确保系统不会崩溃,并尽量减少用户体验的影响。

典型场景

  1. 非核心功能降级:例如,推荐系统中的推荐功能暂时无法访问时,可以选择返回静态的推荐列表或者其他替代数据,而不完全停止服务。
  2. 缓存数据:在实时数据源不可用时,使用缓存中的数据作为响应,或者返回一个简单的默认结果(如“服务器暂时无法访问”)来避免服务完全中断。
  3. 静态页面或备用方案:对于一些不影响用户基本功能的部分,可以展示静态页面或降级为简化版的服务,保证用户仍然能够访问到系统的部分功能。

通过熔断、限流和降级三种策略,系统可以有效地应对高并发、故障和流量激增等问题,提升系统的健壮性和用户体验。

去1:1私密咨询

系列课程: