When "no healthy upstream" isn't about the upstream you think
2 days ago
- 该事件涉及搜索后端因依赖缓慢而导致的间歇性故障,而非CPU限制。
- 错误的根本原因(CPU限制)最初看似合理,但与拓扑、时序和故障分布证据相矛盾。
- 实际原因是下游调用未设置超时与急切重试的组合,形成了反馈循环,导致工作线程池饱和。
- 利特尔法则解释了请求时间(W)的增加如何指数级提高并发数(L),从而压垮固定的工作线程池。
- 修复措施需要对下游调用设置显式超时、限制重试次数,并避免在连接超时时重试。
- 快速失败可保持实例响应性并防止级联故障;降级组件应独立失败。
- 验证包括负载测试,以确保修复在依赖正常和不正常的情况下均有效。
- 关键教训是将根本原因视为待验证的假设而非结论,让证据推翻优雅的理论。
- 无限制的下游调用和急切重试是潜在的停机风险,可能将小问题演变为全集群事件。
- 诊断应侧重于将预测与实际证据(拓扑、时序、分布)进行对比,而非依赖看似合理的故事。