指针没用好,一行代码让公司损失 6000 万美元
1990 年 1 月 15 日,AT&T 的新泽西运营中心检测到大范围的系统故障,网络显示屏上出现了大量红色警告。
尽管试图排除故障,但网络故障仍持续了 9 个小时,导致呼叫连接故障率达到 50%。
AT&T 因此损失了 6000 多万美元,6 万多名美国人的电话完全无法接通。
此外,500 个航班延误,8.5 万人受到影响。
按理说,AT&T 的长途网络是高效率的典范,它利用先进的电子交换机和信号系统处理了全国大部分的电话。该系统通常能在几秒钟内完成电话路由选择。
然而,就在这一天,从纽约的一个交换机开始,整个网络出现了故障。这是由于最近一次更新中的一个软件错误造成的,该错误影响了网络中的 114 个交换机。当纽约的交换机复位并发出信号时,这个错误引发了多米诺骨牌效应,导致大范围的网络中断。
有趣的是,这个软件并没有经过测试。由于代码改动较小,因此按照管理层的要求绕过了测试。
问题所在
追根溯源,原因在于网络交换机实施的软件更新中出现了编码错误。
该错误发生在一个 C 语言程序中,涉及嵌套条件语句中一个错位的中断语句,导致数据覆盖和系统重置。
伪代码
1 while (ring receive buffer not empty and side buffer not empty): 2 Initialize pointer to first message in side buffer or ring receive buffer 3 get copy of buffer 4 switch (message): 5 case (incoming_message): 6 if (sending switch is out of service): 7 if (ring write buffer is empty): 8 send "in service" to status map 9 else: 10 break // The error was here! END IF 11 process incoming message, set up pointers to optional parameters 12 break END SWITCH 13 do optional parameter work
问题分析
- 如果环写入缓冲区不是空的,那么第 7 行的 `if` 语句就会被跳过,取而代之的是第 10 行的中断语句。
- 然而,为了使程序正常运行,本应执行第 11 行。
- 当中断语句被执行,而不是处理传入的信息并为可选参数设置指针时,数据(本应保留的指针)就会被覆盖
- 纠错软件识别出数据被覆盖,并启动关闭开关进行重置。由于网络中的所有交换机都使用了这种有缺陷的软件,导致了连锁重置反应,最终瘫痪了整个网络系统,使问题变得更加复杂。
尽管进行了严格的测试,网络的设计也非常灵活,但一行代码还是导致了半个国家的主要通信线路瘫痪。
修复
工程师们花了 9 个小时才使 AT&T 的系统完全恢复正常。他们主要是通过将交换机回滚到之前的代码工作版本来实现的。
实际上,软件工程师花了两周时间进行严格的代码阅读、测试和复制,才真正弄清了错误所在。
结论
对于 AT&T 来说,不幸的是,这还不是他们 90 年代最大的系统崩溃。在这十年的后期,他们还遇到了更多的问题。
今天的公司拥有更好的流程,但即便如此,还是会有漏洞漏网。谷歌撰写了一篇关于网站可靠性工程 20 年的精彩回顾文章,其中对 2016 年 YouTube 的首次全球故障进行了反思。
对于公司来说,故障的规模是巨大的,每次故障都会给我们带来教训。然而,对于大多数公司来说,故障归根结底是人为错误和流程漏洞造成的。
原文:https://engineercodex.substack.com/p/how-one-line-of-code-caused-a-60
转自:https://www.jdon.com/69737.htm

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
游戏党福音!MakerFrame SIG 跨平台游戏引擎上线
近日,经openKylin社区技术委员会审议通过,鹰歌框架引擎技术小组—MakerFrame SIG正式成立。 MakerFrame SIG由社区爱好者刘帅发起成立,负责为openKylin社区开发简单高效的游戏框架引擎,致力于让专业人士和非专业人士都来开发跨平台的游戏和应用,大力促进openKylin社区游戏生态推广。 01SIG目标 MakerFrame(鹰歌框架引擎)作为默认组件集成至openKylin社区版本中,让社区爱好者基于游戏引擎快捷的开发各种游戏,拓展社区游戏生态。 02SIG职责 MakerFrame游戏框架的开发维护和各平台适配; 负责解答使用和开发过程中的技术问题。 03SIG现阶段成果 1、完成框架引擎的各平台适配。 目前,MakerFrame游戏框架已在openKylin社区开源,项目地址如下: https://gitee.com/openkylin/maker-frame 2、完成《侠道仙缘》游戏的开发和各平台适配。 目前,MakerFrame框架引擎和《侠道仙缘》游戏已上架至openKylin软件商店,感兴趣的小伙伴赶快下载体验吧~ 04欢迎加入SIG...
- 下一篇
李开复旗下 AI 公司“零一万物”开源的 Yi 大模型照搬 Llama 架构
“零一万物”是创新工场董事长兼 CEO 李开复于今年创办的 AI 大模型创业公司。上周该公司宣布推出Yi-34B 和Yi-6B 两个开源大模型。 在公开的报道中,该公司称 Yi 系列大模型拥有全球大模型中最长的上下文窗口。其中 Yi-34B 在 Hugging Face 英文测试榜单中位列第一,在 C-Eval 中文能力排行榜中超越所有开源模型。 不过在Yi-34B 的 Hugging Face 主页上,有人指出 Yi 完全使用了 Llama 的架构——前者只是对后者的两个张量(Tensor)名称进行了修改,具体为 input_layernorm 和 post_attention_layernorm。 Llama 全称为 "Large Language Model Meta AI",是 Meta 创建的大语言模型。今年 7 月,Meta 发布了 Llama 2,宣布完全开源,并可免费商用。 来源:https://huggingface.co/01-ai/Yi-34B/discussions/11 AI 领域知名专家贾扬清昨晚也在个人朋友圈点评了此事——不过并没有指名道姓: 贾扬清是开源...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS关闭SELinux安全模块
- CentOS8安装Docker,最新的服务器搭配容器使用
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- Hadoop3单机部署,实现最简伪集群
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- Linux系统CentOS6、CentOS7手动修改IP地址
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Windows10,CentOS7,CentOS8安装Nodejs环境
- 设置Eclipse缩进为4个空格,增强代码规范