12306 外包给阿里巴巴、IBM 等大企业做是否可行？
看到那么多讨论，其实12306真的没那么简单，好多人只看到了表面就开喷。 在平时，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动态库存的变态之处。比你平时买东西的任何网站的库存机制都复杂几十上百倍。 除此之外还要排除在代售点、车站等卖出的票，退票回库、改签等计算。 以上讨论只是把12306当成和淘宝一样没有历史包袱从零起步的交易系统，实际上，它不是，它后面的票池，还有电话售票、火车站售票、代售点售票等多个传统渠道要服务。除了客运服务，12306还有全国最大（很可能也是全球最大）的大宗物资货运系统。 目前的12306技术上是还有问题，比如，抢票高峰，输入个身份证号和图片验证码都卡得要死（本人亲测），服务器端繁忙，你浏览器端卡什么呀。 但人家在进步。技术已经不再是一票难求的主要问题。在铁路运力不可能神速增加的情况下，要做到春运更公平地买票，需要靠政策调整。 回到问题，做这个系统肯定需要很多人力来做，需要各种数据优化，解决方案等，阿里巴巴、IBM都有自己的项目要自己的大牛来做。这是体制内的项目，各种要求层出不穷，麻烦得很。不是阿里、IBM没有解决方案，是人家愿不愿意做。