熔断器模式
在分布式系统中,服务调用失败是不可避免的。熔断器模式(Circuit Breaker)是解决这一问题的关键技术。
什么是熔断器模式?
熔断器模式源自电气工程中的保险丝概念。当某个服务持续出现故障时,熔断器会跳闸,阻止进一步请求,等待服务恢复。
三种状态
- 关闭状态(Closed):正常,请求通过
- 打开状态(Open):熔断,快速失败
- 半开状态(Half-Open):探测,允许有限请求
为什么需要熔断器?
- 防止级联故障:避免资源耗尽
- 快速失败:改善用户体验
- 服务恢复:给故障服务修复时间
- 系统稳定:保护整个系统
代码实现
import time
class CircuitBreaker:
def __init__(self, failure_threshold=5, recovery_timeout=60):
self.failure_threshold = failure_threshold
self.recovery_timeout = recovery_timeout
self.failure_count = 0
self.last_failure_time = None
self.state = "CLOSED"
def call(self, func, *args, **kwargs):
if self.state == "OPEN":
if self._should_attempt_reset():
self.state = "HALF_OPEN"
else:
raise CircuitOpenError("Circuit is OPEN")
try:
result = func(*args, **kwargs)
self._on_success()
return result
except Exception as e:
self._on_failure()
raise
电商案例
- 支付服务:失败时返回pending
- 库存服务:快速响应不足
- 通知服务:失败不影响主流程
最佳实践
- 合理设置阈值
- 配置fallback降级方案
- 渐进式恢复
- 监控告警
- 详细日志
总结
熔断器模式是构建高可用系统的核心技术。
Top comments (0)