前淘宝工程师谈12306:做它比做淘宝难

如果把12306外包给IBM或者阿里巴巴来做,能否比现在做得好?

如果是以前,我肯定会回答:是。因为我们始终认为,一个年投入超3亿元的卖火车票网站,没有什么理由做不好吧?其实不光是小编这样认为,包括众多媒体,甚至专业人士都曾喷过12306,但近日一名前淘宝工程师通过科普的方式给了我们一记响亮的耳光:做12306网站难度远高于淘宝。

我曾在淘宝写过一段时间代码,2012年在一家百强民企做电商副总,当时在极为艰苦的条件下带队开发了一个B2C网站,走支付宝和银联支付通道,年营业额千万级。

在平时,12306也就是个正常的电商网站。但一到黄金周,12306就是一个全站所有商品都秒杀,所有SKU(库存量单位,物流管理术语,编者注)都是动态库存的变态。

媒体人喷12306,是他们不懂技术,没有能力和耐心来分析背后的难度。技术人员喷,则是因为大部分的技术人员在短时间思考时,容易陷入过于乐观的误区。

至于12306一期工程3个亿(含硬件)贵不贵我不评价,我只提供一个数字供参考,百度一年的研发费用(不含硬件)是10亿,这个数字来自百度财报。网上能查到。3亿看起来好大一个数字,真用到超大型的电商系统、搜索引擎系统里面,其实也不算什么天文数字了。

再解释一下,为什么秒杀压力大,以及为什么12306的动态库存很复杂。

先说秒杀:

2013年12月25日前后,天猫搞了一个圣诞季积分兑换活动,持续几天。25号上午10点12分,放出了15000个天猫魔盒,从成交记录上看,是19秒内全部抢完。

实际上,我也参加秒杀了,我应该是5秒内答题完成并提交订单,结果告诉我排队的人太多,14秒以后重试。

我想,14秒以后哪还有我的事情呀,于是重新答题秒杀,结果出现了服务器错误的页面。反复刷新几次,就告诉秒杀结束了。

淘宝是什么技术水平呢,淘宝有至少4000技术人员,至少4万台服务器。以淘宝这样的技术水平,也不能做到秒杀时让每个用户都没有拥挤感,为什么呢?

一是要尊重物理原理。一台服务器一秒钟能承受的计算量是有极限的,任你怎么优化,采用多高效的算法和编程语言,都突破不了某个极限。

二是要考虑经济效益。十一黄金周的时候,北京主城区到八达岭长城的路堵得严严实实,但不能因为黄金周的高峰,就把这段路修成长安街那样10车道的高速公路。

再说动态库存:

淘宝秒杀天猫魔盒的时候,只有一个商品(行话叫做SKU),它的库存是15000个。有一个人秒杀到了,库存就减1,19秒卖完的,一秒要成功产生789个订单。想象一下,你在广场上卖火车票,一秒钟有8万人举着钱对你喊:卖给我!

好了,讲了这半天淘宝,可以说12306了吧?

我以北京西到深圳北的G71次高铁为例,它有17个站,3种座位。表面看起来,这不就是3个商品吗?G71商务座、G71一等座、G71二等座。大部分轻易喷12306的技术人员就是在这里栽第一个跟头的。

实际上,G71有136*3 =408种商品(408个SKU),怎么算来的?请看:

如果卖北京西始发的,有16种卖法(因为后面有16个站),北京西到:保定、石家庄、郑州、武汉、长沙、广州、虎门、深圳……都是一个个独立的商品,

同理,石家庄上车的,有15种下车的可能,以此类推,单以上下车的站来计算,有136种票:16+15+14…+2+1=136。每种票都有3种座位,一共是408个商品。

旅客A买了一张北京西(01号站)到保定东(02号站)的,那【北京西到保定东】这个商品的库存就要减一,同时,北京西到石家庄、郑州、武汉、长沙、广州、虎门、深圳等15个站台的商品库存也要减一,也就是说,出一张北京到保定东的票,实际上要减16个商品的库存!

这还不是最复杂的,如果旅客B买了一张北京西(01号站)到深圳北(17号站)的票,除了【北京西到深圳北】这个商品的库存要减一,北京西到保定东、石家庄、郑州、武汉、长沙、广州、虎门等15个站台的商品库存也要减1,保定东到石家庄、郑州、武汉、长沙、广州、虎门、深圳北等15个站台的商品库存要减 1……总计要减库存的商品数是16+15+14+…+1=120个。

想象一下,8万人举着钱对你高喊:卖给我。你好不容易在钱堆里找到一只手,拿了他的钱,转身找120个同事,告诉他们减库存,而这120个同事也和你一样被8万人围着;也和你一样,每卖出一个商品要找几十个人减库存……这就是12306动态库存的变态之处。比你平时买东西的任何网站的库存机制都复杂几十上百倍。

再说一下抢票插件,防机器人抢票,也不是加个图片验证码那么简单。验证码设置得复杂一点吧,人们要喷:这只是便宜大学生和办公室白领,农民工连26个字母都认不齐,怎么搞?搞动画验证码吧,也有人喷:视力不好的人怎么办?最后验证码搞得太简单了,皆大欢喜了,其实最高兴的是开发抢票插件的公司。

以上讨论只是把12306当成和淘宝一样没有历史包袱从零起步的交易系统,实际上,它不是,它后面的票池,还有电话售票、火车站售票、代售点售票等多个传统渠道要服务。除了客运服务,12306还有全国最大(很可能也是全球最大)的大宗物资货运系统。

架空政策(包括定价政策、警方打击黄牛政策、身份验证政策)谈技术,是不可能解决春运抢票困局的,要想让春运的时候每个人在12306抢票都毫无拥挤感(但不一定能抢到票,铁路运力摆在那),那就是逼着12306买一大堆服务器对付春运,春运过去后,成为跟amazon一样牛逼的云计算服务商。和逼北京修一条10车道的高速公路去八达岭长城一个道理。

目前的12306技术上是还有问题,比如,抢票高峰,输入个身份证号和图片验证码都卡得要死(本人亲测),服务器端繁忙,你浏览器端卡什么呀?

但人家在进步。相信2015年春运的时候,技术已经不再是一票难求的主要问题。在铁路运力不可能神速增加的情况下,要做到春运更公平地买票,需要靠政策调整。

我们再来看看一些神评论吧!

w_y 河南郑州 2014-12-4 18:33:36

这么大的访问量,基本是全球最大规模的ddos攻击了。

francis4es新疆石河子 2014-12-4 18:48:50

别吐槽了!中国全球第一多的人口,春运举国移民似的,就算12306买了10万台服务器不卡了,一瞬间大家还是会把票全都买完,你还是买不到!重点是铁路线路就那么点,人那么多,不是人家技术的问题。

吃藕 福建福州 2014-12-4 18:30:53

部分人可能只体验过高峰期买票,本人多次在非高峰期坐动车,网购车票体验很好。。。

3th1nk 广东深圳 2014-12-4 19:14:35

动态库存确实难,现在的分时分站放票等方案也还不错,但技术和硬件设施上终归有极限,更好更长远的方案是避免人口集中迁移的行为,那么改善政策,减小地区发展差异吧,让更多人不需要背井离乡!

万能通行证河南信阳 2014-12-4 20:17:31

三亿拿来做网页?如果把钱花在做漂亮网页上,你又该喷了。。。

小as江苏苏州 2014-12-5 9:15:29

看了之后我觉得这个网站有误解,不是网站用的3亿,而是整个一套,比如服务器之类的硬件,这样想,好像差不多,1万台中端服务器都不止3亿,更何况淘宝10万服务器。

陶瓷 江苏无锡 2014-12-4 22:36:44

可以这样,假如同时有80000人在抢!只有1000张票,可以先出现排队画面让大家等候,积累十秒内的抢购id,随机抽取1000个人发票,这样既能防止刷票软件比普通人手快,又们让网速不同的人站在同一起跑线!

远山的妖 贵州遵义 2014-12-4 21:58:00

其实我因为出差,经常网上购票,感觉挺方便挺好的,体验最起码能达到80分吧。有人说UI不好看,真是太搞笑了!莫非UI好看一点你就会像逛淘宝一样经常去逛了么?会没事去看看哪趟车页面独特、哪张车票好看然后就买一张玩玩?个人觉得,作为一个实用型的网站,易用性是第一位的。当然,我唯一不满意的是不能自主选座,特别是跟同伴一起购票……真是太不科学了啊!

犯二的蒋先生 湖南湘潭 2014-12-4 21:41:13

我觉得,春运买票苦的还是外出务工的人员,平时没时间上网抢票,有的其实也不会网上买票。还有一个,他们的工作时间不稳定,不知道什么时候放假,也导致不能提前买到票。我觉得大家回家坐车时,也不要嫌弃那些过道上,车厢连接处的打工者,他们不容易。

itssniper北京 2014-12-4 21:00:07

百度一年要建的cdn机房要多少钱,122台国产服务器,两种套餐,而且有种套餐配备的3块三星840系列512g固态,9块4t的机械。122台全都按 2w算,就是244w,某代工厂的流量收集服务器两台,按1w算,还有几台交换机,总价算3w,模块不到300个,一个是600,一共算18w,不算人力物力,就267w,一年10个亿,根本停不下来

一单福建泉州 2014-12-4 19:45:09

压力是很大,很难开发,就跟淘宝双十一一样的秒杀,但是商品数量更大更广泛,因此在某个特定时间对于各个软件功能以及硬件要求更大。没说一定必须得同一时间内必须全部完成,毕竟就算去售票点买票人多还不是照样要排队。 某些考虑也只能剔除掉,难度太大就押后先把简单点的放上去后续再进行改进,任何软件不都是如此。。一开始就想把难点都完成了,得需要多大的人力资本更不用说周期得多长。

再者拿百度研发资金来说太不对了,百度研发资金难道就都只是单方面的网站上的吗?它除非是先进的领域否则还不都是多个领域的投入研发? 并且12306本身就不大是为了商业盈利性,只是为了购票的简便。

有疑问回答不是吗?藏藏掖掖不说明,到后面说这个好难,这不是打脸的行为?

 ̄尐╰鑫つ上海 2014-12-4 19:44:21

要想让春运的时候每个人在12306抢票都毫无拥挤感(但不一定能抢到票,铁路运力摆在那),那就是逼着12306买一大堆服务器对付春运,春运过去后,成为跟amazon一样牛逼的云计算服务商。和逼北京修一条10车道的高速公路去八达岭长城一个道理。

这说不定真是一条出路,春节以外的时间做云计算服务商合理利用资源也挺好的。



原文地址:WatchStor

你可能感兴趣的:(科技杂谈)