内容提要
GitHub因美国中部数据中心流量过高引发网络堵塞,叠加内部扩容机制缺陷和重试风暴,导致大规模长时间中断。Copilot因客户端异常重试,请求量暴增10倍,恢复最慢。GitHub将调整扩容和重试策略,并应对爬虫流量压力。
延伸解读
重试风暴为何会放大故障
文章指出,自动重试机制在正常情况下能提高请求成功率,但在高负载时反而会加剧故障。当身份验证请求超时,客户端和内部服务不断重试,导致负载均衡器流量激增,形成恶性循环。这提醒我们,在设计分布式系统时,重试策略需要谨慎设置,例如加入退避机制和限制重试次数,避免在故障期间引发雪崩效应。
扩容策略的盲区
GitHub的自动扩容主要基于应用自身指标,未充分考虑Sidecar的连接和并发状态,导致网络代理接近极限时未能及时扩容。这反映出基础设施监控和扩容决策需要更全面的视角,不仅关注应用层,还要关注网络层和依赖组件的健康状态,否则可能因局部瓶颈引发全局故障。
Copilot恢复慢的教训
GitHub Copilot恢复最慢,原因是客户端异常重试导致身份令牌请求量暴增10倍。这提示我们,客户端行为对服务端稳定性有重大影响。在开发客户端时,应实现合理的错误处理和重试策略,避免在服务端故障时加剧压力。同时,服务端也应考虑对异常流量进行限流或熔断,保护关键服务。
Q&A
GitHub本周大规模中断的直接原因是什么?
直接原因是美国中部数据中心流量极高引起网络堵塞,叠加内部扩容机制缺陷和重试风暴,导致关键服务路径严重堵塞。
GitHub的自动扩容机制存在什么问题?
自动扩容策略主要根据应用自身判断是否扩容,没有充分考虑Sidecar的连接和并发状态,导致网络代理接近处理极限时未能及时增加实例。
什么是重试风暴?它是如何加剧故障的?
重试风暴是指当请求超时或失败时,大量客户端和内部服务不断发起新请求,导致过载的负载均衡器收到更多流量,形成恶性循环,进一步加剧故障。
GitHub Copilot为什么恢复最慢?
因为适用于Visual Studio Code的GitHub Copilot存在异常重试问题,当身份验证令牌服务响应缓慢时,客户端持续请求新令牌,请求量暴增到正常水平的10倍,给身份验证基础设施造成巨大压力。
爬虫流量在这次事故中扮演了什么角色?
爬虫流量不是主因,但在恢复期间,Codeload代码下载服务遭遇多轮大规模自动化爬取流量,给基础设施造成更大压力,加大了故障恢复难度。
GitHub计划如何防止类似事故再次发生?
GitHub将调整自动扩容策略,并重新检查内部网关和客户端的自动重试策略,以避免故障后大量重试请求压垮后台服务。