通信地址:中国 山东省 济南市泺源大街6号F15 邮编:250014 E-mail:wl@qlwb.com.cn
电话 新闻热线:96709 报刊发行:0531-85196329 85196361 报纸广告:0531-85196191 85196543
齐鲁晚报 版权所有(C) 鲁ICP备05004346号
技术达人“代码狗”告诉你不知道的另一面专家普遍认为所言在理
在2014年春运大潮中,网络和电话购买火车票平台“12306”再次成为社会关注焦点。
自从“12306”诞生之日起,急着回家过年的人们已不再需要卷着铺盖、带着干粮去火车站排队买车票,电话线和网线承载了绝大部分希望。然而,“12306”并不像人们所期待的那样给力,漏洞多多、时常瘫痪,炒票的“黄牛”转战网络仍然活跃……
近日,一位自称“前淘宝技术人员,且曾在某民营公司做过电商副总”的名为“代码狗”的网友在网上发帖,详细分析“12306”网站的技术特点和它所面临的“不可能完成的任务”,直言这个官方网站已经穷尽所能试图解决购票难题,但无法单纯依靠技术手段彻底填平铁路运能与春运需求之间的鸿沟。
这引起了人们对“12306”的新一轮审视。“代码狗”所言有无道理?“12306”平台从技术角度看到底处于怎样的水平?
前淘宝工程师:12306几乎是一个奇迹
我曾在淘宝写过一段时间代码,2012年在一家百强民企做电商副总,当时在极为艰苦的条件下带队开发了一个B2C网站。
也就在那个时候,我对“12306”嗤之以鼻,觉得他们做得太烂了。于是我狂妄地想做一个开源的订票系统给他们。但我发现,“12306”的库存复杂性比淘宝、京东高很多倍,运算量也大很多倍。传统的分布式数据库、缓存、负载均衡技术并不能恰好满足“12306”的需求。
淘宝技术的确比“12306”强大很多倍,淘宝现在的系统也是花了10倍于“12306”的钱、时间和人力才做起来的。根本原因还是铁路运力不能满足春运需求,淘宝也解决不了这个问题。
12306这一年来进步非常大。从前段动画验证码、分时段抢票,到后端去小型机、虚拟化、内存数据库的运用。可以说,12306是中国政府机关做得最强大的网站(电商系统),能在短短一两年内做出这样的改变,几乎是个奇迹!
你不知道的“秒杀”
先说秒杀。为什么秒杀压力大?
2013年12月25日前后,天猫搞了一个圣诞季积分兑换活动,持续几天。25日上午10时12分,放出了15000个天猫魔盒,从成交记录上看,19秒内全部抢完。
实际上,我也参加秒杀了,那天的题目特别简单,我5秒内答题完毕并提交订单,结果系统告诉我排队的人太多,并提示14秒后重试。
我想,14秒以后哪还有我的事呀,于是重新答题秒杀,结果出现了服务器错误的页面。反复刷新几次,秒杀就已经结束了。
淘宝是什么技术水平呢?淘宝有至少4000名技术人员,至少4万台服务器(这是两年前的公开数据)。淘宝拥有各种自主研发团队,还有数不清的开源项目和中间件。
以淘宝这样的技术水平,都还不能做到秒杀时让每个用户都没有拥挤感,为什么?
一是要尊重物理原理,一台服务器一秒钟能承受的计算量是有极限的,比方说汽车发动机驱动的F1赛车至今也不能突破400公里的时速。
二是要考虑经济效益,“十一”黄金周的时候,北京主城区到八达岭长城的路堵得严严实实,但不能因为黄金周的高峰,就把这段路修成长安街那样10车道的高速公路,否则花费天文数字修了一段路,平时晒谷子?
12306的“变态”库存
再说动态库存。为什么“12306”的动态库存很复杂?
淘宝秒杀天猫魔盒的时候,只有一个商品(SKU),它的库存是15000个。有一个人秒杀到了,库存就减1,19秒卖完的,每秒要成功产生789个订单。想象一下,你在广场上卖火车票,一秒钟内有8万人举着钱对你喊:卖给我!
交易系统登记一个交易,它要做这些事:检查是否恶意访问、取到系统时间、取到顾客默认收货地址、核对顾客秒杀资格、生成订单号、把顾客ID系统时间订单号收货地址写入订单系统、扣除顾客天猫积分、商品库存减1、给顾客打标记(每人只能秒一个)等等,每件事都要花费毫秒级别的时间,这些操作加起来的时间可能是接近1秒级别的,但由于淘宝的服务器比较强悍,而且采用了分布式和集群技术,结果比1秒理想一点。但即使有1万台服务器,也不能把这个时间稀释成万分之一秒,因为,商品只有一种,它有15000个库存,对应的数据库记录只有一行,所有的交易请求都要到这里来处理。
讲了半天淘宝,回到正题“12306”。我以北京西到深圳北的G71次高铁为例,它有17个站,3种座位(商务、一等、二等)。表面看起来,这不就是3个商品吗?G71商务座、G71一等座、G71二等座。大部分吐槽的人就是在这里栽第一个跟头的。
实际上,G71有136×3=408种商品(408个SKU),怎么算出来的?请看:如果卖北京西始发的,有16种卖法(因为后面有16个站。以此类推,单以上下车的站来计算,有136种票:16+15+14……+2+1=136。每种票都有3种座位,一共是408个商品。
再看出票时怎么减库存。由于三种座位数是独立的,库存操作也是一样的,下文我就不再提座位的差别,只讨论出发与到达站。另外,下文说的是理论模型,不是说“12306”的数据库就是这么设计的。
旅客A买了一张北京西(01号站)到保定东(02号站)的,那么北京西到保定东这个商品的库存就要减1,同时,北京西到其他15个站台的商品库存也要减1,也就是说,出一张北京西到保定东的票,实际上要减16个商品的库存。
这还不是最复杂的,如果旅客B买了一张北京西(01号站)到深圳北(17号站)的票,除了北京西到深圳北这个商品的库存要减1,北京西到保定东、石家庄、郑州、武汉、长沙、广州、虎门等15个站台的商品库存也要减1,保定东到石家庄、郑州、武汉、长沙、广州、虎门、深圳北等15个站台的商品库存要减1……总计要减库存的商品数是16+15+14+……+1=120个。
再想象一下,8万人举着钱对你高喊:卖给我。你好不容易找到一只手,拿了他的钱,转身找120个同事,告诉他们减库存,而这120个同事也和你一样被8万人围着;也和你一样,每卖出一个商品要找几十个人减库存……这就是“12306”动态库存的变态之处。比你平时买东西的任何网站的库存机制都复杂几十甚至上百倍。
空谈技术无益解决问题
防软件抢票,也不是加个图片验证码那么简单。图片验证码有6种机器暴力破解的办法,抢票插件用的是OCR识别。
就算采用了机器完全不可能识别的验证码,也防不住社会工程学的破解办法。
以上讨论只是把“12306”当成和淘宝一样没有历史包袱从零起步的交易系统,实际上它不是,它后面的票池还有电话售票、火车站售票、代售点售票等多个传统渠道要服务。除了客运服务,“12306”还有全国最大(很可能也是全球最大)的大宗物资货运系统。架空政策(包括定价政策、警方打击“黄牛”政策、身份验证政策)谈技术,是不可能解决春运抢票困局的。
(原作者为“代码狗”,本文有删节,标题为编者所加)
专家评说
现实情况可能更复杂
“这篇文章所有的分析都是站在普通读者能接受的、常识的基础上展开的,在逻辑上没有什么问题,在对系统的分析上也基本成立。‘12306’崩溃的情况现在已经不多见了,在访问量如此之大的情况下这确实是非常难得的。比如前不久有一个比较出名的电商网站因为访问量太大崩溃了,而它的访问量和‘12306’其实是没办法比的。”广州某金融公司电商技术负责人李松在接受采访时表示。
李松认为,“12306”在售票过程中所要处理的“秒杀”式营销确实在技术上难度很大。“稍微有一个细节处理不好,就容易出现进不了页面、不能点击购买、购买成功却付不了费、付了费没反馈等情况,一般的电商网站都会遇到这样的问题,作为‘庞然大物’的‘12306’当然更难幸免,我们不能过分苛求。解决好这些问题需要时间和资金、技术的投入,必须经过调整、磨合,不是短时间内能办成的。”
对于“代码狗”的分析,大多数受访的业内人士都认为其角度、逻辑比较客观。
资深电脑工程师王谢认为,“代码狗”为了行文方便,实际上简化了“12306”的购票模型,真正的“12306”系统比他说的要复杂很多。“(他)没有考虑每张车票的座位属性,这是很关键的,否则旅客好不容易挤上车,就要开始抢座了。事实上,应该考虑这样一个方案:以文中列举的G71次列车来看,假设该车次总共有M个座位,共16个站段,那就是16×M个商品,而不是简单的408个。”
技术手段并非万能药
“‘代码狗’的分析有些道理,但是有些问题铁路部门也有不可推卸的责任。比如最近‘四喜丸子’实名登车、‘路过打酱油’也能买到车票等等。此前很长时间铁路的购票系统对购票者身份证号码没有任何验证措施,随便输入一个虚假身份证号也能买票,‘实名制来得太晚’。”——北京某网络公司资深系统技术专家陈亚飞告诉记者,“对于‘12306’网站的问题,只有公开方案设计,或者最起码在较大的专业人士层面公开自己的方案设计,争取更多大脑的参与,才可能发掘出更好的方案。而这正是‘12306’所缺乏的。”
有些技术专家将“黄牛”炒票行为屡禁不止的责任也归咎于铁路部门。
“对于普通的购票旅客来说,当初到火车站排队买票,常被‘黄牛’插队,轮到旅客时票已经卖完了。现在在‘12306’买票,又被‘黄牛’用抢票软件插队,一开卖才几十秒,稍微输错个验证码再进去,票又没了。那么多‘黄牛’用软件抢票,售票系统却没有对此做出有效应对,应该在技术上对外挂应用程序进行更细致的甄别和防范。”广州电脑工程师车宙表示。
知名互联网专家信海光也认为,现在“12306”的基本策略是“水来土掩”,对网络“黄牛”的活动都是采取事后措施补救,“应当加强技术建设,填补漏洞,提前做好各种应急预案”。
对于这个问题,中国铁路总公司副总经理胡亚东在接受记者采访时表示:“今年铁路总公司更新了‘12306’网站版本,采取了一些封堵应对措施,铁路公安部门‘猎鹰战役’也破获了一批案件。下一步,还要和国家身份认证权威部门进行互联网的身份认证联网,近日正在调试,很快就可以上线运行,可以在更大程度上防范‘黄牛’。”