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

如果是以前,我肯定会回答:是。因为我们始终认为,一个年投入超3亿元的卖火车票网站,没有什么理由做不好吧?其实不光是小编这样认为,包括众多媒体,甚至专业人士都曾喷过12306,但近日一名前淘宝工程师通过科普的方式给了我们一记响亮的耳光:做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动态库存的变态之处。比你平时买东西的任何网站的库存机制都复杂几十上百倍。

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

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

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

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

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

12306为什么买票这么难相关推荐

  1. Python + selenium + requests实现12306全自动买票

    Python + selenium + requests实现12306全自动买票 2020.05.03更新: 下面是新的测试结果: 2021.03.28更新:谷歌浏览器升级导致之前的隐藏方法失效,更新 ...

  2. 12306最新买票攻略

    我想很多人都不知道一个事情,比如今天是1月6号,12306上面写的是只能买1月25号之前的票,包括25号.也就是说动车是提前20天,临客是提前25天,所以大家可以在日期选择上面最大选择到25天后的也就 ...

  3. python + selenium实现12306全自动买票

    整个程序分了三个模块:购票模块(主体).验证码处理模块.余票查询模块 使用方法:三个模块分别保存为三个python文件,名字分别为:book_ticket,captcha,check_ticket. ...

  4. python抢票软件哪个好_买票回家难?软件加速包也无用?看我用python轻松抢票回家!...

    如果你对自己手速和市面上的各种 "加速包" 都没什么信心的话,不妨试试用程序员的手段抢票? 况且,[12306 官方宣布屏蔽了一大批付费抢票软件],这也意味着你即使给这些软件付了会 ...

  5. 买票回家难?软件加速包也无用?看我用python轻松抢票回家

    如果你对自己手速和市面上的各种 "加速包" 都没什么信心的话,不妨试试用程序员的手段抢票? 况且,[12306 官方宣布屏蔽了一大批付费抢票软件],这也意味着你即使给这些软件付了会 ...

  6. 买票回家难?软件加速包也无用?看我用python轻松抢票回家!

    如果你对自己手速和市面上的各种 "加速包" 都没什么信心的话,不妨试试用程序员的手段抢票? 况且,[12306 官方宣布屏蔽了一大批付费抢票软件],这也意味着你即使给这些软件付了会 ...

  7. 火车票能不能选座_火车票选座技巧,网上买票能选座吗?

    相关: ◇网上买不到火车票去车站能买到么 目前,网上售票.电话售票和火车站售票窗口售票的数据是一致的,每年到年底临近春节期间,火车票都特别紧张,哪种方式买票都非常困难,如何第一时间抢到自己想要的票成为 ...

  8. 12306买票难的一些思考

    2019独角兽企业重金招聘Python工程师标准>>> 买票难,难在供需关系,除了数量上,还有可获得性上.一个回家的火车联运方案,从某个始发站到某个终点站,票的供给在于放给该始发站的 ...

  9. 黄牛是怎样抢票的?——从业务分析师角度看买票难问题

    摘要: 春运到了,12306被推上了风口浪尖,大家将买不到票的怨气全部吐在12306上!几年前火车票已经实名制了,那黄牛应该就找不到赚钱的空间了,但因为业务流程上的漏洞,造就了黄牛存在的空间.如何改善 ...

  10. Java知识点26——模拟12306买票过程、模拟龟兔赛跑的过程、静态代理例子

    模拟12306买票过程 共享资源,并发(线程安全) Web12306.java /*** 共享资源,并发(线程安全)* @author Administrator**/ public class We ...

最新文章

  1. codeforces A. Jeff and Digits 解题报告
  2. WinCvs里登录出现C:/cvs: no such repository解决方案
  3. 【Java】ArrayList 列表的泛型
  4. 2.2.2 定点数的运算(移位、原码和补码的加减乘除、溢出概念和判别方法)
  5. 解决IOS中input失焦后,页面上移,点击不了问题
  6. 离阿里最近的机会,来了!
  7. 微信/抖音商城小程序源码开源版(下载)
  8. Unity 编辑器下控制播放粒子
  9. Windows OCR推荐
  10. outlook邮件中样式错乱问题
  11. 硬货专栏 |深入浅出 WebRTC AEC(声学回声消除)
  12. golang not enough arguments in call to uuid.Must have (uuid.UUID) want (uuid.UUID, error)
  13. 用.bat文件多开微信及打开固定浏览器浏览固定页面 开机自启
  14. bug记录-socket hang up
  15. 电脑代理服务器出现问题的解决办法
  16. linux端口查看time_wait,netstat -an查看到大量的TIME_WAIT状态的解决办法
  17. Android 7.0 Nougat(牛轧糖)---对开发者来说
  18. ios-block-对象与对象之间的解偶合
  19. Zoom视频会议软件使用
  20. 使用第三方APPKey授权 跳转登录 QQ

热门文章

  1. codeforces 558D Guess Your Way Out! II
  2. thinkphp的这些扩展插架你都知道吗?
  3. linux格式化挂载的硬盘,linux格式化和挂载硬盘
  4. Android Gradle plugin requires Java 11 to run. You are currently using Java 1.8.
  5. 惠斯通电桥平衡条件推导
  6. 如何保存Win10壁纸
  7. 路由器和交换机的区别
  8. Minor GC ,Full GC 触发条件
  9. 北京二手房呈井喷态势 单日网签年内首超600套
  10. Debian安装WPS的方法