OpenAI史上最长宕机:自研K8s成“拦路虎”,导致数小时无法修复

C语言与CPP编程 2024-12-22 11:00

推荐关注↓


转自:InfoQ - 核子可乐、Tina

前段时间,OpenAI 旗下 AI 聊天机器人平台 ChatGPT、视频生成工具 Sora 及其面向开发人员的 API 自太平洋时间下午 3 点左右起发生严重中断。

OpenAI 最近宕机频繁。上个月,ChatGPT 突发故障,导致服务中断近半小时,超过 19,000 人受到影响。OpenAI CEO Sam Altman 随后在社交媒体 X 上公开致歉。他表示,公司在可靠性方面比以往有了很大的进步,但仍有许多工作要做。最后他还加了一句:“根据 Similarweb 的数据,它现在是全球第八大网站”。

没想到仅仅一个月时间后,又发生了全球性服务中断事件。社交媒体上充斥着对 ChatGPT 宕机的各种反应,从玩笑、嘲讽到幽默、恼怒,各种情绪应有尽有。有人夸张的说,全球学术界(留子教育版)倒退了 100 年。还有人调侃说应该试试“祖传”的电脑维修大法:“你试过关掉再打开吗?” 另一个用户则对付费服务无法正常运行感到不满,“我每月支付 20 美元,却遇上这种服务中断的情况,简直让人抓狂!”这场“狂欢”背后,也折射出人们对 AI 工具的依赖程度日益加深。

OpenAI 很快承认问题的存在并着手修复,但仍耗费约三个小时才顺利恢复所有服务。

在周五发布的一份事后报告中,OpenAI 写道,此番宕机并非源自安全事件或者近期产品发布,而是因周四部署的用于收集 Kubernetes 指标的监控服务所引发。Kubernetes 是一款开源程序,可帮助管理容器以及在隔离环境下运行软件的应用程序包与相关文件。

OpenAI 在事后报告中写道,“监控服务覆盖的范围非常广泛,因此这项新服务的配置无意间导致……资源密集的 Kubernetes API 操作。我们的 Kubernetes API 服务器不堪重负,导致我们的大多数规模 Kubernets 集群中的控制平面陷入瘫痪。”

OpenAI 提到,在客户感受到影响的“几分钟”内,公司就检测到了该问题;但由于必须绕过不堪重负的 Kubernetes 服务器,因此无法快速实施修复。

该公司写道,“这是多个系统和流程同时发生故障,并以意想不到的方式相互影响的结果。我们的测试未能捕捉到变更对于 Kubernetes 控制平面的影响,并且由于锁定效应,补救措施的实施非常缓慢。”

OpenAI 表示,该公司将采取多项措施防止未来发生类似事件,包括改进登台发布、更好地监控基础设施变化,以及采用新机制以确保 OpenAI 工程师在任何情况下都能访问公司的 Kubernetes API 服务器。

OpenAI 自研了基于 K8s 的管理软件

他们负责构建和维护一个复杂而高效的计算环境,以支持研究人员进行实验和开发。这个环境从上到下包括:研究代码、训练算法、各种工具、以及基于 TensorFlow 和 PyTorch 等框架的底层基础设施。

为了管理这些复杂的系统,团队使用了内部开发的框架(如 Rapid 和 Rcall)以及开源的框架(如 Ray、Kubeflow)。基础设施团队需要负责容器管理和集群调度,而主机和 OS 的编排则使用的是 Chef 和 Terraform。基础设施需要在多个平台上运行,从 Kubernetes 到 Azure 和 Google 服务器。这意味着我们需要控制平面管理集群,处理回调请求,以及调用一些外部服务如 Datadog 等工具。

从堆栈描述中我们可以看出,基础设施团队实际上帮助调试和管理了几乎所有内容,确保与研究相关的工作顺利进行。

Kubernetes 在过去几年中取得了显著进步,现在官方建议的最大集群规模是 5000 节点,然而,由于 Kubernetes 的扩展性能无法完全满足 OpenAI 的需求,基础设施团队于前几年开始开发了一款名为 Rapid 的框架。

Rapid 抽象了平台 API,并将虚拟机视为分布在大型机群中的类似 pod 的单一工作单元,有点像 Kubernetes pod。

在 Rapid 的配置中,每个实验都是独立准备和启动的,与其他实验完全隔离,避免共享数据存储来统一写入实验结果。这种高度隔离的设计非常契合研究人员对系统的使用需求,使他们的实验不会因资源竞争或服务中断而受影响,从而可以专注于自己的研究工作。

Rapid 框架同时也将大模型训练工作抽象成了三类:部署工作者(rollout workers)、优化器(optimizers) 和评估工作者(evaluation workers)。部署工作者负责运行模拟环境,采集观察数据,并将这些样本发送给优化器。优化器是训练模型的核心模块,根据接收到的数据进行参数优化,并生成模型输出。这些输出参数被反馈给部署工作者以完成训练循环,同时被发送给评估工作者,用于判断新版本模型是否优于旧版本。

得益于框架的抽象化设计,OpenAI 的基础设施团队在项目进行中能够轻松应对变化。例如,在项目中期,团队抓住机会,将实验从一个云服务提供商迁移到另一个平台,以便获取不同的硬件和不同的容量。为了应对 GPU 节点频繁维护对训练造成的影响,还需要通过提前检查主机状态,避免将实验部署到即将维护的节点上。

GPT-2 则使用了 OpenAI 研究人员开发的一套名为 Rcall 框架。这一框架同时支持 Kubernetes 和云服务后端,使研究人员能够在 OpenAI 不断扩展的 Kubernetes 集群中测试和调试任务,随后根据需要迁移到裸金属虚拟机或其他硬件环境。有点像中间派,但是比 Rapid 更轻量级的抽象,Rapid 主要处理整个 VM 大小。

2021 年,在训练 GPT-3 时,OpenAI 已经能管理 7500 个节点,并表示他们不太依赖 Kubernetes 的负载均衡,同时他们放弃 Flannel 组件转而使用 Azure VMSS 的本地 Pod 网络技术和相关 CNI 插件来配置 IP。此外,OpenAI 还使用 Prometheus 收集大量指标数据,并使用 Grafana 进行图形、仪表板和警报。

另外,随着研究实验的复杂性不断增加,快速定位问题一直是个大挑战。尤其是当实验失败时,研究人员往往需要花费大量时间去翻阅日志(在 DataDog 中)。为了提高问题排查效率,OpenAI 的基础设施团队不断的开发监控相关的软件,满足各种不同的查询要求,比如输入简单的查询,比如“为什么这个 pod 失败了”,研究人员就能快速得到详细的故障原因分析,例如“该 pod 所在的主机因维护事件被移除”。

而本周的这次故障,直接原因是他们又新部署了一套监控系统,导致 Kubernetes 控制面临的负担加重。随后,由于控制面的故障(依赖于 DNS 和 K8S),无法直接回滚此次发布,进一步放大了故障影响,导致长时间不可用。

此次,OpenAI 罕见地发布了一份完整的故障报告。我们翻译了原文:

OpenAI 故障复盘原文

此份事后分析报告,详细回顾了 2024 年 12 月 11 日发生的一起意外事故,OpenAI 旗下所有服务均经历长时间宕机。该问题源自新部署的遥测服务,此项服务无意间压垮了 Kubernetes 控制平面,导致关键系统发生连锁故障。在这篇文章中,我们将分析其根本原因,概述补救措施、分享后续防范方案以避免类似事件再次重演。

事件影响

2024 年 12 月 11 是太平洋标准时间下午 3:16 至晚 7:38 之间,所有 OpenAI 服务均经历了严重降级甚至完全不可用。此次事件源自在整个产品组合中推出新的遥测服务这一重大变更所引发,与安全事件或近期发布的新产品无关。所有产品均于下午 3:16 开始遭遇降级。

  • ChatGPT:下午 5:45 服务基本恢复,太平洋标准时间下午 7:01 完全恢复。

  • API:下午 5:36 服务基本恢复,太平洋标准时间下午 7:38 所有模型均已恢复。

  • Sora:太平洋标准时间下午 7:01 完全恢复。

根本原因

OpenAI 在全球运营有数百个 Kubernetes 集群。Kubernetes 拥有一个负责集群管理的控制平面,外加实际为模型推理等工作负载提供服务的数据平面。

作为提高组织整体可靠性的保障性举措的一部分,我们一直在努力改进自身集群范围内的可观察性工具,以增强我们系统状态的可见性。太平洋标准时间下午 3:12,我们部署了一项新的遥测服务用以收集 Kubernetes 控制平面的详细指标。

这些遥测服务的覆盖范围极广,因此新服务的配置无意中使得各个集群中的每个节点均须执行资源密集的 Kubernetes API 操作,其成本还会随集群规模而同步扩大。由于数千个节点同时执行这些操作,导致 Kubernetes API 服务器不堪重负,进而令大部分规模集群中的 Kubernetes 控制平面陷入瘫痪。这个问题在我们体量最大的集群中表现最为明显,但由于 DNS 缓存在该服务的大规模部署之前掩盖了问题,致使我们的测试未能及时发现。

Kubernetes 数据平面在很大程度上可以独立于控制平面运行,但 DNS 依赖于控制平面——具体来讲,各服务无法在缺少 Kubernetes 控制平面的情况下相互通信。

简言之,引发事故的根本原因就是新的遥测服务配置意外在大规模集群中产生了大量 Kubernetes API 负载,导致控制平面不堪重负并破坏了基于 DNS 的服务发现能力。

测试与部署

此番变更在登台集群内进行了测试,但没有观察到任何问题。只有规模超过一定水平的集群才会受到影响,而我们各个节点上的 DNS 缓存则大大延后了故障被观察到的时间,因此部署工作仍在如常推进。

部署之前,我们最关注的可靠性问题就是新遥测服务的资源消耗。在部署之前,我们评估了所有集群(CPU/ 内存)方面的资源利用率指标,以确保部署不会中断正在运行的服务。尽管资源请求会按集群进行调整,但我们没有采取任何预防措施来评估 Kubernetes API 服务器负载。另外,部署流程虽然会监控服务运行状况,但未充分配备集群运行状况监控协议。

Kubernetes 数据平台(负责处理用户请求)在设计上能够独立于控制平面运行,但 DNS 解析仍须借助 Kubernetes API 服务器——事实上,DNS 解析在我们的许多服务中均属于关键依赖项。

DNS 缓存能够提供过时但可正常运行的 DNS 记录,也正是这项功能缓解了性能影响。然而,随着缓存记录在接下来的 20 分钟内过期,服务实时 DNS 解析的服务开始出现故障。这个时间窗口至关重要,因为其延后了问题被发现的时间,导致我们在未了解问题全貌之前继续推进部署。当 DNS 缓存为空之后,DNS 服务器上的负载开始成倍增加,这进一步增加了控制平面的负载,也大大增加了即时缓解工作的实施难度。

补救措施

监控部署并恢复引发问题的变更一般非常简单,我们有专门的工具以检测并回滚错误部署。在此次事件中,我们的检测工具成功发挥作用,在客户受到实际影响前的几分钟就检测到了问题。但要想解决问题,我们需要删除引发问题的服务,而这要求我们访问 Kubernetes 控制平面——但随着 Kubernetes API 服务器负载的增加,访问操作根本无法进行。

我们在几分钟内就确定了问题,并立即启动了多个工作流,以探索快速恢复集群的不同方法:

  1. 缩小集群规模:降低总 Kubernetes API 负载。

  2. 阻止对 Kubernetes 管理员 API 的网络访问:阻止新的高资源成本请求,让 API 服务器有时间恢复正常。

  3. 扩展 Kubernetes API 服务器:增加可用资源以消化待处理请求,借此为修复操作留出空间。

通过同时推进这三项工作,我们最终夺回了控制权,得以删除存在问题的服务。

在重新获得对部分 Kubernetes 控制平面的访问权限之后,恢复工作立即步入了正轨。

在可能的情况下,我们尝试将流量转移至健康集群,同时对其他 集群进行修复。由于大量服务尝试同时下载资源,资源限制开始饱和并需要额外的手动干预,且部分集群仍处于性能降级状态。

可以看到,此次事件属于多个系统及流程同时发生故障并以意外方式相互影响的结果。具体来讲——

  • 我们的测试未能捕捉到变更对于 Kubernetes 控制平面的影响。

  • DNS 缓存的存在,延长了执行变更及服务开始发生故障之间的间隔。

  • 由于锁定效应,补救措施推进缓慢。

时间线
  • 2024 年 12 月 10 日:新的遥测服务被部署至登台集群,并在验证流程中符合预期。

  • 2024 年 12 月 11 日下午 2:23:引入新服务的变更被纳入部署管线并开始执行。

  • 下午 2:51 至 3:20:变更被应用于所有集群。

  • 下午 3:13:发出警报,通知工程师。

  • 下午 3:16:开始对客户产生轻微影响。

  • 下午 3:16:确定根本原因。

  • 下午 3:27:工程师开始将流量从受影响的集群中移出。

  • 下午 3:40:对客户的影响达到峰值。

  • 下午 4:36:首个集群成功恢复。

  • 下午 7:38:所有集群均已恢复。

预防措施

为了防止后续再次发生类似事件,我们正着手实施以下举措:

 1. 稳健的登台发布机制

我们将继续改进登台发布机制,更好地监控所有基础设施的变化,以确保任何故障均不会造成太大影响且可被及早发现。今后一切与基础设施相关的配置变更,都将遵循稳健的登台发布流程;同时持续监控机制也将得到改进,确保服务工作负载和集群(包括 Kubernetes 控制平面)始终健康。

 2. 故障注入测试

Kubernetes 数据平面应可在控制平面中断的情况下运行更长时间,我们也将明确针对这类情况运行测试。我们还将在测试中涵盖恶意变更状况,确保我们的系统能够检测到问题并适时回滚。

 3. 应急 Kubernetes 控制平面访问

当数据平面对控制平面施加过大压力时,我们应当确保仍可正常访问 API 服务器。为此我们将实施应急机制,以保证工程师在任何情况下均可访问 Kubernetes API 服务器。

 4. 对 Kubernetes 数据平面与控制平面进行解耦

我们负责服务发现的 Kubernetes DNS 中的依赖项,导致 Kubernetes 数据平面与控制平面之间建立了链接。我们正投入资源将 Kubernetes 数据平面与控制平面相互解耦,借此保证控制平面无需承担处理关键任务服务及产品工作负载等责任。

 5. 加快恢复速度

我们将为集群启动所必需的资源提供经过改进的缓存及动态速率限制器,同时定期组织演习以保证快速、正确启动目标,实现对整体集群的快速替换。


总结


对于此次事件对全体客户造成的影响,我们深表歉意——包括各位 ChatGPT 用户、开发人员乃至依赖 OpenAI 产品的企业。我们未能履行自己的预期与承诺。我们意识到为大家提供高可靠性服务的重要意义,并将着力推动上述预防措施,希望继续提高可靠性。感谢您在此次中断期间的耐心等待。

参考链接

https://techcrunch.com/2024/12/13/openai-blames-its-massive-chatgpt-outage-on-a-new-telemetry-service/

https://www.infoq.cn/article/g9tuotodp20n1ltzjsjw

https://www.datadoghq.com/videos/scaling-ai-infra/

https://status.openai.com/incidents/ctrsv3lwd797

EOF

你好,我是飞宇。日常分享C/C++、计算机学习经验、工作体会,欢迎点击此处查看我以前的学习笔记&经验&分享的资源。

我组建了一些社群一起交流,群里有大牛也有小白,如果你有意可以一起进群交流。

欢迎你添加我的微信,我拉你进技术交流群。此外,我也会经常在微信上分享一些计算机学习经验以及工作体验,还有一些内推机会

加个微信,打开另一扇窗

经常遇到有读者后台私信想要一些编程学习资源,这里分享 1T 的编程电子书、C/C++开发手册、Github上182K+的架构路线图、LeetCode算法刷题笔记等精品学习资料,点击下方公众号会回复"编程"即可免费领取~

感谢你的分享,点赞,在看三  

C语言与CPP编程 C语言/C++开发,C语言/C++基础知识,C语言/C++学习路线,C语言/C++进阶,数据结构;算法;python;计算机基础等
评论
  • Supernode与艾迈斯欧司朗携手,通过Belago红外LED实现精准扫地机器人避障;得益于Belago出色的红外补光功能,使扫地机器人能够大大提升其识别物体的能力,实现精准避障;Belago点阵照明器采用迷你封装,兼容标准无铅回流工艺,适用于各种3D传感平台,包括移动设备、物联网设备和机器人。全球领先的光学解决方案供应商艾迈斯欧司朗(瑞士证券交易所股票代码:AMS)近日宣布,与国内领先的多行业三维视觉方案提供商超节点创新科技(Supernode)双方联合推出采用艾迈斯欧司朗先进Belago红
    艾迈斯欧司朗 2024-12-20 18:55 70浏览
  • 汽车行业的变革正愈演愈烈,由交通工具到“第三生活空间”。业内逐渐凝聚共识:汽车的下半场在于智能化。而智能化的核心在于集成先进的传感器,以实现高等级的智能驾驶乃至自动驾驶,以及更个性、舒适、交互体验更优的智能座舱。毕马威中国《聚焦电动化下半场 智能座舱白皮书》数据指出,2026年中国智能座舱市场规模将达到2127亿元,5年复合增长率超过17%。2022年到2026年,智能座舱渗透率将从59%上升至82%。近日,在SENSOR CHINA与琻捷电子联合举办的“汽车传感系列交流会-智能传感专场”上,艾
    艾迈斯欧司朗 2024-12-20 19:45 78浏览
  • 耳机虽看似一个简单的设备,但不仅只是听音乐功能,它已经成为日常生活和专业领域中不可或缺的一部分。从个人娱乐到专业录音,再到公共和私人通讯,耳机的使用无处不在。使用高质量的耳机不仅可以提供优良的声音体验,还能在长时间使用中保护使用者听力健康。耳机产品的质量,除了验证产品是否符合法规标准,也能透过全面性的测试和认证过程,确保耳机在各方面:从音质到耐用性,再到用户舒适度,都能达到或超越行业标准。这不仅保护了消费者的投资,也提升了该公司在整个行业的产品质量和信誉!客户面临到的各种困难一家耳机制造商想要透
    百佳泰测试实验室 2024-12-20 10:37 149浏览
  • 国产数字隔离器已成为现代电子产品中的关键部件,以增强的性能和可靠性取代了传统的光耦合器。这些隔离器广泛应用于医疗设备、汽车电子、工业自动化和其他需要强大信号隔离的领域。准确测试这些设备是确保其质量和性能的基本步骤。如何测试数字隔离器测试数字隔离器需要精度和正确的工具集来评估其在各种条件下的功能和性能。以下设备对于这项任务至关重要:示波器:用于可视化信号波形并测量时序特性,如传播延迟、上升时间和下降时间。允许验证输入输出信号的完整性。频谱分析仪:测量电磁干扰(EMI)和其他频域特性。有助于识别信号
    克里雅半导体科技 2024-12-20 16:35 59浏览
  • 光耦合器,也称为光隔离器,是用于电气隔离和信号传输的多功能组件。其应用之一是测量电路中的电压。本文介绍了如何利用光耦合器进行电压测量,阐明了其操作和实际用途。使用光耦合器进行电压测量的工作原理使用光耦合器进行电压测量依赖于其在通过光传输信号的同时隔离输入和输出电路的能力。该过程包括:连接到电压源光耦合器连接在电压源上。输入电压施加到光耦合器的LED,LED发出的光与施加的电压成比例。光电二极管响应LED发出的光由输出侧的光电二极管或光电晶体管检测。随着LED亮度的变化,光电二极管的电阻相应减小,
    腾恩科技-彭工 2024-12-20 16:31 59浏览
  • 随着工业自动化和智能化的发展,电机控制系统正向更高精度、更快响应和更高稳定性的方向发展。高速光耦作为一种电气隔离与信号传输的核心器件,在现代电机控制中扮演着至关重要的角色。本文将详细介绍高速光耦在电机控制中的应用优势及其在实际工控系统中的重要性。高速光耦的基本原理及优势高速光耦是一种光电耦合器件,通过光信号传递电信号,实现输入输出端的电气隔离。这种隔离可以有效保护电路免受高压、电流浪涌等干扰。相比传统的光耦,高速光耦具备更快的响应速度,通常可以达到几百纳秒到几微秒级别的传输延迟。电气隔离:高速光
    晶台光耦 2024-12-20 10:18 139浏览
  • //```c #include "..\..\comm\AI8051U.h"  // 包含头文件,定义了硬件寄存器和常量 #include "stdio.h"              // 标准输入输出库 #include "intrins.h"         &n
    丙丁先生 2024-12-20 10:18 84浏览
  • 光耦固态继电器(SSR)作为现代电子控制系统中不可或缺的关键组件,正逐步取代传统机械继电器。通过利用光耦合技术,SSR不仅能够提供更高的可靠性,还能适应更加复杂和严苛的应用环境。在本文中,我们将深入探讨光耦固态继电器的工作原理、优势、挑战以及未来发展趋势。光耦固态继电器:如何工作并打破传统继电器的局限?光耦固态继电器通过光电隔离技术,实现输入信号与负载之间的电气隔离。其工作原理包括三个关键步骤:光激活:LED接收输入电流并发出与其成比例的光信号。光传输:光电传感器(如光电二极管或光电晶体管)接收
    腾恩科技-彭工 2024-12-20 16:30 46浏览
  • ALINX 正式发布 AMD Virtex UltraScale+ 系列 FPGA PCIe 3.0 综合开发平台 AXVU13P!这款搭载 AMD 16nm 工艺 XCVU13P 芯片的高性能开发验证平台,凭借卓越的计算能力和灵活的扩展性,专为应对复杂应用场景和高带宽需求而设计,助力技术开发者加速产品创新与部署。随着 5G、人工智能和高性能计算等领域的迅猛发展,各行业对计算能力、灵活性和高速数据传输的需求持续攀升。FPGA 凭借其高度可编程性和实时并行处理能力,已成为解决行业痛点的关
    ALINX 2024-12-20 17:44 73浏览
  • 百佳泰特为您整理2024年12月各大Logo的最新规格信息。——————————USB▶ 百佳泰获授权进行 USB Active Cable 认证。▶ 所有符合 USB PD 3.2 标准的产品都有资格获得USB-IF 认证——————————Bluetooth®▶ Remote UPF Testing针对所有低功耗音频(LE Audio)和网格(Mesh)规范的远程互操作性测试已开放,蓝牙会员可使用该测试,这是随时测试产品的又一绝佳途径。——————————PCI Express▶ 2025年
    百佳泰测试实验室 2024-12-20 10:33 114浏览
我要评论
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦