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

如果把12306外包给IBM或者阿里巴巴来做,能否比现在做得好?也行每个人里都有一个答案,我们这里不分对错,只谈谈个人看法。

在平时,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。想象一下,你在广场上卖火车票,一秒钟有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年春运的时候,技术已经不再是一票难求的主要问题。在铁路运力不可能神速增加的情况下,要做到春运更公平地买票,需要靠政策调整。

更多相关文章
  • 前言 春节期间,无意中看到一篇文章,文章中讲到12306的业务复杂度远远比淘宝天猫这种电商网站要复杂.后来自己想想,也确实如此.所以,很想挑战一下12306这个系统的核心领域模型的设计.一般的电商网站,购买都是基于商品的概念,每个商品有一定量的库存,用户的购买行为是针对商品的.当用户发起购买行为时, ...
  •   “有无搞错?居然给我介绍一个开网店的男人!”前日晚,草草结束了一场相亲的女白领晨晨,向介绍人打去了量问电话.“在我的观念里,做这种工作的人,要么是找不到工作,要么是游手好闲,哪能托付终身呢?”原来,晨晨此次的相亲对象,是一个在淘宝上开网店的店主.见面后,她对对方什么都合意,但一听说对方的职业,立 ...
  • 在产品开发中,常常遇到产品性能问题,这些性能问题会很大程度上影响到产品的架构.但解决这些性能问题,切莫认为只是技术人员的事情,产品经理和产品总监也要参与其中,甚至是业务人员(销售.售前).下面以12306的售票问题为例,来做一个完整的说明.本文的目的,不是说技术性优化不必要,而是说作为开发人员不要闷 ...
  • 1.简要概述项目2.介绍项目架构把项目整体架构描述一遍,系统环境和软件架构可以一句话带过.网络架构可以按照网络拓扑来说明,顺便把服务器角色和业务流程说一下.要突出运维体系架构中的关键点:监控报警.负载均衡.冗余.高可用.数据库集群.存储.安全.虚拟化等的部署和设计.3.自己负责的技术部分前面的介绍可 ...
  • 导读:本文作者是淘宝技术部技术专家陈康贤(花名龙隆),他是<大型分布式网站架构设计与实践>一书的作者,在本文中他分享了他对大型网站架构的理解,优优分享之,希望对你有帮助. 大型网站架构从来都不是一个预先定义的架构,而是一个演进式的架构.很少有一个网站从建站开始,就能够因具备大型网站的所有 ...
  • 由于春运,铁道部官方订票网站12306流量暴增,其Alexa排名一度进入前200,网友戏称,12306已经成为“全球最大.最牛的电商网站”.由于流量激增,12306系统频频瘫痪,一度出现登不上去.登上去抢不了票.抢到票需排队.排队后出票失败等局面.系统的用户体验.性能遭到用户大量的不满. 我们邀请了 ...
  • 对话淘宝UED——行业碰撞,百度与淘宝用户研究团队交流对话录
    百度UE团队在行业中一直树立着专业.领军的形象,同时也以开放的心态,积极与同行业交流.5月24日上午,淘宝UER(用户体验研究)团队负责人龙客(韩涛)做客百度UE实验室,与百度UER团队的资深研究工程师进行工作分享,探讨专业发展之道.百度UER:作为互联网行业中较为优秀的用户研究团队,淘宝UED目前 ...
  • 我一般习惯用专业的眼光来挑剔显示设备(应该说 是专业的边角料 呵呵) 日系液晶除非是eizo老掉牙的l685等响应时间在40ms以上的准专业机(或以上机型诸如cg系列甚至黑白系列)值得一提 其他基本都当做娱乐就可以了 夏普也只有号称军用级别的20系列能凑合之前除了飞机9532.9531 暂时还没看到 ...
一周排行
  • 图文详解Apahce的安装及配置LAMP-01
    解压源码包# cd /usr/src# cd httpd-2.2.9进入解压后的目录# . ...
  • 机电传动控制第二周作业
    一.阅读电机发展简史 ①直流电机:最开始发展起来的,是直流电机.它的科学基础是法拉第电磁感 ...
  • 免费的Unix/Linux服务器体验和测试平台0 0 在该网站上注册一个帐号,就可以拥有该站提供的多台Solaris.Fedora等Unix/Linux服务器的登录帐号.对于想学习Un ...
  • 职场竞争如战场战争,还记得<穿普拉达的女王>中,那个总裁助理吗?全年无休,却因为一次小小的生病住院,在住院期间职位被一个刚毕业的大学生所取代.当然那个大学生也为之付出了很多努力,但不管怎么说,职场竞争是残 ...
  •        毕业了,心总是平静不下来!         青年节那天,看到51CTO技术成就梦想,因为平时很少浏览博客,但是51CTO里的博友写的文章深深的吸引了我,因为我自己也比较喜欢技术,所以就在这里留下自己的一 ...
  • rocks有很多命令,下面列举经常用的一些命令.一 rocks add rocks add  host interface 在rocks中添加网口rocks add host bonded compute- c ...
  • 惠普的中国站点增加了一些驱动程序中文站点HP520驱动程序(XP):[url]http://h50176.www5.hp.com/support/DUMHPNB520/drivers/os_1093.html#657 ...
  • 数据结构:串
    一.串的基本概念 1.串的定义 s=“a1a2…an” 2.串的基本操作 二.串的顺序存储 ...
  •     JDK安装方式1.jdk-5_0_i586.bin的安装模式chmod 700 jdk-5_0_i586.bin./jdk_1_5_0_linux_i586.bin安装完成后会在/usr/jdk_1_5_0_ ...
  • public static void main(String[] args) {         String s1 = "hello";        String s2 = "wor ...