Cloudflare承认了一个编程错误,该错误涉及React useEffect钩子的使用不当,导致其平台仪表板和多个API出现超过一小时的服务中断。
这次故障发生在9月12日,持续了一个多小时。据工程副总裁Tom Lianza介绍,故障由仪表板中的一个错误触发,该错误导致"对租户服务API的重复、不必要调用"。这个API是API请求授权逻辑的一部分,因此影响了其他API的正常运行。
问题的排查过程相当困难,因为表面上看起来是API可用性问题,掩盖了实际上是仪表板过载API的事实。
Lianza表示,核心问题出在React useEffect钩子中,其"依赖数组中包含一个有问题的对象"。useEffect钩子是一个包含多个参数的函数,包括返回清理函数的设置函数和可选的依赖项列表。每当依赖项发生变化时,设置函数就会运行。
在Cloudflare的这个案例中,该函数会调用租户服务API,而其中一个依赖项是一个"在每次状态或属性变化时都会重新创建"的对象。结果是,在仪表板的单次渲染过程中,该钩子反复运行,而原本设计只运行一次。函数运行频率过高,导致API过载,引发服务中断。
useEffect钩子功能强大但经常被过度使用。相关文档充满了关于误用和常见错误的警告,并鼓励在可能的情况下使用其他方法。useEffect的性能陷阱很常见。
这一事件在社区中引发了关于useEffect利弊的讨论。一位开发者在Reddit上表示,对useEffect的抱怨太多了,它是React的重要组成部分,"认为使用它是坏事的想法很愚蠢"。不过,另一种反应是"消息还没有被接收到。我认识的几乎每个人都继续无缘无故地到处放置大量useEffect"。
还有人评论道:"真正的问题是API因过量API调用而宕机...在一家拥有专门服务来防止DDoS(分布式拒绝服务)攻击的公司中。"
Lianza表示,租户服务没有分配足够的容量来"处理这样的负载峰值",现在已经为其分配了更多资源,并改进了监控。此外,从仪表板发出的API调用中添加了新信息,以区分重试和新请求,因为如果团队知道看到的是"大量新请求,就更容易将问题识别为仪表板中的循环"。
Q&A
Q1:什么是React useEffect钩子?为什么会导致问题?
A:React useEffect钩子是一个包含设置函数和依赖项列表的函数,每当依赖项变化时就会运行。在Cloudflare的案例中,依赖数组中的对象在每次状态变化时都被重新创建,导致钩子在单次渲染中反复运行,原本只应运行一次。
Q2:Cloudflare的这次故障具体是怎么发生的?
A:故障是由仪表板中的useEffect钩子错误引起的,该钩子对租户服务API进行了重复、不必要的调用。由于API调用频率过高,导致API过载,进而影响了其他依赖该API的服务,造成超过一小时的服务中断。
Q3:Cloudflare采取了哪些措施来防止类似问题再次发生?
A:Cloudflare为租户服务分配了更多资源以处理负载峰值,改进了监控系统,并在仪表板的API调用中添加了新信息来区分重试和新请求,这样可以更容易识别仪表板中的循环问题。
好文章,需要你的鼓励
AI颠覆预计将在2026年持续,推动企业适应不断演进的技术并扩大规模。国际奥委会、Moderna和Sportradar的领导者在纽约路透社峰会上分享了他们的AI策略。讨论焦点包括自建AI与购买第三方资源的选择,AI在内部流程优化和外部产品开发中的应用,以及小型模型在日常应用中的潜力。专家建议,企业应将AI建设融入企业文化,以创新而非成本节约为驱动力。
字节跳动等机构联合发布GAR技术,让AI能同时理解图像的全局和局部信息,实现对多个区域间复杂关系的准确分析。该技术通过RoI对齐特征重放方法,在保持全局视野的同时提取精确细节,在多项测试中表现出色,甚至在某些指标上超越了体积更大的模型,为AI视觉理解能力带来重要突破。
Spotify在新西兰测试推出AI提示播放列表功能,用户可通过文字描述需求让AI根据指令和听歌历史生成个性化播放列表。该功能允许用户设置定期刷新,相当于创建可控制算法的每周发现播放列表。这是Spotify赋予用户更多控制权努力的一部分,此前其AI DJ功能也增加了语音提示选项,反映了各平台让用户更好控制算法推荐的趋势。
Inclusion AI团队推出首个开源万亿参数思维模型Ring-1T,通过IcePop、C3PO++和ASystem三项核心技术突破,解决了超大规模强化学习训练的稳定性和效率难题。该模型在AIME-2025获得93.4分,IMO-2025达到银牌水平,CodeForces获得2088分,展现出卓越的数学推理和编程能力,为AI推理能力发展树立了新的里程碑。