Redian新闻
>
指针没用好,一行代码让公司损失6000万美元

指针没用好,一行代码让公司损失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


往期推荐



周热点 | 2023.11.06-2023.11.13
为何在中国MySQL远比PostgreSQL流行
阿里云严重故障,钉钉、淘宝、闲鱼、阿里云盘都崩了



这里有最开源资讯、软件更新、技术干货等内容

点这里 ↓↓↓ 记得 关注✔ 标星⭐ 哦

微信扫码关注该文公众号作者

戳这里提交新闻线索和高质量文章给我们。
相关阅读
贾佳亚韩松团队新作:两行代码让大模型上下文窗口倍增 | GitHub热榜十行代码让日志存储降低80%【避坑】线程池没用好,直接出现了生产事故....礼来参投,一家「非GLP-1」减肥药公司吸金6000万美元,先导管线已进入2期临床拿DP想在新加坡工作,现在还是让公司申请同意书(LOC)吗?一场67万行代码的应用重构约270万行代码!我国自主研发,今日发布A醇没用好“烂脸”怎么办?糕妈的经验赶紧码住两行代码解决大模型对话局限,港中文贾佳亚团队联合 MIT 发布超长文本扩展技术2024除夕不放假!如何高情商开口让公司放人?年纪轻轻干啥不好!麻州华男假冒银行代表行骗,73岁老人损失7千5冰岛雷克雅未克(Reykjavík),地标景点艳遇彡字源考简单有效!Direct Inversion: 三行代码提升基于Diffusion的图像编辑效果不到 600 行代码实现了《愤怒的小鸟》翻版,GPT-4+DALL·E 3+Midjourney 撼动游戏圈!GPT-4惨遭削弱,偷懒摸鱼绝不多写一行代码,OpenAI已介入调查网友600行代码做出翻版“愤怒的小鸟”,却没有一行是自己写的!只改了五行代码接口吞吐量提升了 10 多倍奢华曲线立面,让公寓变地标的表皮不到1000行代码,PyTorch团队让Llama 7B提速10倍受让公募基金股权,这家券商遭监管质疑!最新回应美国总统拜登父子姓名考简单有效!Direct Inversion:三行代码提升基于扩散的图像编辑效果【健康】欧美人狂打减肥针没食欲,卖“垃圾食品”的公司都哭了!薯片滞销!硬核 JVM 压缩指针详解2行代码,「三体」一次读完!港中文贾佳亚团队联手MIT发布超长文本扩展技术,打破LLM遗忘魔咒社会分工---邪恶与错误的放大器Redis创始人开源最小聊天服务器,仅200行代码重大线上事故!三元表达式引发的空指针问题…欧美人狂打减肥针没食欲,卖“垃圾食品”的公司都哭了!薯片滞销!对话不穷:让公司里的超级个体有更多决策能力改了一行代码,数组遍历耗时从10.3秒降到了0.5秒!一行代码提高大模型10%性能,开发者:免费午餐两行代码解决大语言模型对话局限!港中文贾佳亚团队联合 MIT 发布超长文本扩展技术
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。