在分布式系统中,调用会失败。带退避的重试从暂时性错误中恢复;电路断路器防止您继续调用一个真正宕机的依赖。它们是互补的:对于短暂故障进行重试,在中断时断路。
指数退避重试 + jitter
对于暂时性故障(超时、短暂网络中断、503s),进行重试——但,以便重试分散开来,而不是同步成惊群。
attempt 1 → wait ~1s (+ random jitter)
attempt 2 → wait ~2s (+ random jitter)
attempt 3 → wait ~4s (+ random jitter)
→ cap at maxRetries (e.g. 3) and a max delay → don't retry forever
关键注意事项:
电路断路器跟踪对依赖的故障,达到阈值后,跳闸打开——快速失败(或返回降级方案)而不是调用已死的服务。冷却后进入半开状态以探测恢复。
CLOSED → calls pass through; count failures
too many failures → trip → OPEN
OPEN → fail fast immediately (no call); start cooldown timer
cooldown elapsed → HALF-OPEN
HALF-OPEN → allow a few probe calls
success → CLOSED (recovered) ; failure → back to OPEN
Retry → transient, likely-to-succeed-soon errors (1 slow call)
Circuit breaker → repeated/sustained failures (the dependency is down)
→ use together: breaker prevents retries from piling onto a dead service
没有这些机制,一个故障的依赖会将调用方一起拖垮:请求在超时时堆积,重试放大负载,故障级联到多个服务。带 jitter 的指数退避可以从短暂故障恢复而不产生重试风暴;限制和幂等性保证重试的安全性;电路断路器停止向已死的依赖浪费资源并给它恢复的机会。它们共同将依赖故障转变为一个隔离的、自愈的事件。
一个包含详细解答的 IT 面试题库——从初级到高级。
捐赠