三维封装技术创新发展
如果有人告诉你,45 分钟就能搞垮一家大公司,你可能会觉得有点荒谬。但工程师 Doug Seven 却真的亲历过这样的事情。
8 年前,因为一次失败的部署v U F,Knight Capital Grot a A k W Aup 在仅仅 45 分钟内就造成了 4.6 亿美元的亏损。
这是一个真实的故事。
尽管 Doug Seven 并不是事件的参与! 9 y O @ j # E R者,h 2 : X U y但他在后来的会议中不断提及 DevOps、代码配置和持续交付的主题,希望让开d v { o ~ % S发人员意识到部署的重要性。
究竟是怎么回事?Doug Seven 在博客中分享了这个故事。
故; L I Y {事背景
这个故事的主角是一家名为 Knight Capital Group 的美国全球金融服Y w - & 5 I ]务公司: a p : G r / z,它从事做8 G Y 4市、电子执行、k j 9 ? c w d y机构销售和交易。
2012 年,Knight 是美国最大的股票交易商,在纽约证交所和纳斯达E n + F { 0克的市场份额约为 17%。Knight 电子交易集团(ETG)平均每日交易量超过 33 亿笔,每日交易额超过 210 亿美元。
种种数据表明,当时公司的运营和财务状况非常优秀。
2012 年 7 月 31 p 6 B ` | - r 日,Knight 拥有约 3.65 亿美元的资产。
当时,纽约证交所正计划于 2012 年 8 月 1 日推出一项新的零售流动性计划。
为了准备这次活动,Knight 更新= f s p k [ # _ N了他们的路由器 SMARS。这个路由器负责将订单发送到市场上执行。SMARS 的核心功能之一s E n是接收 Knight 交易平台其他组件的订单(父订单),然后发送一个或多个子订单执行。换言之,SMARS 将从交易平台收到大量订单,并将它们分成多个较小o H 4 X O I的订单,以便找到股票数量相匹配的买x p H家或者卖家。父订单越大,生成的子订单越多。
在 SMARS 中,有一段老旧的代码,名为「Powef d k cr Peg」u h t g,它已经 8 年没被用到过了,而此次更新的目的正是要换掉这段代码。更新的代码重新调整了用于激活 Power Peg 功能的旧标志的功能。
代码经过了彻底的测试,并且还进3 X ^ ; 1 # + ^ 行了一系列的验证。所有的一切都看起来很完美,找不到出错的理由。
死灰复燃的旧代码
2012 年 7 月 27 日至 2012 年 7d N x T n _ M s 4 月 31 日期间,Knight 的开发人员每天手动将新的软件部署到公司的m J . P E { ~ * 8 台服务器上。这就是 SEC 文件中关于手动部署过程的内容。如果 SEC 文件中有关于部署的内容,那么就可能出现了严重的错误。
然而,S 0 T ~ | H Z 4 ~在新代码的部署过程中,Knight 的一名技术人员忘记将新代码复制到所有 8 台 SMARS 计算机服务器中——他漏掉了其中一台服务器。
没有第二个技术人员来审查这个部| w T A M 署。
Knight 的所有人都没有意识到,Power Peg 代码并没有从第 8 个服务器上删除,也没有添加新的 RLP 代码。Knight 没有书面流程要求这样的审查。
201x V k U 32 年 8 月 1 日,在美国东部时间上午 9:30,市场开盘。Knight 开始代表客户处理订单。
具有正B _ B x 7 | ? p 3确 SMARS 部署的 7 台服务器开始正确处理这些订单。然而,发送到第 8 台服务器的命令触发了可支持的重新利用标志,并从死地中恢复了旧的 Power Peg 代码。
杀手代码如僵尸般的攻击
Power Peg 代码用于在执C r = # v [行子订单时,根据父订单计算购买或者出售的股份。P- ; + s B k , =ower Peg 将指示系统在完成父订单5 b D ^ ( N t后停止传送子订单。
也就是说,Power Peg 会跟踪子订单,并在父订单完成后停止它们。
2005 年,Knight 将这种累s ` W 4 [ C计跟踪功能移到了代码执行的早期阶` ( x X # ` F @ %段,从而从 Power Peg 中删除了计数跟踪。
当激活第 8 台服务器上的 Power Peg 标志时,Pow* & ( O ( x ;er Peg 功能开始路由子订单以供执行。但由于没有根据父S M 3 O _ O E G订- [ 7 单跟踪共享量,造成了一个永无止境的循t D u环。
地狱 45 分钟
想象一下,如果你有一个系统,它能够向市场发送自动化的、高速的订单,且没有任何跟踪程序来检查是否执行了足够的订G l ^ D O A单,会发生什么?没有比这更糟糕的事了。
上午 9:30 开市时,人们很快就知道出了问题。到V / 3 f上午 9 点 31 分,华尔街的许多人都清楚发生了一些严重的事情。市场上Y # ! k | u充斥着非正常交易量的股票订单。
到上午 9 点 32 分,华尔街的人们都在想,为什么订单还没有停下来,为什么没有+ c W ( @ A E :人按下任何系统的关闭开关?结果他们发现,并没有关闭开关。在交易的前 45 分钟里,Knight 的交易量占了总交易量的 50% 以上,这使得某些股票的市值上涨了 10% 以上。因此,其他股票因错误的交易而贬值。
更糟糕的是,V M @ g pKnight 的系统在当天早些时候开始自动发送电子邮件。早在上午 8:01,SMAR 已经处理了符合上市前交易条件的订单。邮件消息引用 SMARq ^ x } ! 7 + +S,并将错误识别为「Power Peg disabled」。
在: J O ,上午 8:01 到 9:30 之间,Knight 工作人员也收到了 97 封邮件。可惜的是,这些电子邮件, P = * t f ; %不是R k J作为系统警报设计的,2 Z L %因此没有人立^ 7 V O _ B即查看它们。
在 Knight 经历的 45 分钟内,他们尝试了几种反制措施,试图阻止错误的交易。由于没有终止开关,所以他们只能在实Z . , g时交易环境中尝试诊断问题。
每分钟,系统上约有 800 万股股票被交易。他们无法确定是什么导致了错误的命令,所以他们从正确部署的服务器上卸载了新代码} : g I b U V。
换句话说,他们删除了工作代码,留下了损坏的代码。~ g x 9 G ` : ~可重复、可靠的过程。
尽可能地自动t d w } [ h R化。
via:https://dougseven.com/2014/04/17/knightmare-a-devops-cautionary-tale/
雷锋网雷锋网雷锋网