12306一崩再崩,作为程序员你最想优化哪个功能?

来源:知乎 https://www.zhihu.com/question/363935295
回答作者:匿名

12306一崩再崩,作为程序员你最想优化哪个功能?
逛知乎看到一个挺有趣的话题与回答,遂分享给大家~

看到好多人在喷12306垃圾??说真的但凡你学过知道点原理,你都说不出那些话----------------------------------------------------------------------------------------------
小小程序员为12306正名一下12306的量级在某些时候可以说是世界最了,没有之一,想当年铁总招标,不设预算上限,也没人敢啃下这块硬骨头,后期还是请了阿里的团队帮忙做(道听途说),因为实在是太难了,可能有人不了解,我简单举几个例子

1.库存:大家理解的可能不就是几百张票,卖一张减一张就是了,但是12306不只是线上销售,他还有线下几百个车站,为了不出现抢同一张票,必须要保证每一张票的库存准确,这是12306和淘宝最大的差别之一,网购是纯线上业务,那怕流量再大,整个数据都是闭环的,而12306,则所有的线下人工+自助的操作都会影响整个数据库。

2.访问:基本挂了都是因为这个原因,假设一个服务器每秒只能接受1000个人的访问,可是春运期间,访问量可能是每秒100000,我们网购东西,一个商品不可能每隔几分钟就去刷一次,但是抢票会啊,为啥铁路最近一直diss抢票软件,因为抢票软件就是一直不停的刷新,刷一次访问一次,市面上抢票软件如此多,可想而知服务器压力多大,有人肯定说,那就多买点服务器啊,只能说可以但是没必要,服务器造假不菲,一年高峰也就20几天,其它时间全在浪费,虽说是民生工程,但是总要有取舍,有这钱不如多开几条线路实在。

3.时效:这一点可能也被很多人忽然了,就是时效,像淘宝双十一订单,从你下单到你确认收款,这样一个闭环才算是完成一个订单,期间有大量的时间缓冲,处理,基本你0秒付钱的订单,可能几个小时后才真正的处理了,这也是为啥双11不能取消订单,可车票不是啊,你付完钱立马就出票了订单就结束了,没有几个小时乃至几天的时间去处理,这也是2306和淘宝差别之一,毕竟要是我付完钱,2天后在告诉我没票了,那我会原地爆炸。

4.结果:淘宝知道你要什么,而12306不知道,双十一大家是不是很多商品早早就付了定金,很多商家基本都能算出库存,好及时应对,可是12306不知道你要去哪里啊,一趟车几十个停靠站,假设abcd四个站,你买了一张b-c的,那么a-d的票就少了一张,这样能理解吗?这算法可比淘宝胡渣多了,就像你永远不懂女神一样,12306也不懂你的下一个目的地是哪里。

另外还有一些专业性的就不说了,去重啊,查表啊,反正就是两个字,麻烦!!!为啥12306每天凌晨要维护,不维护早就炸了!!

至于优化,要不优化下人口结构?人少了自然没啥问题(开个玩笑)

该优化的不是程序了,是程序外的东西:

1.把所有抢票软件定义为黄牛,不得上线。全民必须手抢,我觉得服务器的开销会小好几个数量级。至于背地里的抢票软件:查到了就封软件呗,报案呗,封ip呗,封不完也能大大减少请求。

2.增加春节假期,严格执行,引导企业错位放假。这样的话,购票的峰值,自然就被摊平了~

最后祝大家都能抢到回家的车票。