一行代码如何造成 6000 万美元的损失

Engineer's Codex 讲述了现实世界软件工程的实践课程和故事。

1990 年 1 月 15 日,AT&T 新泽西运营中心检测到广泛的系统故障,网络显示屏上出现大量红色警告。

尽管尝试纠正这种情况,但网络在 9 个小时内仍然受到损害,导致呼叫连接失败率达到 50%。

AT&T 输了 6000万美元 结果是 超过 60,000 名美国人的手机完全断开

此外, 500个航班延误,影响85,000人。

AT&T 的长途网络被认为是效率的典范,通过其先进的电子交换机和信号系统处理了全国大部分的电话。 该系统通常在几秒钟内完成呼叫路由。

然而就在这一天,源自纽约一台交换机的故障在网络中蔓延。 这是由于最近更新中的软件错误造成的,其中包含影响网络 114 台交换机的严重错误。 当纽约交换机自行重置并发出信号时,这个错误引起了多米诺骨牌效应,导致大范围的网络中断。

这个软件补丁已经经过层层测试,没有被发现。 这一事件尤其令人惊讶,因为 AT&T 以其严格的测试而闻名。

要成为一名出色的软件工程师,您需要了解很多。 但你如何知道你不知道的事情呢?

瑞典测验 包含 500 多个问题的资源,可揭示您在软件领域知识方面的差距,例如 数据库, 缓存, 和 联网。 其中许多问题都是经过验证的概念,在 Meta、Apple、Airbnb、Google 等公司的采访中都被提出过。

SWE 测验还有 结构化路线图 用于学习重要的软件概念。

终身访问 SWE 测验

根本原因可追溯到网络交换机上实施的软件更新中的编码错误。

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 首次全球中断的情况。

对于企业来说,停电的规模是巨大的,每次停电都可以吸取教训。 然而,对于大多数人来说,中断归结于人为错误和流程缺陷。

谷歌SRE

GitLab 的 SRE 角色

站点可靠性工程资源

资料来源:

https://users.csc.calpoly.edu/~jdalbey/SWE/Papers/att_collapse

https://telephoneworld.org/landline-telephone-history/the-crash-of-the-att-network-in-1990/

https://www.mit.edu/hacker/part1.html

https://prezi.com/qxeu8iayvwpu/1990-att-long-distance-network-crash/

Leave a Reply

Your email address will not be published. Required fields are marked *

近期新闻​

编辑精选​