本文来自微信公众号: 阿朱说 ,作者:吕建伟
(1)几千人群体事件
我刚毕业就从头到尾参与了全新一代整个体系的产品研发,刚刚研发完就被派到灯塔项目去做现场研发。
我们采用的技术也是当时最前沿的技术,所以技术本身也有缺陷,经常会出现服务器线程并发阻塞、或者服务器内存溢出。
我们正好选择了新年新气象:元旦上线。
正好元旦放起假,很多患者被假期积累,又赶上当天早上下雨夹雪,又赶上客户正在盖新大楼到处都是泥泞、又赶上客户还是在大上坡,当年没有那么多汽车和电动车,患者要么冒雨夹雪骑自行车来、要么冒雨夹雪坐公交车来了再走一段路。因为雨夹雪,所以所有人都躲在门诊大厅,非常拥挤、空气也污浊。
大家都心急着赶快挂号看病。但是很不幸,我们的服务器中间件阻塞了,因为客户是当地最大的医院,一上午足够有2000患者需要处理。医院所有的高层都出来解释、协调。但是患者们等得心焦,有人把挂号处收费处的玻璃都打碎了、把窗口的钢筋护栏都掰弯了,派出所都派出了所有干警进行秩序维护。
院长让我们去门诊大楼一线现场看看怎么解决。那个被阻塞的模块的负责同事就是不去现场,说:问题出在服务器端,去了现场客户端也看不出问题,而且平时很难捕捉这个问题,现在遇到了,他需要在服务器端调试线程和内存。
按道理来说确实是这样。但是现在需要处理的已经不仅仅是IT的事了。因为我负责的模块没有出问题,我就去了现场,让同事继续留在IT室继续跟踪问题。
我在现场一边安抚客户、一边安抚挂号员收费员、一边给患者道歉。然后给我同事打电话,现在不要跟踪了,重启服务器再说。
重启后,问题消失了,又能开始正常工作了。慢慢整个门诊大楼又恢复了秩序。
当天,此事件上了省报。
后来,那个技术问题,我回到公司花了几个月,和基础软件厂商一起协作跟踪分析,问题级别从大中华升级到亚太又升级到全球,最终厂商总部研发给出反馈:这是他们基础软件的问题,需要下个版本解决。
(2)一条人命
我讲的第二件事,也是去实施另一家灯塔项目,这家客户也是当地最大的医院。
有一天是周六下午,突然计算机科长找到我们,让我们赶快看看哪里有问题。
我赶到现场,弄明白情况:是一个患者前天做的手术,病情出现反复,需要紧急进行二次手术,但是患者的账户上显示没钱欠费,需要充钱才能开手术单、下各种药和手术材料,但是因为欠费所以系统锁定不让下单。
患者家属心里着急似火,大吼:我前天才续的费,不可能花光,肯定有钱。但是医院工作人员给患者看,确实欠费。一帮人要赶快做手术,一帮人不让进,两帮人就在手术室门口打了起来。院长和副院长都紧急赶到医院,院长说:钱的事先放一边、先赶快做手术,其他事情做完手术再补。
此事差点出了人命。我们在后台查数据、查代码、核对原始单据,才发现,不知哪个狗屎护士,把一种单价上百元的药,本来只需要一支,她给输入了100支,导致钱立马被耗干。
因为电脑上制单员都有记录,我们赶快把那个护士电话叫到现场,问她怎么下100支。她说可能当时一直低头熟练录入,没留意录多了。
计算机科长说:这样,咱们加个需求,对于百元以上项目,都维护好一个扩展标志:是否需要二次确认。一个单据中如有需二次确认的项目,就红色标识、弹窗提醒、蜂鸣、二次确认才能通过。
这件事让我深刻感受到:我所做的事,是和人命息息相关的。
(3)几十万块钱
我讲的第三件事,也是灯塔项目实施。经历了前面两件事我已经游刃有余了,况且这家医院规模都没有前两个客户规模大,所以更自信。这就不免得意忘形。
有一天,快下班了,我就想乘下班前同步一下数据,好晚上进行自动任务计算。
我卡卡卡敲了一段代码,敲完就点运行。我坐在服务器旁边的电脑上看着数据在一点点同步。
但是越看越不对劲,我突然意识到,我写的代码前面还有一段代码我没有注释,那段代码也运行了。也就是说:我本质做了数据迁移,而不是数据复制同步。
但是正常业务还在处理啊,还没有到下班点,还有患者在开单-收费,我却把数据迁移走了,他们就查不到数据了。
我当时脑子突然嗡的一下,真的嗡的一下,头脑一片空白。几秒钟后我反应过来,我赶快停止代码运行。赶快去看代码,天呐,我还没写事务,也就是说事情不可撤销回滚。我然后赶快看数据,发现有些数据已经迁移过去,还有些数据由于运行中断,处于残缺状态了。我冷汗一下子下来了,这可都是收费单数据啊,这丢的不是数据,这丢的都是真钱啊。我当时真的感到头大了。这可是一天几十万块钱啊。
冷静几秒,我赶快把服务器网线拔掉,然后打电话给收费窗口,暂停处理。然后给计算机主任打电话说服务器数据出了点问题。她问我问题严重不,我说不严重,我能今天搞定,但是今天不能再处理业务了。她说没问题,反正也快到下班点了,没多少患者了。
于是,我住在计算机室,一晚上把数据恢复回原来的钩稽关联关系。
从此我写代码,都习惯默认先打两个注释符号:意味着这段代码默认就不能运行。
