请别再吐槽了12306站已接近技术极限收购

2020-05-21 04:34:44 来源: 柳州信息港

请别再吐槽了:12306站已接近技术极限

淘宝技术的确比“12306”强大很多倍,淘宝现在的系统也是花了10倍于“12306”的钱、时间和人力才做起来的。根本原因还是铁路运力不能满足春运需求,淘宝也解决不了这个问题。

我曾在淘宝写过一段时间代码,2012年在一家百强民企做电商副总,当时在极其艰苦的条件下带队开发了一个B2C站,走支付宝和银联支付通道,年营业额千万级(固然实在太少了,我只是说这个站投入了实际的运营)。

也就在那个时候,我对12306嗤之以鼻,觉得他们做得太烂了,认为自己能带队花几百万元用半年时间做个好的出来。因而我狂妄地想做一个开源的订票系统给他们。我花了一个星期时间思考建立数据模型,思考到库存这一步的时候,我才发现,12306的库存复杂性比淘宝、京东高很多倍,运算量也大很多倍。传统的分布式数据库、缓存、负载均衡技术并不能恰好满足12306的需求。

淘宝技术的确比12306强大很多倍,淘宝现在的系统也是花了10倍于12306的钱、时间和人力才做起来的。根本原因还是铁路运力不能满足春运需求,淘宝也解决不了这个问题。

12306这1年来进步非常大。从前端动画验证码、分时段抢票,到后端去小型机、虚拟化、内存数据库的应用。可以说,这是中国官方部门做得最强大的站(电商系统)。至于12306一期工程3个亿(含硬件)贵不贵我不评价,我只提供一个数字供参考:百度一年的研发费用(不含硬件)是10亿元,这来自百度财报。3亿元看起来好大一个数字,真用到超大型的电商系统、搜索引擎系统里面,其实也不算天文数字了。

你不知道的秒杀

为何秒杀压力大,为何12306的动态库存很复杂?

先说秒杀。

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

实际上,我也参加秒杀了,那天的题目特别简单请输入汉字的拼音首字母,我5秒内答题终了并提交订单,结果系统告诉我排队的人太多,挤不进去,并提示14秒后重试。人太多就是由于题目太简单了,门槛越低,5秒内挤进去的人也越多,如果题目换成2克浓度为3%的U235在大亚湾核电站能发多少度电,5分钟以内都不会有1万5千人跟我竞争。

我想,14秒以后那还有我的事呀,因此重新答题秒杀,结果出现了服务器毛病的页面。反复刷新几次,秒杀就已结束了。

淘宝是什么技术水平呢,淘宝有最少4000名技术人员,最少4万台服务器(这是两年前的公开数据)。2013年11月11日成交额351亿元,2012年全年成交额超过1万亿元。

淘宝具有各种自主研发团队:服务器、交换机;操作系统、Web服务器、Java语言虚拟机、数据库、负载均衡器、Java运行容器。淘宝还有数不清的开源项目和中间件,如高性能Java通讯中间件HSF、分布式数据库中间件TDDL、异步消息系统notify等等。

以淘宝这样的技术水平,都还不能做到秒杀时让每个用户都没有拥堵感,为何?

一是要尊重物理原理,1台服务器1秒钟能承受的计算量是有极限的,任你怎样优化,采取多高效的算法和编程语言,都突破不了某个极限,比方说汽车发动机驱动的F1赛车至今也不能突破400千米的时速。

二是要斟酌经济效益,11黄金周的时候,北京主城区到八达岭长城的路堵得严严实实,但不能由于黄金周的高峰,就把这段路修成长安街那样10车道的高速公路,否则花费天文数字(12306那3个亿大概只够修千米)修了一段路,平时晒谷子?

淘宝目前的硬件和带宽数量,已超出平常运营的需求了,目的就是留出相当大的余量给大促销。

再说动态库存。

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

很多人都知道,比秒小的时间单位还有毫秒、皮秒、飞秒。但交易系统登记一个交易可不像电子绕着原子核跑一圈那末简单,它要做这些事:检查是不是歹意访问、取到系统时间、取到顾客默许收货地址、核对顾客秒杀资历、生成订单号、把顾客ID系统时间订单号收货地址写入订单系统、扣除顾客天猫积分、商品库存减1、给顾客打标记(每人只能秒一个)等等。

每件事都要花费毫秒级别的时间,这些操作加起来的时间可能是接近1秒级别的,但由于淘宝的服务器比较强悍,而且采用了分布式和集群技术,结果比1秒理想一点。但即使有1万台服务器,也不能把这个时间稀释成万分之一秒,因为,商品只有一种,它有15000个库存,对应的数据库记录只有一行,所有的交易要求都要到这里来处理。

能不能把这15000个拆分成5000个商品并分配到5000台服务器上呢?那样不就可以5000台服务器同时处理了吗?

答案是不能,首先,5000个商品,意味着有5000个商品详情页,5000个购买按钮,这对前期的营销、引流是个灾害。基本上就没法做引流入口了,明显这违背了商业管理原则,人为增加了信息混乱程度。

其次,天猫魔盒秒杀也不是啥大事,即使按官方标价399元来计算,也就600万元的交易。如果600万的交易要花费那么大的配套本钱,就太不划算了。

再次,淘宝有十几亿商品,这十几亿商品的展现交易和管理,本来就是散布到上万台服务器上去了。没有必要再把每个商品按库存拆成多个商品了。

这789人抢到了,还不一定会付款,所以就又带来定单取消重新恢复库存的问题。还有想要的消费者们,会认为还有机会,继续在前台刷一会儿,最终这个秒杀会被热情的消费者们猛刷30秒到1分钟。

12306的变态库存

好了,讲了半天淘宝,回到正题12306我以北京西到深圳北的G71次高铁为例,它有17个站(北京西是01号站,深圳北是17号站),3种座位(商务、一等、二等)。表面看起来,这不就是3个商品吗?G71商务座、G71一等座、G71二等座。大部分吐槽的人就是在这里栽第一个跟头的。

实际上,G71有1363=408种商品(408个SKU),怎样算出来的?请看:如果卖北京西始发的,有16种卖法(由于后面有16个站),北京西到:保定、石家庄、郑州、武汉、长沙、广州、虎门、深圳分别都是一个独立的商品。

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

再看出票时怎样减库存,由于商务、一等、二等3种坐位数是独立的,库存操作也是一样的,下文我就不再提坐位的差别,只讨论动身与到达站。另外,下文说的是理论模型,不是说12306的数据库就是这么设计的。

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

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

固然,也不是每一张票的库存都完全这样实时计算,可以根据往年的运营情况,在高峰时段预先对车票做一些分配,比如北京到武汉的长途多一点,保定到石家庄的短途少一点。我没有证据证实铁道部门这样做了,但我相信,在还没有12306站的时候,就有这类人工预分配的策略了。

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

空谈技术无益解决问题

防软件抢票,也不是加个图片验证码那么简单。图片验证码有6种机器暴力破解的办法,抢票插件用的是OCR辨认。验证码设置得复杂一点行不行?有人又要提意见了:这只是便宜了大学生和办公室白领,农民工连26个字母都认不齐,怎样弄?弄动画验证码吧,也有人说,视力不好的人怎么办?最后验证码被搞得很简单,皆大欢喜。其实最高兴的是开发抢票插件的公司。

<人们首先想起李若彤p>就算采取了机器完全不可能辨认的验证码,也防不住社会工程学的破解办法。招募一堆吧打游戏的青少年朋友,每成功输入50个验证码给1块钱,或等值的虚拟货币、游戏设备,我保证想赚这个钱的人数不胜数。

这点钱对转卖车票的利润而言,是可以接受的本钱。有没有什么技术可以防住社会工程学的破解办法呢?能防住吧青少年的验证码只有2克浓度为3%的U235在大亚湾核电站能发多少度电。

以上讨论只是把12306当作和淘宝一样没有历史包袱从零起步的交易系统,实际上它不是,它后面的票池还有售票、火车站售票、代售点售票等多个传统渠道要服务。

除客运服务,12306还有全国最大(极可能也是全球最大)的大宗物资货运系统。排挤政策(包括定价政策、警方打击黄牛政策、身份验证政策)谈技术,是不可能解决春运抢票困局的。

还有人说,KFC的食品可以单卖,也可以卖套餐,为何没像我一样搞出这么多SKU?那是由于,KFC门店的人肉查询频率非常低,没必要为了优化查询性能把库存结构设计成那样。(原作者为代码狗,本文有删节,标题为编者所加)

专家普遍认为代码狗所言在理:12306已接近技术极限

弥补春运运能尚无有效神器

2014年春运大幕已开启,络和购买火车票平台12306再次成为社会关注焦点。

自从12306诞生之日起,急着回家过年的人们已不再需要卷着铺盖、带着干粮去火车站排队买车票,线和线承载了绝大部分希望。但是,12306并不像人们所期待的那样给力,漏洞多多、时常瘫痪,炒票的黄牛转战络依然活跃

近日,一名自称前淘宝技术人员,且曾在某民营公司做过电商副总的名为代码狗的友在上发帖,详细分析12306站的技术特点和它所面临的不可能完成的任务,直言这个官方站已穷尽所能试图解决购票困难,但没法单纯依靠技术手段完全填平铁路运能与春运需求之间的鸿沟。

这引发了人们对12306的新一轮审视。代码狗所言有没有道理?12306平台从技术角度看到底处于怎样的水平?羊城晚报就此采访了多位专家、电商技术人员和铁路部门工作人员。

现实情况可能更复杂

这篇文章所有的分析都是站在普通读者能接受的、常识的基础上展开的,在逻辑上没有什么问题,在对系统的分析上也基本成立。12306崩溃的情况现在已不多见了,在访问量如此之大的情况下这确切是非常难得的。

比如前不久有一个比较出名的电商站由于访问量太大崩溃了,而它的访问量和12306其实是没办法比的。广州某金融公司电商技术负责人李松在接受羊城晚报采访时表示。

李松认为,12306在售票进程中所要处理的秒杀式营销确切在技术上难度很大。稍微有一个细节处理不好,就容易出现进不了页面、不能点击购买、购买成功却付不了费、付了费没反馈等情况,一般的电商站都会遇到这样的问题,作为庞然大物的12306固然更难幸免,我们不能过分苛求。解决好这些问题需要时间和资金、技术的投入,必须经过调剂、磨合,不是短时间内能办成的。

对代码狗的分析,大多数受访的业内人士都认为其角度、逻辑比较客观。

资深电脑工程师王谢认为,代码狗为了行文方便,实际上简化了12306的购票模型,真正的12306系统比他说的要复杂很多。(他)没有考虑每张车票的坐位属性,这是很关键的,否则旅客好不容易挤上车,就要开始抢座了。事实上,应当推敲这样一个方案:以文中罗列的G71次列车来看,假定该车次总共有M个坐位,共16个站段,那就是16M个商品,而不是简单的408个。

技术手段并不是万能药

代码狗的分析有些道理,但是有些问题铁路部门也有不可推辞的。比如最近4喜丸子实名登车、途经打酱油也能买到车票等等。

此前很长时间铁路的购票系统对购票者身份证号码没有任何验证措施,随意输入一个虚假身份证号也能买票,实名制来得太晚。北京某络公司资深系统技术专家陈亚飞告知羊城晚报,对12306站的问题,只有公然方案设计,或者最最少在较大的专业人士层面公然自己的方案设计,争取更多大脑的参与,才可能发掘出更好的方案。而这正是12306所缺少的。

有些技术专家将黄牛炒票行为屡禁不止的也归咎于铁路部门。

对于普通的购票旅客来讲,当初到火车站排队买票,常被黄牛插队,轮到旅客时票已卖完了。现在在12306买票,又被黄牛用抢票软件插队,一开卖才几十秒,略微输错个验证码再进去,票又没了。那么多黄牛用软件抢票,售票系统却没有对此做出有效应对,应当在技术上对外挂应用程序进行更细致的甄别和防范。广州电脑工程师车宙表示。

知名互联专家信海光也认为,现在12306的基本策略是水来土掩,对络黄牛的活动都是采取事后措施补救,应当加强技术建设,弥补漏洞,提早做好各种应急预案。

对这个问题,中国铁路总公司副总经理胡亚东在接受采访时表示:今年铁路总公司更新了12306站版本,采取了一些封堵应对措施,铁路公安部门猎鹰战役也破获了一批案件。下一步,还要和国家身份认证权威部门进行互联的身份认证联,近日正在调试,很快就可以上线运行,可以在更大程度上防范黄牛。

小孩不爱吃饭怎么办
孩子吃饭不消化怎么办
宝宝吃东西不消化怎么办
宝宝健脾胃可以用什么药
本文标签: