第2课_基本概念
热度🔥:11 免费课程
授课语音
熔断、限流、降级的基本概念
在分布式系统中,为了应对高并发、服务故障或流量激增等问题,熔断、限流和降级机制广泛应用于确保系统的稳定性和高可用性。下面是这三种机制的基本概念及其工作原理。
1. 熔断(Circuit Breaker)
定义:
熔断是一种容错机制,当系统中的某个服务的调用失败率超过一定阈值时,主动中断对该服务的请求,防止持续的失败进一步影响到系统的其他部分。
目的:
防止故障在系统中传播,保护系统整体稳定性。当某个服务发生故障时,通过短路机制避免该服务的异常请求再次影响到系统的其他部分。
工作原理:
熔断器通常有三种状态:
- Closed(关闭状态):在关闭状态下,所有请求都会正常通过。如果请求失败达到一定比例,熔断器会跳转到“打开”状态。
- Open(打开状态):在打开状态下,所有请求都会被立即拒绝,不再尝试访问该服务。熔断器会记录一段时间内的失败信息。
- Half-Open(半打开状态):在半打开状态下,熔断器会允许部分请求通过,用以检测服务是否恢复正常。如果请求成功,则熔断器恢复到“关闭状态”;如果失败,熔断器则重新转为“打开状态”。
2. 限流(Rate Limiting)
定义:
限流是控制单位时间内对某个资源或服务的请求数量的机制。通过限制每秒、每分钟等时间窗口内的请求次数来防止流量过大造成系统过载。
目的:
防止系统因过高的并发请求或流量突增而导致服务崩溃,确保系统的平稳运行。
常见算法:
- 固定窗口计数(Fixed Window Counter):将时间划分为固定大小的窗口,每个窗口内对请求的次数进行计数,当超过设定的阈值时,拒绝后续请求。
- 滑动窗口计数(Sliding Window Counter):与固定窗口类似,但每个请求都会参与到最近一段时间窗口的计数中,可以有效避免“突发流量”。
- 漏桶算法(Leaky Bucket):将请求放入一个容器中,容器以固定速率“泄漏”请求。请求在超过桶的容量时会被丢弃,防止流量过载。
- 令牌桶算法(Token Bucket):桶中有一定数量的令牌,请求必须先从桶中获取令牌才能执行。令牌以固定速率产生,当桶满时,新的令牌会被丢弃。此算法允许突发流量,但会有一个最大请求速率。
3. 降级(Fallback)
定义:
降级是指当某个服务不可用或其性能下降时,自动采取简化的功能或返回默认值,以保证系统的基本可用性和用户体验。
目的:
在服务发生故障或不可用时,通过降级处理确保系统不会崩溃,并尽量减少用户体验的影响。
典型场景:
- 非核心功能降级:例如,推荐系统中的推荐功能暂时无法访问时,可以选择返回静态的推荐列表或者其他替代数据,而不完全停止服务。
- 缓存数据:在实时数据源不可用时,使用缓存中的数据作为响应,或者返回一个简单的默认结果(如“服务器暂时无法访问”)来避免服务完全中断。
- 静态页面或备用方案:对于一些不影响用户基本功能的部分,可以展示静态页面或降级为简化版的服务,保证用户仍然能够访问到系统的部分功能。
通过熔断、限流和降级三种策略,系统可以有效地应对高并发、故障和流量激增等问题,提升系统的健壮性和用户体验。