拼多多技术事故复盘,程序员应该学到什么?
这个事情发生后,在技术圈炸开了锅,可能是源于传言的“一个 bug 可能给公司带来 200 亿的损失”。
这些端倪看起来可以合理地解释一个重大 bug 的部署和运维。从这些端倪中,除了优惠券本身的设计问题,我们也可以看到运维的混乱。
测试券怎么能够上线呢?系统爆表了,为什么没有跟进风险防范措施?手动下线了的测试券,怎么又能够重新上线了?为什么上线、下线优惠券操作这么草率?
如果一个软件系统是这样的运维水平,出问题是迟早的事情。如果还没出问题,只能说运气太好。
优惠券的设计问题
第一个吸引我们的问题是,“好多人羊毛弄了几十万”。这就意味着,一个人可以领用上千张优惠券。好多人这么操作,说明无门槛券的领用,技术门槛极低。
截至昨日,拼多多市值接近 230 亿美元,折合人民币也就 1600 亿的样子。100 元无门槛券随便领,这看起来像是要拆了公司给大家发奖金的姿态。这肯定不是无门槛券的预期。
随便领的无门槛券,怎么看都不是一个合格的商业设计。最起码,定个数量上限吧,大家抢完就没了,几百万送就送了。送几百个亿,不符合正常的商业逻辑。
一般而言,即便是普通优惠券的领取都有很多附加的条件。比如说,一个账户只能领取一次,或者只有新账户可以领取。
而账户的认证,也要有很多的安全措施,比如绑定手机号,绑定设备,使用安全连接等措施。账户的认证和管理,是一个服务网站最最基本的功夫。
如果一个人可以领用上千张优惠券,那么账户管理的这个基本功,不能算及格。账户的管理水平如果不及格,这个网站的风险比我们想象得还要糟糕。
这么糟糕的账户管理,这么糟糕的商业设计,太出乎人的意料,不符合正常的逻辑。所以,我比较认同这只是一个测试券,不应该出现在正常运营的系统中。而如果真是测试券的问题,暴漏的就是软件研发和运维的混乱。
混乱的研发和运维
上线后,还要有持续的风险监控。如果系统超过了阈值爆掉,运维能够第一时间获得爆表的信息,比如大半夜的,账户异常活跃或者优惠券业务火爆,也能够及时地截断这个风险。
2011 年,一个数字证书签发机构,给谷歌签发了多张数字证书。而谷歌从来没有向这个机构申请过数字证书。也就是说,数字证书的持有者并不是谷歌。
这个持有者可以冒充谷歌的网站,盗取用户登录信息,包括用户名和密码。这意味着要么这个公司技术水准有问题(黑客攻击),要么这个公司的运维能力有问题(乱发证书)。
这个安全问题在 2011 年 8 月份被曝光,几乎所有的软件巨头立即宣布封杀这家机构的数字证书。9 月份,这家有着很大市场影响力的机构就宣布破产了。
这些新技术如果广泛使用,将彻底抹掉整个数字证书签发行业。这样的日子,离我们已经不远了。现在,数字证书签发机构的日子过得都比较惨淡,卖的卖,散的散。
频频发生安全事故的顺风车,从长期看,也具有类似的性质。相比之下,如果一次事故损失的只有钱,影响可能还算是可以勉强承受的。希望损失的只有钱,但是我对这个期望并不乐观。
追本溯源,运维如此混乱,一般和软件的质量脱不了干系。 一个正经的软件系统,该怎么出品、该怎么部署、该怎么运转、该怎么授权、危机该怎么处理,这些问题都要有设计、有实现、有预案。
我们该怎么做?
无知者无畏,安全问题之所以特殊,就在于它如果不发生,我们也许永远不知道问题的存在,当然也不知道问题有多严重。每一次安全危机,都不应该被浪费。如果我们是当事人,有哪些办法可以避免类似的事故呢?
最紧急的事情,就是赶快把账户安全的债给还了。要不然,经过这一次的传播,一大堆的眼睛看好了这块肥肉。黑客攻击的下一波,也许已经在路上了。
第一件要做的事情,就是规范研发流程。一流的软件研发流程下出品的产品,再差也不会差到哪儿去。在这个研发流程里,程序员不能单枪匹马地蛮干。
需求要讨论,设计要预览,功能要审核,代码要评审,软件要测试,系统要试运营。人人都会犯错误,每一个环节,多几双眼睛盯着,就大幅度减少了犯错误的几率。
程序员也能通过研发的流程快速成长,进一步降低错误发生的几率。一个好的制度,可以成就人;一个坏的制度,可以糟蹋人。
第二件要做的事情,代码的安全要重视起来。代码的安全,不都是指黑客入侵。这个无门槛券的领用,就是一个严重的安全事故。
反映到代码层面,可能就是账户管理不安全,商业逻辑没有校验,运维授权管理散漫,异常风险没有及时预警。
第三件要做的事情,商业设计要预先推演。即使没有黑客黑产,1000 亿人民币无门槛优惠券,也不是任何一家商业机构愿意支付的成本。这是一个幼稚园水平的错误。
如果商业逻辑不成立,也就意味着有缺陷的软件需求。建立在漏洞百出的需求上的软件,也会是漏洞百出的。
第四件要做的事情,改进产品上线的机制。设置产品上线的检查点和流水线,任何一个检查点失效,流水线都要中断,产品都不能上线。这些检查点包括产品的试运营、功能的审批、配套的监控措施等等。
第五件要做的事情,提高运维的风险防范能力。一个有着 3 亿用户,230 亿美元市值,经营电子商务的公司,是黑客眼里的肥肉。
尤其是用户隐私信息和现金流,关系到企业的生死存亡。这种体量的公司,具有优秀的风险防范能力是最基本的要求,而不是锦上添花的东西。风险的主动检测、及时预警、快速应对,这些措施都要跟得上。
如果无门槛券的商业设计经过推演,软件功能经过讨论,实现代码经过评审,上线经过预演,事故能够及时预警,只要其中的任何一个环节发挥了作用,这次事故都不会这么惨烈!
我理解一个公司不顾一切全速前进,以质量换速度的竞争压力和动力。只是,当我们追求眼下速度的时候,也要考虑三尺以外的未来。要不然,这屁股后面累积的债,真会成为怎么甩都甩不掉的大尾巴。