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调用中添加了新信息来区分重试和新请求,这样可以更容易识别仪表板中的循环问题。
好文章,需要你的鼓励
Helios Towers供应链总监Dawn McCarroll在采访中分享了公司的数字化转型经验。作为一家在非洲和中东地区运营近15000个移动通信塔站的公司,Helios正通过SAP S/4Hana系统升级、AI技术应用和精益六西格玛方法论来优化供应链管理。McCarroll特别强调了公司Impact 2030战略中的数字包容性目标,计划在未来五年内培训60%的合作伙伴员工掌握精益六西格玛原则,并利用大数据和AI技术实现端到端的供应链集成。
德国弗劳恩霍夫研究院提出ViTNT-FIQA人脸质量评估新方法,无需训练即可评估图像质量。该方法基于Vision Transformer层间特征稳定性原理,通过测量图像块在相邻层级间的变化幅度判断质量。在八个国际数据集上的实验显示其性能可媲美现有最先进方法,且计算效率更高,为人脸识别系统提供了即插即用的质量控制解决方案,有望广泛应用于安防监控和身份认证等领域。
威胁行为者在npm注册表上传8个恶意包,伪装成n8n工作流自动化平台的集成组件来窃取开发者OAuth凭据。其中一个名为"n8n-nodes-hfgjf-irtuinvcm-lasdqewriit"的包模仿Google Ads集成,诱导用户在看似合法的表单中关联广告账户,然后将凭据传输到攻击者控制的服务器。这种攻击利用了工作流自动化平台作为集中凭据库的特点,能够获取多个服务的OAuth令牌和API密钥。
布朗大学联合图宾根大学的研究团队通过系统实验发现,AI医疗助手的角色设定会产生显著的情境依赖效应:医疗专业角色在急诊场景下表现卓越,准确率提升20%,但在普通医疗咨询中反而表现更差。研究揭示了AI角色扮演的"双刃剑"特性,强调需要根据具体应用场景精心设计AI身份,而非简单假设"更专业等于更安全",为AI医疗系统的安全部署提供了重要指导。