拼多多技术事故复盘,程序员应该从中吸取什么教训?
每一次事故都是在倒逼技术团队成长,没有谁能保证不写 Bug 不出错,我们要做的,是在事故发生以后,找到问题的根源,及时填坑止损。
2019 年 1 月 20 日凌晨,有网友称拼多多出现重大 Bug,100 元无门槛券用户可以随便领取并进行消费。大家争相传播,大半夜的都起来领券,有的用户甚至领取了上千张。机灵的用户,以最快的速度花掉了优惠券,比如给中国移动充值。
拼多多凌晨回应,实际最终资产损失或低于千万人民币。这个事情发生后,在技术圈炸开了锅,可能是源于传言的“一个 bug 可能给公司带来 200 亿的损失”。
作为程序员,我更关心的是,这个 bug 到底是怎么来的呢?根据市场传言,我们大致可以得到如下的一些线索。这些线索的真实性还有待考证,或许并不是这次事件的真实情况,但是这也不妨碍我们通过这些线索,来探讨一下这起事故给我们带来的启示。
● 好多人羊毛弄了几十万;
● 这张券是测试券;
● 系统在凌晨自动上线测试券;
● 运维发现系统爆了,超过了阈值;
● 当事人手动下线了测试券;
● 手动下线的测试券,早上八点又上线了。
这些端倪看起来可以合理地解释一个重大 bug 的部署和运维。从这些端倪中,除了优惠券本身的设计问题,我们也可以看到运维的混乱。测试券怎么能够上线呢?系统爆表了,为什么没有跟进风险防范措施?手动下线了的测试券,怎么又能够重新上线了?为什么上线、下线优惠券操作这么草率?如果一个软件系统是这样的运维水平,出问题是迟早的事情。如果还没出问题,只能说运气太好。
混乱的研发和运维
一个测试券,居然自动上线;手动下线后,又自动上线。这样的产品发布流程匪夷所思。一项功能的出炉,要经过设计、实现、评审、测试、审批,才能够走到正式的系统中。这些环节,只要有一个环节发挥了作用,测试券都不可能上线,更不可能自动上线。
上线后,还要有持续的风险监控。如果系统超过了阈值爆掉,运维能够第一时间获得爆表的信息,比如大半夜的,账户异常活跃或者优惠券业务火爆,也能够及时地截断这个风险。
由此可见,对运维人员的合理约束机制,是一个商业公司必须谨慎对待的问题。哪能随便一个测试券就可以直接跑到正式的系统中呢?软件的运维,是一个需要特别关注风险管控的环节,尤其是软件的质量没有跟上的时候。软件的运维事故,有时候甚至会颠覆一个行业。
我们该怎么做?
无知者无畏,安全问题之所以特殊,就在于它如果不发生,我们也许永远不知道问题的存在,当然也不知道问题有多严重。每一次安全危机,都不应该被浪费。如果我们是当事人,有哪些办法可以避免类似的事故呢?
最紧急的事情,就是赶快把账户安全的债给还了。要不然,经过这一次的传播,一大堆的眼睛看好了这块肥肉。黑客攻击的下一波,也许已经在路上了。
接下来,要尽快考虑下面的几件事情。
第一件要做的事情,就是规范研发流程。一流的软件研发流程下出品的产品,再差也不会差到哪儿去。在这个研发流程里,程序员不能单枪匹马地蛮干。需求要讨论,设计要预览,功能要审核,代码要评审,软件要测试,系统要试运营。人人都会犯错误,每一个环节,多几双眼睛盯着,就大幅度减少了犯错误的几率。程序员也能通过研发的流程快速成长,进一步降低错误发生的几率。一个好的制度,可以成就人;一个坏的制度,可以糟蹋人。
第二件要做的事情,代码的安全要重视起来。代码的安全,不都是指黑客入侵。这个无门槛券的领用,就是一个严重的安全事故。反映到代码层面,可能就是账户管理不安全,商业逻辑没有校验,运维授权管理散漫,异常风险没有及时预警。
第三件要做的事情,商业设计要预先推演。即使没有黑客黑产,1000 亿人民币无门槛优惠券,也不是任何一家商业机构愿意支付的成本。这是一个幼稚园水平的错误。 如果商业逻辑不成立,也就意味着有缺陷的软件需求。建立在漏洞百出的需求上的软件,也会是漏洞百出的。
第四件要做的事情,改进产品上线的机制。设置产品上线的检查点和流水线,任何一个检查点失效,流水线都要中断,产品都不能上线。这些检查点包括产品的试运营、功能的审批、配套的监控措施等等。
第五件要做的事情,提高运维的风险防范能力。一个有着 3 亿用户,230 亿美元市值,经营电子商务的公司,是黑客眼里的肥肉。尤其是用户隐私信息和现金流,关系到企业的生死存亡。这种体量的公司,具有优秀的风险防范能力是最基本的要求,而不是锦上添花的东西。风险的主动检测、及时预警、快速应对,这些措施都要跟得上。
如果无门槛券的商业设计经过推演,软件功能经过讨论,实现代码经过评审,上线经过预演,事故能够及时预警,只要其中的任何一个环节发挥了作用,这次事故都不会这么惨烈!
想学习PHP的朋友,或者进阶PHP中高级程序员,我为大家准备了一套精品PHP中高级进阶学习教程,还可加入大牛学习圈子,分享tp,laravel,swoole,swoft微服务、SQL性能优化,分布式、高并发等教程,各种大牛都是3-8年PHP开发者,还有每天还有11年的架构师做课程讲解,助你进阶中高级PHP程序员,增值涨薪!获取方法点击下方文章链接即可!
全套laravel框架、ThinkPHP框架全套教程分享,PHP程序员福利!
PHP开发三年只懂增删改查?那是你没有规划好php学习路线
我理解一个公司不顾一切全速前进,以质量换速度的竞争压力和动力。只是,当我们追求眼下速度的时候,也要考虑三尺以外的未来。要不然,这屁股后面累积的债,真会成为怎么甩都甩不掉的大尾巴。