在这件事发生之前,我在公司个人信息上的签名一直是“加油干活,努力奋斗,快乐每一天”。
在这件事发生之后,我把签名改成了:
我真想揪着你的脖领子梆梆给你两拳。
这个悲惨的故事还要从两周前的一个项目说起。
1 半夜报警
老大交给我一个新项目,让我三天做完。
难度倒是不大,就是把一个proto中的几个字段给删掉,节省点内存。
我一共改了5行代码,改完之后心里美滋滋,哎,半天搞完,我可以摸两天鱼了。
到了第三天,我装作累了三天的样子,开始上线。
小流量,推全,观察线上日志没有问题,好了,又完成一个项目!
哪知道,眼前的顺利只是过眼云烟,真正的噩梦当然要到晚上才出现。
到了凌晨三点的时候,我在睡梦中,左拥右抱美女如云,但我不为所动,指着她们的鼻子让她们走,不要耽误我写代码。
其中一个美女说:“就你写那代码,三行能有五个bug,可拉倒吧。”
我正要反驳她,一阵刺耳的铃声响了。
我从梦中惊醒。
迷迷糊糊地拿起电话,接起来。
一个机器女声传来:“您的线上服务发生故障,目前有损,请尽快查看。”
坏了!
真他娘的出bug了!
我现在想想,梦里的那个美女长得也不像我的QA啊,怎么说话也这么准。
等等,现在哪还有功夫瞎想,赶紧起来看看报警。
我一个鲤鱼打挺没起来,再一个咸鱼翻身起来了。
赶紧披上睡衣,打开电脑,眯着眼睛看报警。
我下巴都要掉地上了。
100多台机器实例,全!都!挂!了!
2 喊醒四个部门的人陪我一起痛苦
这个时候,我反而淡定了。
人就是需要在危机出现的时候学会淡定。
当然,主要是这问题大了,我反正也一时半会解决不了,先冷静下吧。
我起身拿了瓶红牛,好兄弟,今晚靠你了。
很多人都以为线上的业务要在晚上流量少的时候上线,这样才不会影响线上业务。
实际上,这不一定。
我们的业务是给用户推送消息,半夜是没有消息要推送的,这个时候上线确实不影响,但是出bug了也看不出来。
所以我们上线必须要在晚上8点之前。
这就导致了,我现在想要紧急回滚代码都没权限。
哎,这里开始,新人同学们可以开始留神了,多年的处理报警经验,分享给你们。
我先赶紧打电话给我自己的老大,一是把事情报告给他,以他的经验来判断下一步要做什么,第二,稍后处理问题难免遇到权限不足的事情,先给他整醒再说。
第二个电话打给运维部门的人,让他们紧急帮我开通晚上回滚代码的权限,并且给我最快的回滚速度。
第三个电话打给我这个业务线下游的人,告知他们我们的业务现在挂了,让他们自行判断是否需要处理自己的业务。
第四个电话打给QA,当然,这事儿可以不给他打,我单纯是想找个人跟我一起悲惨的处理问题。
半个小时,线上的代码回滚了。
但这只是开始,我还不能去睡,现在去睡都对不起我喝的那两瓶红牛。
我开始看日志,排查报警出现的原因。
我就改了五行代码,这都能出这么大的问题?
看了一个小时日志,报错发生的地方和我这次改动没有任何关系。
这咋回事?
到这里,已经是凌晨四点了,我看线上业务恢复正常,先回去睡了,不然明早一定是起不来了。
睡前我双手合十祈祷,不要让我梦到那个嫌弃我代码的美女了,最好梦到个秃头程序员大佬,点醒我出问题的地方。
3 邪了门了!到底哪里出的问题?
第二天,我带着硕大的黑眼圈来公司。
我包里揣了三瓶红牛。
我就不信这个邪了,到底哪里出的问题?
我捞出来报错的日志,一行一行的看,一句代码一句代码的看。
确认出错的代码我没有任何改动,真奇怪。
看了一上午,我愣是没发现哪里有问题。
中午吃饭,我还在想这个事情,真是邪了门儿了。
这个代码本来是我前同事负责的,他两个月前跑路了,最近这活才到我手里,从他上次上线到现在有5个月了,也没出问题,怎么今儿个就出问题了呢?
等等,5个月前上线?
他,是不是。。。
我去代码库看了一眼提交记录,又去看了一眼上线记录。
我。。。
我血压瞬间冲上来了。
他,用自己的分支上线代码后,没有把更改同步到主干分支。
导致我一直是在更旧的代码上做的改动。
而他自己早就离职了,没有任何人知道这个事情。
此时此刻,我就是不知道他的号码。
不然我一定温柔的打给他, 约他过来吃个饭叙叙旧。
等他过来后,我揪着他的脖领子,梆梆给他两拳!
4 看来两拳还不够
有了这个教训,我心里犯嘀咕了,这哥们负责的可不止一个产品,是不是其他的也有类似问题。
我一个一个排查,果然,不止这一个,还有另外一个代码库,他提交了五次代码都没合入。
说真的,百度作为成熟的大公司,有完备的开发流程和上线流程。
按照规范,只要把代码库做一下简单的配置,就能限制上线未合入的代码,但问题就是这哥们儿图方便,把这配置直接关了。
就导致,本来能够避免的问题,非得人为发现不可。
其实我能理解他的脑回路,因为这个项目其实就他一个人负责,也就是说没有其他人参与。
他甚至可以不遵守分布式开发的规范,想怎么改怎么改,哪怕是写了代码直接上线不提交,理论上都是可以的,更别说合入代码了。
他是方便了。
我快疯掉了。
这件事,让我错过了一个美梦,让我花费了五瓶红牛,让我因为熬夜又掉了几根珍贵的头发。
那个被我半夜喊起来的QA,第二天还讹了我顿肯德基。
想到这,我的拳头又攥紧了。
5 你不是一个人在战斗
很多同学在学校独立开发惯了,什么github啥的也就当个存储空间来用,对团队开发完全没有概念。
这就是造成问题的关键,你得知道一件事,你在修改的代码,会影响很多人,你在修改的代码,别人可能也在修改。
遵守规范,不仅能够帮助别人,更能体现你的专业,关键是,能不让你的冤种同事半夜还要处理因为你造成的bug。
代码写得好不仅仅是技术高超,你的流程是否规范,你的代码是否能让别人看懂,你的注释是不是都加了,你的文档是不是足够清晰,这都是团队开发更需要的能力。
在公司对一个人的最高评价其实不是“他技术真牛X”,而是“这人贼靠谱”。
我还是宽容一些吧,谁不会犯错呢,让我把签名改回“风轻云淡,开心快乐”吧。
等下,我刚才是不是又发现了一个他没提交的代码库???
两拳是不行了,我得给你两脚!