极客视点
极客时间编辑部
极客时间编辑部
113243 人已学习
免费领取
课程目录
已完结/共 3766 讲
2020年09月 (90讲)
时长 05:33
2020年08月 (93讲)
2020年07月 (93讲)
时长 05:51
2020年06月 (90讲)
2020年05月 (93讲)
2020年04月 (90讲)
2020年03月 (92讲)
时长 04:14
2020年02月 (87讲)
2020年01月 (91讲)
时长 00:00
2019年12月 (93讲)
2019年11月 (89讲)
2019年10月 (92讲)
2019年09月 (90讲)
时长 00:00
2019年08月 (91讲)
2019年07月 (92讲)
时长 03:45
2019年06月 (90讲)
2019年05月 (99讲)
2019年04月 (114讲)
2019年03月 (122讲)
2019年02月 (102讲)
2019年01月 (104讲)
2018年12月 (98讲)
2018年11月 (105讲)
时长 01:23
2018年10月 (123讲)
时长 02:06
2018年09月 (119讲)
2018年08月 (123讲)
2018年07月 (124讲)
2018年06月 (119讲)
时长 02:11
2018年05月 (124讲)
时长 03:16
2018年04月 (120讲)
2018年03月 (124讲)
2018年02月 (112讲)
2018年01月 (124讲)
时长 02:30
时长 02:34
2017年12月 (124讲)
时长 03:09
2017年11月 (120讲)
2017年10月 (86讲)
时长 03:18
时长 03:31
时长 04:25
极客视点
15
15
1.0x
00:00/05:28
登录|注册

一次失败的部署在45分钟内搞垮了一家公司

讲述:初明明大小:5.00M时长:05:28
软件发布应该是一个可重复的、可靠的过程,而且要尽可能实现自动化。日前,道格七号(Doug Seven)以骑士资本集团破产的案例说明了完全自动化和可重复的部署对于 DevOps 和持续交付来说是多么的重要。

故事背景

纽约证券交易所计划 2012 年 8 月 1 日推出新的零售流动性计划,为此,美国最大的股票交易商骑士资本集团(Knight Capital Group)升级了他们的自动化高速算法路由器 SMARS。SMARS 的一个核心功能是接收来自骑士交易平台其他组件的订单 ,即“父”订单,然后将大订单分成一个或多个“子”订单,并发送到交易中心,以便找到与股票交易量匹配的买家 / 卖家。
对 SMARS 的更新是为了替换已经 8 年没被使用的“Power Peg”的老旧代码,更新后的代码使用了一个旧标志,可用来激活 Power Peg 功能。代码经过全面测试后证明能够可靠地运行。
一切好像都没什么问题,黑天鹅事件却在不经意间来临了,并最终在 45 分钟内击垮了这家公司。

究竟哪里出了问题?

在 2012 年 7 月 27 日至 2012 年 7 月 31 日期间,骑士每天会手动将新版本部署到八台服务器上。据美国证券交易委员会第 70694 号文件显示,“然而,在部署新代码期间,骑士的一名技术人员没有将新代码复制到所有的 SMARS 计算机服务器上,而是漏掉了其中的一台。没有其他技术人员负责评审这个部署过程,也没有人知道 Power Peg 代码并没有从第八台服务器上删除,第八台服务器也没有部署新代码。骑士没有正式的书面程序要求进行这样的评审。”
2012 年 8 月 1 日美国东部时间上午 9 点 30 分,股市开盘,骑士开始代表客户处理新零售流动性计划订单。部署了新代码的七台 SMARS 服务器开始处理这些订单,但发送到第八台服务器的命令触发了使用旧代码的标志,激活了 Power Peg 功能。
这里有必要了解一下 Power Peg 代码的作用。在执行子订单时,它会根据父订单计算购买 / 出售的股票数量。一旦父订单执行完成,Power Peg 会指示系统停止路由子订单。也就是说,Power Peg 会跟踪子订单,并在父订单完成后停止发送它们。而早在 2005 年,骑士就从 Power Peg 中删除了计数跟踪功能。
当第八台服务器上的 Power Peg 功能被激活后,它开始路由子订单,但却没有根据父订单的情况跟踪股票数量。

地狱 45 分钟

想象一下,如果你有一个系统,它会向市场自动快速发送订单,但不跟踪是否已经执行了足够多的订单,会发生什么?
上午 9 点 30 分股市开盘,一分钟后,人们发现股市上充斥着一些非正常交易量的股票订单。在开盘后 45 分钟内,骑士的订单交易量占比超过 50%,将某些股价推高了 10%,而其他一些股价因错误交易而下跌。
更糟糕的是,骑士的系统在当天早上 8 点 01 分就开始自动发送电子邮件了,内容提到了 SMARS,其中有一个错误是“Power Peg 已禁用”。在上午 8 点 01 分至 9 点 30 分之间,有 97 封邮件被发送给骑士的员工。当然,这些邮件不算是系统告警,所以没有人去查看它们。
在开盘后的 45 分钟内,骑士尝试了几种应对措施,试图阻止错误的交易。但并没有什么必杀技可用,所以他们只能试着在每分钟处理 800 万股交易的实时交易环境中诊断问题。由于他们无法确定是什么原因导致了错误,所以计划将服务器上新部署的代码回滚。换句话说,他们移除了可以运行的代码,留下了坏代码。这导致更多的父订单在所有服务器上都激活了 Power Peg 功能。最终,在经过了 45 分钟的交易后,他们停止了系统。
在开盘后的 45 分钟内,Power Peg 代码收到并处理了 212 个父订单。SMARS 向交易市场发送了数以百万计的子订单,总共有 400 万笔交易,涉及总量 3.97 亿股。用外行的话说,骑士在 45 分钟内就亏损了 4.6 亿美元,但骑士只有 3.65 亿美元的现金和现金等价物。他们有 48 小时的时间来筹集弥补损失所需的资金,他们也的确从大约 6 个投资者那里获得了 4 亿美元的投资。但是,骑士最终被 Getco LLC 于 2012 年 12 月收购。

学到的教训

对于骑士的破产案例,所有的开发和运营团队都应该引以为戒。开发出好的软件,经过全面测试还远远不够,还需要确保它们被正确地交付给市场,让客户获得软件交付的价值。
部署应该是自动化且可重复的,并且尽可能避免潜在的人为错误。如果骑士的部署系统是自动化的,包括配置、部署和测试,那么这次事件就可以避免。
你还见过哪些因为研发、部署流程问题而引起重大故障的 IT 事件?可以在评论区说说。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结
该免费文章来自《极客视点》,如需阅读全部文章,
请先领取课程
免费领取
登录 后留言

全部留言(4)

  • 最新
  • 精选
  • 小斧
    部署应该是自动化且可重复的,并且尽可能避免潜在的人为错误。 如果骑士的部署系统是自动化的,包括配置、部署和测试,那么这次事件就可以避免。
    1
  • 风行万里,不问归期
    线上操作,尽量减少人工操作
  • Arvin
    论靠谱devops的重要性
  • 耿老的竹林
    线上操作,还需要慎重呀,充分验证,有备无患。
收起评论
大纲
固定大纲
故事背景
究竟哪里出了问题?
地狱 45 分钟
学到的教训
显示
设置
留言
4
收藏
34
沉浸
阅读
分享
手机端
快捷键
回顶部