在银行实习的日子里没有什么压力,每天6点准时开溜,失去了之前在学校学习的斗志与激情。正好学校评选十大最美教师,需要做一个微信小程序的评选系统,我寻思闲着也是闲着,不如参与尽力,可以赚点外快,还可以写个并发的小程序,锻炼下能力。

起始

最开始我是准备和另一位同学自己写的,她用Vue写前端,我用Java写后端,数据库我来设计,接口我们一起制定,同时,也可以和她一起研究下读多写多的并发处理(预计TPS会达到2300),所以感觉这个还是一个很有挑战,很有意思的一件事。

同时,投票系统还要注意防止刷票行为,这个也是一件很有挑战的事情。

最重要的是,这是一次实战,可以检验我面试的八股文,让我想想就雀跃异常。

——但是,没错,事情不会那么顺利,总是会有但是发生。前端的同学跟我说,她正好看到一个公司,可以直接在后管上DIY投票系统,根本不需要编辑代码,如果用他们的系统,我们几乎什么都不要做。而且她告诉我,这个系统要的比较急,编写时间可能只有不到两周的时间,所以我思考了一下,我们就直接敲定用那个投票系统而不是我们自己去做。

虽然不能自己做有点遗憾,但是当时心中还有一丝窃喜,我只需要动动手指就能把钱拿了,程序员也就图一乐,真要搞钱,还是要看中间商。

经过

当我们敲定了这个投票系统的解决方案之后,就开始联系那边的投票系统供应商,花了几百块钱开了会员满足我们的定制化需求。就这样,本来的前端和后端开发,变成了PM,同时前端负责跟老师汇报,我负责在后台管理上配置界面,两人分工明确。这个投票系统的需求,从最开始的一个有挑战的练习项目,完全变成了一个赤裸裸的捞金项目。

老师是我们的甲方,我们是投票系统的甲方。

没过多久,学校的最美教师评选开始了,而我们的这个双层外包投票系统也开放上线了,对于它的上线,我是无感的,完全没有自己写出系统的成就感,不过,当时也并没有想到,一个小小的投票系统,竟然也会造成一出闹剧。

转折

投票时间一共五天,前三天毫无异常。

但是,就当我们以为万事大吉的时候,在第四天,后台的投票数据疯狂增长,尤其是第五天下午,前几名老师的票数高达四五十万,而且还在以肉眼可见的速度激增,老师开始频繁给我打电话,问我到底出什么问题了,是不是刷票了。我口头给老师说没事没事,其实慌的一批,因为我也不知道发生什么情况了,我只能找那个系统的客服,客服给我说一定不会刷票,但是明显增长的这么快,并且IP重复率很高,所以我也断定是刷票了,但是我不知道该怎么跟老师回复,因为我即使知道刷票,我也没有任何解决办法,因为,系统对于我来说是透明的。况且,我没见到程序,根本不知道出了什么问题,也不知道我的猜测对不对,第一次生出了这种无力感,不是自己没能力,但就是做不了。

第四天晚上,老师疯狂call我,老师以为我是开发,其实我并不是,我只是一个传话筒,把老师的话,传递给那边的客服,这种感觉,很难受,我是一个后台工程师,但是对于这种情况,我却什么也做不了。那天晚上,我将近12点才到家,不是因为写出程序加班,不是因为改bug加班,而是因为回复老师,看着后台管理的界面发呆。。。

结尾

系统在第五天下午关闭了,我把每位老师的投票情况(人数,时间等)打包发给了老师,但是因为老师坚持认为这是刷票,而我又拿不出证据,这场活动,几乎学校十几万人参加的活动,虎头蛇尾,草草收场。

反思

这其实属于一种线上事故,它导致的结果,就是这次参与人数超过百万的投票活动宣告失败,一个算上教职工超过10W人的学校的公信力的失败。对于学校来说,这是一种侮辱。我看到学校公众号下面的评论,很多是在骂这次活动,然后借着这次活动去骂学校。当时我心里难受极了,因为我的私心,导致了学校受到了这么大的舆论影响。那几天晚上,我在床上辗转反侧,久久不能入眠。

其实,刷票只是我的猜测,我的甲方认为投票人数过多,极有可能是刷票,但是我和那边的客服又提供不了证据,所以,才让这件事情草草收场。

这也提醒了我,在以后的业务开发过程中,要具有Owner和全局意识,这样出问题才能迅速定位,不至于有力使不出的感觉。同时,还要衡量业务失败所造成的影响和后果,多准备一个方案和补救措施。

假如我之后有机会开发很多人使用的国民APP,一定要12分认真,12分细心,因为,稍有不慎,自己的BUG,将会影响数亿人,而损失,将不可估计。

本来以为这只是一件小事情,但是,事故不都是在小事情中发生的吗?