人间的一切意外,都是上天的有意安排——霍桑。
不幸的是:我们无法预知这个安排会在哪一天出现,因此我们不去臆想,不去猜测,我们所能做的,首先是预防意外的出现,然后是一旦意外出现就尽快地消除意外......
正在下载更新软件的光通信模块被拔掉电源后“死机”了,而且“死”得很彻底——连重新开机都无法重启了!
怎么会这样呢?
这恐怕是当时所有在场的lunx工程师们心中的问题。
而琳达,自然是特别地沮丧,因为她是代理项目经理,现在在这么重要的ofc上,出了这样的问题,实在是出乎她的意料。
tom见状,转身问那位拔掉电源的at&t长着大胡子的人道:“电信机房也会断电?不是有ups么?!”
没错,电信机房都有ups电源(不间断电源),为的就是应对突然断电的情况。
tom的意思很明显,那就是:这不是一个问题,因为电信机房是不可能断电的。
那位来自at&t长着大胡子的人看了一眼tom,目光中似乎流露出些许不满,说道:“ifitshould......(如果万一断电了呢)”
“ok.thisisanewissue.(这是一个新的情况)”tom仿佛准备轻描淡写地把问题掩饰过去。
“no!thisisnotanewissue!thisisatelcomclassproduct!(这不是一个新情况,这是一个电信级的产品)”那位来自at&t长着大胡子的人摇摇头说道,显然不同意tom轻描淡写的说法,语气中充满着坚持。
来自at&t长着大胡子的人的话让tom感到前所未有的难堪,因为他无法反驳!
什么是电信级的产品?
在网络通信行业,产品是有等级的,最高的等级就是电信级,电信级的产品在安全和可靠上有着极高的要求。
举个例子:光通信系统的机箱把手必须是不锈钢的,而一般情况下机箱的把手都是铝制的,因为重量轻成本也低。
为什么必须是不锈钢的而不能是铝制的?
因为铝的燃点比较低,一旦发生大火,容易发生助燃。
也许大家会说,都发生火灾了,都烧到机箱了,还在乎这些?
没错,还在乎这些!
这就是电信级的产品——必须做到极端的安全可靠!
tom自己也是从at&t出来的,对此自然是知道的,而且,客户就是皇帝,既然客户都这么说了,还有什么可争辩的?
你可以坚持说电信机房内有ups,在下载更新软件的短短一分钟时间内,突然断电了,而且ups也出故障不工作了,这样的概率实在太小了!
但是,电信运营商不会认同,他们也不会和你争辩这概率到底是1%还是0.1%,但他们不会考虑选购你的产品!
因此tom知道他遇到了一个困局,现在他已经无路可退,要赢得at&t的合同,唯有打破这个困局。
于是tom转向了lunx的工程师们——他们的任务就是来为这次ofc保驾护航的:“canwesolvethisproblem?(我们能解决这个问题吗)”
这次,tom没有再说“issue(情况)”而是用了“problem(问题)这个词”。
因为客户说是问题就是问题!
没有人说话,因为没有人知道为什么会“死机”,就好比一个医生给病人看病,还没有查出病人究竟得的是什么病,病人就问医生:这病能治好吗?这让医生如何回答?
tom见冷场了,这可不是他想看到的,因为这意味着给at&t做的演示失败了,更重要的是:在这样的情况下,at&t铁定不会考虑lunx的cwdm光通信系统的!
“howaboutyou?(你的看法呢)”tom看着大家都沉默着不说话,就把目光落在了我的身上,问道。
早在那位长着大胡子的at&t人拔掉电源,导致正在下载更新软件的光通信模块死机那一刻起,我就已经知道这一定是来自断电时产生的干扰导致的结果。
因为我想起了十五年前,我在国内承包时,接了一个石门矿山的项目,每当计算机软件控制打开一个大功率的继电器时,当时的040微处理器主机板就会莫名其妙地死机,后来查明是因为大功率的继电器在闭合时在电源中产生了一个强大的干扰脉冲,导致了040微处理器主机板的死机。
而在座的lunx软件和硬件工程师们,虽然他们都是各自领域内的精英,但由于都没有这种强干扰情况下的实时应用项目的研发经验,因此自然会感到丈二和尚摸不着头脑了!
不过我没有吭声,因为在这种情况下做“出头鸟”是最愚蠢的,因为如果最终我无法解决问题,那么同事们会认为我是想表现自己,而老板也会认为我是好大喜功。
而如果是老板主动先找我,我再应战,那就不同了,即使我失败,没有解决问题,那在同事们的眼中,也是为公司分忧,因为本来谁都没有把握一定能解决问题,而在老板眼里,我是敢于承担责任。
于是,我见tom主动找我了,就我看了一眼tom,然后转向那两位来自at&t的人,用一种诚恳而又充满信心的语气说道:“明天给你们答案!”
这次轮到那两位来自at&t的人吃惊了,他们本以为事情已经接近尾声,因为出现了一个意外的问题,而这个问题甚至不在我们原来的设计之内,那么,根据他们这么多年和通信设备供应商打交道的经验,要解决这样的问题就必须修改设计,这需要至少几个周甚至几个月的时间。
但现在居然有人站出来说明天给他们答案!
因为虽然我只是说给他们答案,没有说会解决问题,但对于一个未知的问题来说,如果答案找到了,那就离解决问题也就不远了。
“ok.let‘ssee.(好,让我们拭目以待)”其中那位拔掉电源的长着大胡子的at&t人看着我,半信半疑地说道。
“what‘syourname?(你叫什么名字)”这时,另一位戴眼镜的at&t人问起了我的名字。
在美国,一般美国人在遇到一个不认识的人时,不会轻易去问对方名字,而是只会介绍自己。如果是主动问你名字,那就只有两种情况:一种是对你非常不满;还有一种就是对你起了敬意,想结识你。
现在这位at&t人主动问我的名字,显然是后者。
“x.”我简短地答道,然后伸出手去,和对方,包括还有那位长着大胡子的at&t人各握了一下手,打招呼道:“nicetomeetyou(很高兴认识你)”
在对方主动问你的名字后,你主动和对方握手并问候对方,这是一种礼貌,这,我早在十几年前国内承包时就已经学会了。
......
第一天的ofc展会就在这样一个令人沮丧的气氛下结束了,回到宾馆,第一件事就是复制今天展会上遇到的问题,因为对软件产品的问题来说,只有能够复制的问题才能被解决,否则你既无从着手,也无从检查问题是否已经被解决了。
经过反复下载更新软件然后中途切断电源,最终发现大约每几十次的断电操作中就会有一次会变成“死机”,换句话说,今天展会上遇到的问题确实存在,而且确实与切断电源有关!
问题被复制出来了,但原因却不知道。
整体系统软件的结构是这样的:
一共分成两部分:
第一部分是启动程序,只负责光通信的启动和下载更新软件;
第二部分是光通信模块的控制和管理程序。
其中启动程序是固定不变的,出厂后是不允许更新的,更新的只是控制和管理程序。
下载更新软件时,下载下来的新程序被放在一个缓存中,等下载结束后,先校验下载下来的内容是否正确,如果不正确,则请求重新下载;如果正确,则再覆盖原来的程序进行更新,然后再次校验覆盖更新后的程序是否正确;如果正确,则重启光通信模块的软件系统。
这样的安排,从理论上讲,无论在下载的过程中发生什么问题,即使由于种种原因,导致下载更新失败了,也不会造成“死机”,但实际的情况是却出现了“死机”。
因此大家七嘴八舌地争论了起来,各种观点和推测都有,莫衷一是。
tom见大家你一言他一语,都快晚上8点了,但还是没有找到问题的症结所在,于是就大声建议道:“大家先去吃饭吧,顺便冷却一下,吃完饭回来再说。”
大家听tom这么说,就嘟嘟囔囔地一边说着自己的观点一边向外走去。
我没有跟随大家一起去吃饭,因为我嫌他们在的时候人多嘴杂,吵吵嚷嚷地让人听了心烦,他们走了,正合我的心意,因为这样我就可以冷静下来仔细考虑问题了。
我写了一个小程序,把“死机”后的光通信模块中的程序以ascii码的形式读出来,和正常的光通信模块中的程序进行比较。
我发现,“死机”的光通信模块中的程序都乱了,这可以理解,但令我惊奇的是居然启动程序也乱了!
在整个光通信模块的软件系统中,是没有任何指令会把下载的程序内容写到存放启动程序的内存空间去的,但现在却意外地乱了,而且每次“死机”都会发现启动程序乱了。
我恍如大悟!
我相信我找到问题的症结了!
不管发生什么事,都要冷静、沉着——狄更斯。
【下章看点】
x找到了“死机”的原因,但怎么解决呢?
如果不解决这个问题,虽然x可以交差了——他答应那两个at&t人第二天给他们答案,那么lunx的cwdm系统在ofc的首秀无疑就失败了!
因为去ofc参展也好,世界上第一款的cwdm系统的首秀也罢,都不是目的,目的是要把公司的产品向市场,而at&t肯定不会看上这样有问题的产品的。如果真是这样的话,那lunx希望通过在ofc上推出世界上首款cwdm系统来推动公司的下一轮融资和未来的纳斯达克上市的计划也就告吹了......
欲知详情,请见下一章分解。