第 3 章 9月2日,星期二

第 3 章 9月2日,星期二

我跟着帕蒂和韦斯走过NOC,走进小隔间。我们在一个由6间小隔间组成的巨型工作区停下来。沿着墙面摆了一张大桌子,上面有一个键盘和四台LCD显示器,就像是华尔街的交易台。到处都是堆积如山的闪着信号灯的服务器,办公桌上堆满了更多的显示器,展示着图表、登录窗口、代码编辑器、Word文档,以及无数我不认识的应用程序。

布伦特在一个窗口中输入着什么,对周围的一切都置若罔闻。他的电话那端传来NOC电话会议的声音。他显然并不担心大音量的扬声电话会打扰邻座的人。

“你好,布伦特。你有空吗?”韦斯大声问道,把一只手搭在他的肩膀上。

“就不能等等吗?”布伦特头也不抬地回答,“现在我真的很忙。我正在处理SAN的事儿,你知道吧?”

韦斯抓过一把椅子:“是啊,我们就是来谈这件事的。”

布伦特转过身来,韦斯继续说:“再跟我说一遍昨晚的情况。为什么你断定是SAN升级导致了工资核算故障?”

布伦特转了转眼珠说:“昨晚大家都下班后,我帮一个SAN工程师升级固件。升级过程比我们预想的要长——所有进程都没有按照技术日志走。过程颇为惊险,不过我们终于在7点左右完成了。”

“我们重启了SAN,但随后所有自测功能都失灵了。我们花了将近十五分钟时间,试图查出哪里发生了故障。就在那时,我们收到了关于工资核算故障的电子邮件。当时我就说:‘完了。’”

“我们的版本太陈旧了。SAN供应商可能从来没有测试过像我们这样大跨度的升级路径。我给你打了电话,告诉你我想停止升级。你批准后,我们启动了回滚。”

“然后SAN就崩溃了,”他跌坐在椅子上,“不仅工资核算服务器坏了,很多别的服务器也坏了。”

“我们几年前就打算升级SAN固件了,但一直抽不出时间。”韦斯对我解释道,“有一次我们差一点就升级了,但当时没有足够大的维护窗口。性能每况愈下,直到很多关键应用程序开始受到影响。所以昨天晚上,我们终于决定硬着头皮进行升级。”

我点了点头,然后手机响了。

是安打来的,于是我接到扬声电话上。

“根据你的建议,我们检查了昨天从工资核算数据库里导出的数据。最近的那个支付周期是正常的。但在本次支付周期里,所有工厂小时工的社保卡号全乱了。而且他们的工作时间和工资字段全部都是零。以前从来没人见过这样的情况。”

“只有一个字段乱了?”我诧异地扬起眉毛问,“你说‘乱了’是什么意思?那个字段里有什么?”

她试图描述在屏幕上看到的内容:“嗯,它们不是数字或字母。有心型、黑桃,以及一些弯弯曲曲的字符……还有一堆标着变音符号的外文字符……而且没有空格。这个重要吗?”

听到安试图把这些乱码念出来,布伦特窃笑起来,我严厉地瞥了他一眼。“我想我们明白了,”我说,“这是一条非常重要的线索。你能把数据损坏的电子表格发给我吗?”

她同意了:“顺便问一句,现在是不是有很多数据库宕机了?有意思。昨晚它们还在工作。”

韦斯低声咕哝了几句,压住了布伦特的话头。

“呃,是的。我们已经发现了这个问题,正在着手解决。”我不动声色。

挂断电话,我松了一口气,感谢神灵保佑救火队员和故障维修人员。

“数据库里只有一个字段损坏了?得了吧,伙计们,听起来绝对不像是个SAN故障。”我说,“布伦特,除了SAN升级,昨天还发生过什么可能导致工资核算故障的事?”

布伦特无精打采地靠在椅子上,一边把椅子转来转去,一边思索着:“嗯,既然你提到这个……昨天有个开发计时应用程序的人打电话给我,提出一个关于数据库表结构的奇怪问题。我正忙着准备凤凰项目的测试虚拟机,所以很快答复了他,然后回过头来继续工作。你不会觉得是他弄坏了应用程序吧?”

韦斯迅速转向扬声电话,这部电话拨入一直在进行之中的NOC电话会议,他取消了电话静音:“大家好,我是韦斯。我和布伦特、帕蒂以及我们的新上司比尔·帕尔默在一起。史蒂夫·马斯特斯让他主管所有的IT运维部门。所以伙计们,都给我听好了。”

看来想要循规蹈矩地宣布我升职的消息已经越来越不可能了。

韦斯继续说:“有谁知道开发人员更改工厂计时应用程序的事吗?布伦特说他接过一个电话,有人问过他更改数据库表的事。”

一个响亮的声音从扬声电话里传来:“有的,我帮助过一个人,他和工厂之间的连接有点问题。我敢肯定他是个维护计时应用程序的开发人员。当时他正在安装一些安全应用程序,约翰要求在本周内安装并运行那些应用程序。我想他的名字是马克斯。我还留着他的联系方式,就在这里的某个地方……他当时说今天就要开始休假了,所以急着把这些工作做完。”

现在事情开始有些眉目了。

一个开发人员为了能去度假,塞进了一个紧急的变更——可能是我们的CISO(首席信息安全官)约翰·佩斯凯推进的某个紧急项目的一部分。

这样的情况只能进一步加深我对开发人员的猜疑:他们经常粗心大意地弄坏东西,然后消失不见,让运维部的人收拾烂摊子。

比一名开发人员更危险的就是开发人员和信息安全部门的人联手。这样的组合把给我们添乱的动机、手段和机会都弄齐全了。

我猜测,我们的CISO可能逼迫一个开发部经理一定要完成某项任务,下面的开发人员又在此基础上添油加醋,最终造成了工资核算故障。

信息安全部总是到处亮出他们的“尚方宝剑”,提出各种紧急要求,全然不顾这样做对其他部门造成的后果,因此我们有很多会议都不邀请他们参加。只要有他们在,事情肯定办不成。

他们总能提出无数条理由来证明我们做的任何事都会造成安全漏洞,黑客会利用这些漏洞洗劫整个公司,偷走所有的代码、知识产权、信用卡卡号甚至我们的私人照片。这些情况可能确实具有潜在风险,但很多时候,我很难从他们提出的那些不依不饶、歇斯底里、自以为是的要求中,找出与切实提高环境防御有什么关联。

“好吧,伙计们。”我果断地说,“工资核算故障好比是一个犯罪现场,我们就是警察总署。SAN不再是嫌疑犯了,但不幸的是,我们在侦查过程中意外把它弄残了。布伦特,你继续处理受伤的SAN,我们显然得让它启动并尽快运行。”

“韦斯和帕蒂,我们的新‘嫌犯’是马克斯和他的经理。”我说,“无论如何都要找到他们,扣押他们,弄清楚他们做了什么。我不管马克斯是不是在休假。我估计他可能把什么东西弄坏了,而我们得在下午3点之前把它修好。”

我想了一下:“我要去找约翰。有人想和我一起去吗?”

韦斯和帕蒂争着要和我一起去质问约翰。帕蒂强硬地说:“必须是我。几年来我一直试着管住约翰的人。他们从不按照我们的流程来,所以总是惹出麻烦。这次他又耍这种花招,我倒想看看史蒂夫和迪克会怎么样责罚他。”

这显然是个有说服力的观点,于是韦斯说:“好吧,他由你处置了。现在我几乎要同情他了。”

突然之间,我对自己的措辞感到后悔。这不是一次政治迫害,我并不想要惩罚谁。我们还是得把故障的来龙去脉梳理清楚。

武断地得出不恰当的结论导致了昨晚的SAN故障。在我眼皮底下,决不允许再犯这样的错误。

在帕蒂和我给约翰打电话的时候,我眯着眼睛看帕蒂手机屏幕上的电话号码,琢磨着是否该听从妻子的建议,去配一副眼镜了。这再一次提醒我,即将步入不惑之年了。

我拨出号码,电话一接通就传来一个声音:“我是约翰。”

我迅速地向他讲了工资核算和SAN故障的事,然后问:“昨天你们有没有对计时应用作过变更?”

他说:“听起来很糟糕,但我可以保证我们没有对你们的中型机系统作过改动。很抱歉我不能提供更多帮助。”

我叹了口气。我原本以为这会儿史蒂夫或者劳拉应该已经发布了我的晋升公告。看来我每次跟人打交道都得先介绍一下自己的新头衔。

我想,如果我自己先统发一个任职公告,工作起来会不会容易些。

我再一次简要复述了自己仓促晋升的事,然后问道:“韦斯、帕蒂和我听说,昨天你和马克斯一起部署了一些紧急的工作。是什么事?”

“卢克和达蒙走了?”约翰听上去很吃惊,“我没想到史蒂夫真的会在合规性审计调查期间同时解雇他们两个。不过谁知道呢?也许这儿终于要开始有些变化了。比尔,你可要从中吸取教训啊。你们运维部的人不能再在网络安全方面拖后腿了!我只是提些善意的忠告……”

“说到这个,我们几次三番被竞争对手踩在脚下,我觉得很蹊跷。”他继续说,“俗话说,巧事不过三。也许我方销售人员的电子邮件系统已经被黑客入侵了。那就能解释我们为什么弄丢了那么多单生意。”

约翰兀自滔滔不绝,然而我还在想着他话里的暗示:卢克和达蒙可能是由于某些关乎安全的事而被解雇的。这是有可能的——约翰一向同一些颇有权势的人打交道,比如史蒂夫、董事会以及内部和外部审计师。

然而,史蒂夫在谈到卢克和达蒙离职的原因时,既没有提到约翰,也没有提到信息安全部,我对此确定无疑——他只提到必须专注于凤凰项目。

我疑惑地看了看帕蒂。她只是翻了个白眼,摸了摸耳朵。显然,她认为约翰的想法很疯狂。

“史蒂夫有没有对你描述过公司的新组织架构?”我非常好奇地问。约翰总是抱怨,信息安全部的优先等级太低了。他正为获得与CIO同等的地位而展开游说,说是这样才能解决某种内在的利益冲突。据我所知,他尚未成功。

众所周知,卢克和达蒙尽可能地把约翰边缘化,不让他干涉那些干实事的人。不过尽管他们不遗余力,约翰还是设法出现在会场里。

“什么?我对此毫无头绪。”他忿忿不平地说,我的问题显然切中要害。“像往常一样,我一直被蒙在鼓里。依照惯例,我恐怕又是最后一个发现的。在你告诉我之前,我还以为自己仍然向卢克汇报呢。既然他走了,我不知道该向谁汇报了。史蒂夫给你打过电话吗?”

“这超出了我的权限,我和你一样一无所知。”我装聋作哑地回应,迅速改变了话题:“关于计时应用的改动,你能告诉我们什么吗?”

“我要给史蒂夫打电话,弄清楚发生了什么事。恐怕他已经不记得有信息安全部的存在了。”他继续说道。我怀疑我们到底还能不能说回到工资核算的事情上去。

让我感到宽慰的是,他终于说:“好吧,是的,你们刚才说到了马克斯。我们有一个关于PII存储的紧急审计问题——PII就是个人验证信息的简称,类似SSN——SSN也就是社保卡号的简称,还有出生年月之类的信息。欧盟法律禁止我们存储这类数据,现在美国的很多州也有这样的法律。这可是个重大审计发现。我很清楚,得指望我的团队来拯救公司,避免再次成为街头巷尾的议论对象。这要是出了事肯定会上新闻头条的,是吧?”

他继续说:“我们找到一个标记这些信息的产品,那样就不必再存储SSN了。根据原定计划,差不多一年之前就该完成部署,但尽管我不断催促,它一直都没能完成。现在我们没时间了。支付卡行业审计师,也就是PCI,本月晚些时候要来,所以我加快了计时应用团队的工作进度。”

我盯着手机,沉默不语。

一方面,我欣喜若狂,因为我们已经从约翰这儿找到了确凿的证据。约翰提到了SSN字段,这与安对受损数据的描述是吻合的。

另一方面,我慢慢地说:“看看我理解得对不对……你为了修补一个审计发现,部署了一个标记化应用,然后导致了让迪克和史蒂夫坐立不安的工资核算故障?”

约翰激动地回答:“首先,我完全有把握标记化安全产品不会引发这个故障。那是不可能的。供应商向我们保证产品是安全的,而且我们核对了所有的参考资料。其次,迪克和史蒂夫完全有理由坐立不安,遵守规定是必需的,那可是法律。我的工作是让他们不用穿上橙色连身衣,所以我做了自己应该做的事。”

“橙色连身衣?”

“就是在监狱里穿的囚服。”他说,“我的工作是让管理层遵守所有的相关法律、规章制度以及合同义务。卢克和达蒙太莽撞了。他们乱走捷径,严重影响了我们的审计和安全态势。要不是我,我们现在恐怕都已经在监狱里了。”

我想我们不过是在讨论一个工资核算故障,而不是讨论被某种假想的警力投进监狱里。

“约翰,对产品进行任何变更,我们都有一套规定的程序和流程。”帕蒂说,“你绕过它们,然后又一次惹出了大麻烦,我们还得帮你修补。你为什么不按照流程去做?”

“哈!问得好,帕蒂。”约翰哼了一声,“我确实是按照流程做的。知道你们的人怎么说吗?他们说下一个可能的部署窗口期要等4个月。嘿!审计师们可是下周就要来了!”

他坚决地说:“我们可不能被你们那套官僚程序捆住手脚。如果你站在我的立场,也会做同样的事。”

帕蒂脸红了。我平心静气地说:“按照迪克的说法,我们只有不到4个小时来恢复计时应用。既然已经知道有过一个影响SSN的变更,我想我们找到了问题的关键。”

我继续说:“帮助进行部署的马克斯今天休假。韦斯或布伦特会和你保持联系,了解关于这个标记化产品的更多情况。我知道你会尽可能帮助他们的。这很重要。”

约翰同意了,我向他客气了几句,然后说:“等一下,还有个问题。你们为什么认定这个产品没有引发故障?你们对这个变更进行过测试吗?”

电话那头出现了片刻沉寂,然后约翰回答:“没有,我们没办法对这个变更进行测试。因为没有测试环境。显然,你们几位在几年前就提出了预算申请,但是……”

我本该知道的。

“好吧,那是个好消息。”约翰挂断电话后,帕蒂说,“也许不太容易修复,但至少我们终于知道发生了什么事。”

“变更事项安排表里有约翰的标记化项目吗?”我问。

她冷笑一声:“那正是我一直想告诉你的。约翰很少遵循我们的变更流程,大多数人都是这样不守规矩。这儿简直就像是狂野西部,我们大部分时间都在鲁莽行事。”

她辩白道:“我们需要更完善的流程,并从高层获得更好的支持,包括IT流程的工具配备以及培训。每个人都以为只要把自己的工作干完就万事大吉,这让我很难开展工作。”

在我以前带的团队,变更操作一直是非常规范的。不会有人在未通知其他人的情况下开展变更,而且我们竭力确保所作的变更不会给其他人带来麻烦。

我还不习惯像现在这样头绪全无。

“我们没那么多闲工夫每出一次状况就详查一番。”我恼怒地说,“给我一份过去三天以来所有变更事项的清单。如果没有准确的时间节点,我们就没办法知道前因后果,而且最终可能会造成另一个服务中断。”

“好主意。”她点点头,“如果有必要,我会给IT部的每个人发电子邮件,弄清楚他们之前做过什么,从中找出未列入计划安排的事。”

“你说‘给每个人发电子邮件’是什么意思?就没有提交变更事项的系统吗?我们的报修系统或者变更授权系统呢?”我目瞪口呆地问。这就好比伦敦警察厅向所有在伦敦的人发电子邮件,来查出谁曾接近过犯罪现场。

“你就做梦吧。”她像看一个菜鸟那样看着我——某种程度上,我想自己的确是个菜鸟。“多年来,我一直试图让大家使用我们的变更管理流程和工具,但就像约翰那样,没人用它。我们的报修系统也一样,都是有一搭没一搭的。”

事情比我预想的要糟糕得多。

“好吧,该怎么做就怎么做吧。”我无法掩饰自己的沮丧之情,最终说道,“确保让所有的开发人员、系统管理员以及网络维护人员都去支持计时系统。给他们的经理打电话,告诉他们,让我们知晓每一个变更的情况非常重要,不论那些变更看起来多么无关紧要。也不要忘了告诉约翰的手下。”

帕蒂点了点头,我说:“你是变更管理经理。我们必须有所改进。我们需要更好地了解情况,那就意味着需要某种实用的变更管理流程,让每个人都提交自己的变更事项,以便我们完整地掌握真实情况。”

让我惊讶的是,帕蒂看上去垂头丧气。她说:“我已经试过这样做了。让我告诉你会发生什么事吧。变更咨询委员会,也就是CAB,会碰一两次头。用不了几个星期,大家就会说自己太忙,不再参加会议了。或者由于时间紧迫,他们不等得到授权就进行变更。不论是哪一种情况,变更咨询委员会都会在一个月内变得形同虚设。”

“这次不会。”我坚定地说,“向所有技术主管发一份会议通知,并且明确这次必须出席。不能参加会议的人要派一名代表。下次会议什么时候召开?”

“明天。”她说。

“好极了,”我由衷热切地说,“我很期待这次会议。”

午夜过后,我终于回到家。经过了漫长而充满失望的一天,我精疲力竭。地板上散落着气球,餐桌上放着半瓶酒。墙上贴着一张蜡笔画,上面写着:“恭喜爸爸!”

今天下午,我给妻子佩奇打电话,告诉了她我升职的事。她显得比我高兴多了,坚持要请邻居们过来,一起小小地庆祝一番。我这么晚才到家,错过了自己的派对。

下午2点,帕蒂成功证实,在过去三天内所进行的二十七项变更当中,只有约翰的标记化变更和SAN升级才有可能导致工资核算故障。然而,韦斯及其团队仍然没能恢复SAN运行。

下午3点,我不得不告诉安和迪克这个坏消息,我们别无选择,只能实施B方案。他们的沮丧和失望是显而易见的。

计时应用直到晚上7点才得以恢复。半夜11点,SAN终于恢复运行。

我作为IT运维部副总裁的第一天表现并不太好。

下班前,我给史蒂夫、迪克和安发送了一封快速状态报告,保证我将不惜一切代价防止此类故障再次发生。

我走上楼,刷完牙,在上床睡觉之前最后查看了一下手机,小心翼翼以免吵醒佩奇。我看到一封我们公司的公关经理发来的电子邮件,主题是“坏消息。我们明天可能要上新闻头条了……”,我在心里咒骂了一声。

我坐在床上,眯着眼睛阅读附上的新闻报道。

埃克哈特格鲁夫《先驱时报》

无极限零部件公司弄错工资,当地工会领导人表示错误“不合情理”

汽车零部件供应商无极限零部件公司未能妥善地向工人发放薪酬。公司内部备忘录显示,一些雇员根本没有收到工资。这家总部设在本地的公司承认,没有向一部分小时工发出正确金额的薪金,并且还有一部分小时工没有收到任何工作报酬。无极限零部件公司否认本次事件与现金流问题相关,而是把过错归咎于一个工资核算系统故障。

这家公司的业绩一度高达40亿美元,但最近几个季度收入减少、亏损增加。有人把这些财务困难归咎于高层管理人员的失败。由于这些财务困难,努力养家糊口的本地工人对工作不保的担忧正在日益蔓延。

备忘录显示,不论导致工资核算故障的原因是什么,雇员可能都必须等待数日乃至数周才能拿到报酬。

“这次事件只不过是这家公司近年来一连串管理层执行错误中最新的一个罢了。”内斯特·梅耶斯公司首席行业分析师凯利·劳伦斯这样说。

《先驱时报》致电无极限零部件公司CFO迪克·兰德里,请其就工资核算事故、会计差错以及管理能力发表意见,但他没有回电。

在一份以无极限零部件公司名义发布的声明中,兰德里对这一“小故障”表示遗憾,并发誓不会再发生这样的错误。

《先驱时报》将随着事态的发展继续更新报道。

我筋疲力尽,熄了灯,心里记下明天要去找迪克当面道歉。我闭上眼睛想要入睡。

一小时后,我仍然异常清醒地盯着天花板。

目录

  • 版权声明
  • 译者序
  • 人物表
  • 即时公告
  • 第一部分
  • 第 1 章 9月2日,星期二
  • 第 2 章 9月2日,星期二
  • 第 3 章 9月2日,星期二
  • 第 4 章 9月3日,星期三
  • 第 5 章 9月4日,星期四
  • 第 6 章 9月5日,星期五
  • 第 7 章 9月5日,星期五
  • 第 8 章 9月8日,星期一
  • 第 9 章 9月9日,星期二
  • 第 10 章 9月11日,星期四
  • 第 11 章 9月11日,星期四
  • 第 12 章 9月12日,星期五
  • 第 13 章 9月15日,星期一
  • 第 14 章 9月16日,星期二
  • 第 15 章 9月17日,星期三
  • 第 16 章 9月18日,星期四
  • 第二部分
  • 第 17 章 9月22日,星期一
  • 第 18 章 9月23日,星期二
  • 第 19 章 9月23日,星期二
  • 第 20 章 9月26日,星期五
  • 第 21 章 9月26日,星期五
  • 第 22 章 9月29日,星期一
  • 第 23 章 10月7日,星期二
  • 第 24 章 10月11日,星期六
  • 第 25 章 10月14日,星期二
  • 第 26 章 10月17日,星期五
  • 第 27 章 10月21日,星期二
  • 第 28 章 10月27日,星期一
  • 第 29 章 11月3日,星期一
  • 第三部分
  • 第 30 章 11月3日,星期一
  • 第 31 章 11月3日,星期一
  • 第 32 章 11月10日,星期一
  • 第 33 章 11月11日,星期二
  • 第 34 章 11月28日,星期五
  • 第 35 章 1月9日,星期五
  • 后记
  • 致谢
  • 第四部分 三步工作法
  • 序言
  • 啊哈!
  • 导言:展望DevOps新世界
  • 第一部分 DevOps介绍
  • 第 1 章 敏捷、持续交付和三步法
  • 第 2 章 第一步:流动原则
  • 第 3 章 第二步:反馈原则
  • 第 4 章 第三步:持续学习与实验原则
  • 中文版附录:凤凰项目沙盘