138、API 调用可靠性工程:指数退避重试、熔断器、降级策略与超时控制

📅 2026/7/4 13:11:13
138、API 调用可靠性工程:指数退避重试、熔断器、降级策略与超时控制
138、API 调用可靠性工程:指数退避重试、熔断器、降级策略与超时控制一个让我凌晨三点还在查日志的教训去年做某个金融数据聚合服务时,我写了一段看起来“完美”的代码——调用第三方行情API,requests.get()套了个try-except,失败就重试三次,每次间隔1秒。上线第一天,凌晨两点报警:服务响应超时,CPU飙到95%。查日志发现,第三方API在凌晨做维护,返回503,我的重试逻辑像疯了一样把请求塞回去,三次不够?外层循环又补了五次。结果就是:我的服务把对方网关打得更死,对方网关开始限流我的IP,连锁反应导致所有依赖该API的功能全部雪崩。那天之后,我彻底重构了所有API调用逻辑。今天聊的这几个策略,每一个都是用线上事故换来的。指数退避重试:别做那个“越挫越勇”的傻瓜最简单的重试是固定间隔重试,比如失败后等1秒再试。但你想过没有:如果服务端正在过载,你固定间隔重试等于在人家伤口上撒盐。指数退避的核心思想是:第一次失败等1秒,第二次等2秒,第三次等4秒,以此类推。importtimeimportrandomfromfunctoolsimp