
1) 【一句话结论】:服务熔断机制通过动态监控服务调用失败率,当故障扩散时暂时阻断调用以隔离故障,恢复后逐步验证并开放,核心是平衡系统可用性与稳定性,避免雪崩效应。
2) 【原理/概念讲解】:老师口吻,解释熔断的背景。分布式系统中,部分节点故障可能引发故障传播(雪崩效应),熔断机制类似电路保险丝,当服务调用失败率超过阈值(如50%)或调用次数超过阈值(如10次),熔断器从“关闭”状态切换到“打开”状态,暂时停止调用。状态分为三态:关闭(正常调用)、打开(故障时阻断)、半开(恢复时随机调用验证)。触发条件是失败率或调用次数超过阈值;恢复策略是半开状态,随机调用,成功则关闭,失败则打开。类比:电路保险丝,电流过大(失败率过高)时断开,防止整个电路过载。
3) 【对比与适用场景】:
| 机制 | 定义 | 触发条件 | 恢复策略 | 对业务影响 |
|---|---|---|---|---|
| 熔断 | 当服务调用失败率超过阈值时,暂时停止调用 | 失败率 > 阈值(如50%),或调用次数 > 阈值 | 半开状态,随机调用,成功则关闭,失败则打开 | 暂时阻断调用,避免故障扩散,可能延迟请求 |
| 限流 | 控制请求速率,防止系统过载 | 请求速率 > 阈值(如每秒1000次) | 按速率限制,如令牌桶 | 限制并发,保证系统稳定,可能拒绝部分请求 |
| 降级 | 在故障时提供降级服务 | 服务不可用或响应慢 | 暂时切换到降级服务(如简化功能) | 提供基本功能,但功能受限 |
4) 【示例】:
伪代码示例(模拟服务A调用服务B的熔断逻辑):
class CircuitBreaker:
def __init__(self, failure_threshold=50, call_limit=10):
self.failure_threshold = failure_threshold # 失败率阈值
self.call_limit = call_limit # 调用次数阈值
self.state = "CLOSED" # 状态:CLOSED, OPEN, HALF_OPEN
self.success_count = 0
self.failure_count = 0
self.total_calls = 0
def request(self):
if self.state == "OPEN":
return "fallback" # 降级结果(如默认数据)
if self.state == "HALF_OPEN":
# 随机调用(模拟恢复验证)
if random.random() < 0.5:
return self.call_service() # 调用实际服务
else:
return "fallback"
else:
return self.call_service()
def call_service(self):
# 模拟调用服务B(60%成功,40%失败)
if random.random() < 0.6:
self.success_count += 1
self.total_calls += 1
return "success"
else:
self.failure_count += 1
self.total_calls += 1
return "failure"
def check_and_update(self):
if self.state == "OPEN":
# 检查是否达到恢复时间(假设1分钟)
if time.time() - self.last_open_time > 60:
self.state = "HALF_OPEN"
self.success_count = 0
self.failure_count = 0
self.total_calls = 0
elif self.state == "HALF_OPEN":
result = self.request()
if result == "success":
self.state = "CLOSED"
self.success_count = 0
self.failure_count = 0
self.total_calls = 0
else:
self.state = "OPEN"
self.success_count = 0
self.failure_count = 0
self.total_calls = 0
elif self.state == "CLOSED":
if (self.failure_count / self.total_calls) * 100 > self.failure_threshold:
self.state = "OPEN"
self.success_count = 0
self.failure_count = 0
self.total_calls = 0
5) 【面试口播版答案】:
面试官您好,针对上交所分布式系统的高可用需求,服务熔断机制的核心是通过监控服务调用失败率,当故障扩散时暂时阻断调用,避免雪崩效应。具体来说,触发条件是当服务调用失败率超过阈值(比如50%)或调用次数超过阈值(比如10次),熔断器会从“关闭”状态切换到“打开”状态。此时,后续请求会直接返回降级结果或错误,避免对故障服务持续压测。恢复策略采用“半开”状态,每隔一段时间(比如1分钟)随机允许少量请求通过,如果这些请求成功,则关闭熔断器,恢复正常调用;如果失败,则重新打开。对业务的影响是,熔断机制能快速隔离故障,保护后端系统,但可能暂时导致用户请求延迟或降级,不过这是为了系统整体稳定性的必要牺牲。总结来说,熔断机制通过动态调整调用策略,平衡系统可用性与稳定性,是应对部分节点故障的关键设计。
6) 【追问清单】:
7) 【常见坑/雷区】: