如果有人告诉你,45 分钟就能搞垮一家大公司,你可能会觉得有点荒谬。但工程师 Doug Seven 却真的亲历过这样的事情。
8 年前,因为一次失败的部署,Knight Capital Group 在仅仅 45 分钟内就造成了 4.6 亿美元的亏损。
这是一个真实的故事。
尽管 Doug Seven 并不是事件的参与者,但他在后来的会议中不断提及 DevOps、代码配置和持续交付的主题,希望让开发人员意识到部署的重要性。
究竟是怎么回事?Doug Seven 在博客中分享了这个故事。
故事背景
这个故事的主角是一家名为 Knight Capital Group 的美国全球金融服务公司,它从事做市、电子执行、机构销售和交易。
2012 年,Knight 是美国最大的股票交易商,在纽约证交所和纳斯达克的市场份额约为 17%。Knight 电子交易集团(ETG)平均每日交易量超过 33 亿笔,每日交易额超过 210 亿美元。
种种数据表明,当时公司的运营和财务状况非常优秀。
2012 年 7 月 31 日,Knight 拥有约 3.65 亿美元的资产。
当时,纽约证交所正计划于 2012 年 8 月 1 日推出一项新的零售流动性计划。
为了准备这次活动,Knight 更新了他们的路由器 SMARS。这个路由器负责将订单发送到市场上执行。SMARS 的核心功能之一是接收 Knight 交易平台其他组件的订单(父订单),然后发送一个或多个子订单执行。换言之,SMARS 将从交易平台收到大量订单,并将它们分成多个较小的订单,以便找到股票数量相匹配的买家或者卖家。父订单越大,生成的子订单越多。
在 SMARS 中,有一段老旧的代码,名为「Power Peg」,它已经 8 年没被用到过了,而此次更新的目的正是要换掉这段代码。更新的代码重新调整了用于激活 Power Peg 功能的旧标志的功能。
代码经过了彻底的测试,并且还进行了一系列的验证。所有的一切都看起来很完美,找不到出错的理由。
死灰复燃的旧代码
2012 年 7 月 27 日至 2012 年 7 月 31 日期间,Knight 的开发人员每天手动将新的软件部署到公司的 8 台服务器上。这就是 SEC 文件中关于手动部署过程的内容。如果 SEC 文件中有关于部署的内容,那么就可能出现了严重的错误。
然而,在新代码的部署过程中,Knight 的一名技术人员忘记将新代码复制到所有 8 台 SMARS 计算机服务器中——他漏掉了其中一台服务器。
没有第二个技术人员来审查这个部署。
Knight 的所有人都没有意识到,Power Peg 代码并没有从第 8 个服务器上删除,也没有添加新的 RLP 代码。Knight 没有书面流程要求这样的审查。
2012 年 8 月 1 日,在美国东部时间上午 9:30,市场开盘。Knight 开始代表客户处理订单。