为什么12306、电信运营商等网站那么难用?

心弦指间


说句公道话,访问量真的是硬件问题。

任何跟负载有关的事儿,乘以上亿的中国用户,对服务器都堪比核打击。。。

尤其是春运期间, 12306 的压力大的一批。

对服务器来说,订火车票是件很凶残的事——

首先身份验证,防范机器人等等扣款等等操作就不提了 ~

库存这个事儿,火车票还真不好算,因为火车是一站站停靠的。

假设有一班 南京 - 上海 - 杭州 的列车,如果有一个人买了 “ 上海 - 杭州 ” 的车票,那么 “ 南京 - 杭州 ” 的票也得减库存。

也就是说,你这边一个火车票结算了,其他路线火车票也得检查一下余票,一张票就会产生好几次运算过程。

再乘一下春运时的流量。

嗯。。。服务器没炸也是个奇迹了


差评


12306首秀被骂的狗血喷头后铁道部找来IBM、阿里巴巴等大企业要解决方案,给出的条件是资金管够但是问题得解决。几大企业最后都拒绝了(其中阿里巴巴最后负责了排队系统的建设)。12306开始自己尝试解决问题。他们发现市面上可以买到的成套解决方案都不足以应付春运购票负载,所以只能自己改进已有的数据库(注:其实是改用

VMware SQLFire/GemFire

,这里我之前理解错误)。以前12306用的是小型机,发现性能严重不足,遂改用x86系统+linux平台(原平台为

HP Superdome

小型机,UNIX系统,

Sybase ASE

数据库)。最后他们的核心系统用了十几个节点(现在应该是17节点)的多路Xeon E7(具体几路待考),每个节点配1TB内存,数据库全部在内存中运行。2013年春运,12306系统峰值负载11万tps,与2012年淘宝双11活动峰值负载相当,新的系统基本经受住了考验。

我这两天也在思考这个事,我想以这个事来粗略地和大家讨论一下网站性能的问题。因为仓促,而且完全基于本人有限的经验和了解,所以,如果有什么问题还请大家一起讨论和指正。(这又是一篇长文,只讨论性能问题,不讨论那些UI,用户体验,或是是否把支付和购票下单环节分开的功能性的东西)

另外,关于第三方合作对方给出的信息是IBM、Oracle、Sybase全部不能满足要求,主要是这些厂商的方案部署以后,要升级时不能做到不停机灵活扩展。也就是说,IBM没有做到是他们技术不足“搞不定”。阿里巴巴参与了改造,负责了排队系统。此外,虽然后端经受住了压力,前端却如大家所看到的那样还是频频卡死。到底卡死的原因是前端水平太低还是访问压力太大,暂时没有可靠的信息供判断。

淘宝的问题是其系统架构是分散度较高的,各个订单之间关联度不大;而12306每出一张票都要对全线路做数据更新(因为一条线路存在多个站点),因此系统负载相较淘宝来说集中很多,直接搬淘宝的方案也无法解决问题。淘宝的应用类型决定了阿里巴巴可以通过部署大量的服务器来分散压力,但12306就不行。其实他们的核心系统的硬件成本不过数百万,不是他们不想采购更多服务器,而是买更多的服务器也没什么用途。最后,在经过软件层面的优化之后,12306的瓶颈其实是核心节点的CPU、内存性能。但是这个性能的提升不是朝夕的事情,而是受限于摩尔定律,基本上每两年才能翻一倍多些。(这段话是我自己的分析,不过现在12306的后端数据库系统应付现有需求已经够用了)

补充:关于座位实时复用,我看到的信息明确表明12306出票时,每出一张区间票都要实时调整该线路其他受影响区间段的余票数量,且这是很大的压力来源;另外,对方表示所使用的GemFire数据库与简单的memcache/redis数据缓冲不同,有着本质区别。

任何技术都离不开业务需求,所以,要说明性能问题,首先还是想先说说业务问题。

  • 其一有人可能把这个东西和QQ或是网游相比。但我觉得这两者是不一样的,网游和QQ在线或是登录时访问的更多的是用户自己的数据,而订票系统访问的是中心的票量数据,这是不一样的。不要觉得网游或是QQ能行你就以为这是一样的。网游和QQ 的后端负载相对于电子商务的系统还是简单。
  • 其二有人说春节期间订火车的这个事好像网站的秒杀活动。的确很相似,但是如果你的思考不在表面的话,你会发现这也有些不一样。火车票这个事,一方面会伴随着大量的查询操作,更BT的是下单的时候需要对数据库很多的一致性的操作,一方面是从起点到终点各个分段票的一致性,另一方面,买的人路线、车次、时间选择有很多,会不停地改变下单方式。而秒杀,直接杀就好了,没有那么多查询和一致性的问题。另外,关于秒杀,完全可以做成只接受前N个用户的请求(完全不操作后端的任何数据, 仅仅只是对用户的下单操作log),这种业务,只需要在内存cache中放好可秒杀的数量,还可以把数据分布开来放,100商品,10台服务器一台放10个,无需在当时操作任何数据库。可以订单数够后,停止秒杀,然后批量写数据库。而且秒杀的商品不多。火车票这个不是像秒杀那么简单的,春运时间,几乎所有的票都是热门票,而且几乎是全国人民都来了,而且还有转车业务,多条线的库存都要做事务操作,你想想吧,这有多难。(淘宝的双十一也就3百万用户,而火车票瞬时有千万级别甚至是亿级别的)(
    更新:2014年1月11日:来了淘宝后,对淘宝的系统有了解,淘宝的秒杀活动,本质上是用输验证码并在CDN上把用户直接过滤掉了,比如:1千万个用户过滤了只剩2万个用户,这样数据库就顶得住了)
  • 其三有人拿这个系统和奥运会的票务系统比较。我觉得还是不一样。虽然奥运会的票务系统当年也一上线就废了。但是奥运会用的是抽奖的方式,也就是说不存在先来先得的抢的方式,而且,是事后抽奖,事前只需要收信息,事前不需要保证数据一致性,没有锁,很容易水平扩展。
  • 其四订票系统应该和电子商务的订单系统很相似,都是需要对库存进行:1)占住库存,2)支付(可选),3)扣除库存的操作。这个是需要有一致性的检查的,也就是在并发时需要对数据加锁的。B2C的电商基本上都会把这个事干成异步的,也就是说,你下的订单并不是马上处理的,而是延时处理的,只有成功处理了,系统才会给你一封确认邮件说是订单成功。我相信有很多朋友都收到认单不成功的邮件。
    这就是说,数据一致性在并发下是一个瓶颈

  • 其五铁路的票务业务很变态,其采用的是突然放票,而有的票又远远不够大家分,所以,大家才会有抢票这种有中国特色的业务的做法。于是当票放出来的时候,就会有几百万人甚至上千万人杀上去,查询,下单。几十分钟内,一个网站能接受几千万的访问量,这个是很恐怖的事情。

    据说12306的高峰访问是10亿PV

    ,集中在早8点到10点,每秒PV在高峰时上千万。

最后呢?12306还是做到了全球最强的客运票务系统。一贯被认为是因循守旧的国企,在选择技术方案时放弃沿用多年的小型机/UNIX平台去拥抱业界还是新鲜事物的基于x86/linux的大规模分布内存数据库系统,承受住了堪比2012年淘宝双11的压力。在这个领域,12306可以自豪地说自己是做的最好的案例。它还在卡,还是偶尔崩溃,页面还是难看,可是这些迟早会改进。这个过程中也还是会有冷嘲热讽,还是会有所谓的大牛指点江山,但最终解决春运高峰期一天数百万张秒杀售票的,还是12306自己。

所以,走自己的路,让别人去说吧。


洛月踏雪zxd


世上有一种“好”叫,领导,说好就好。很多国企都是屁股决定脑袋,他们不以群众的好为标准,而是以讨好领导为目的。这是主要原因。其次,大部分国有企业竞争不够充分,最典型的就是银行,电信,铁道。银行和电信就那么几家公司,当发现大家都烂,都不要脸时,于是将错就错,随波逐流!铁道更牛逼,都没有人跟我跟我竞争,那么,我的好也是好,坏也是好,不好,您也得用!再次,大部分国企都思想僵化,决策都是领导说了算,而不是产品设计者和消费者说了算!这种特大国企,领导往往上了一定的年纪,他们对新生事物的接受程度较低,思想往往停留在过去。所以做出的网站也比较死板,呆板,难用,毫无创新。第四:服务意识薄弱,造成对网站不够重视,人力,资金投入不足。有些时候,资金也还是够的,可是不见了,你懂的!第五:国有企业既是企业,又是行政单位,没有做到自负盈亏,即便亏了,也不用负很大的责任,这使他们产生了惰性思想,总认为过得去就行了!总而言之,他们不是建不出好网站,而是没有重视,他们的思想还停留在计划经济时代。我们注意到,国家也正在采取措施对国有企业进行改革和完善。像铁道行业,已经变为铁总公司,日常经营逐渐市场化,像银行业,国家批复了很多私有银行,竞争开始充分。当某一天,国企的收入真正由人民群众,由消费者决定时,他们的忧患意识就来了。个人观点仅供参考!谢绝转载!


唐朝凡


为什么12306用户体验那么差,而那些商业网站整天在考虑用户体验?因为他们的实质不一样,就拿天猫来说,他靠什么挣钱?他就是个平台,靠买卖双方的交易来挣钱,如果双十一他瘫痪了,那他一毛钱也挣不到,可铁路是靠12306网站来挣钱吗?他靠卖票来挣钱,试问一下哪怕12306网站瘫痪了,是不是火车票就卖不出去了?照样卖出去,他挣的还是那些票钱,这种本质区别情况下你让铁路花大量的人力、物力去优化用户体验,这不现实。放在私企,这种毫无利益的事他们更不会干,你有见过哪个房地产公司把他们的网站用户体验做的极其好吗?没有人会上他们网站买房,可那些二手房租房网站比如链家等网站就做得好,因为他们是靠这个平台挣钱,道理就这么简单


寻楚之梦



MMirror27551744


1. 国企过去的IT系统是封闭式对内服务的系统,企业文化又以和为贵,所以改进速度,效率,用户体验得分偏低。2. 民企也不是个个做得好,只是做不好的民企很快被竞争对手淘汰了,能有很好口碑的,都是擅长学习和改进的,如支付宝,微信支付等,愿意花很多咨询费来学习改进。3. 客户满意度是一个企业真正的生命线,支付宝,微信,华为等深深明白这个道理。而老国企们对普通客户大爷惯了。在国外五星级酒店,客户的投诉直接记在大堂经理本上,第二天8:00总经理晨会一定会看到,总经理直接会在晨会上骂部门经理,或直接开除部门经理,后面会由部门经理和大堂经理双线跟踪客户再反馈总经理,部门经理既要理顺每天部门运作,又要迅速改善每天问题,而且不能重复犯错,压力很大,丟工作概率极高。


喜洋洋-喜洋洋


很多人也不过是随大众的点评一下,根本没有独立意识。先说12306,春运需要调动30亿人次,地球才70亿人,现实问题导致的数据库结构特性,外加奸诈的黄牛恶意访问,就春运这几天访问量就有淘宝+亚马逊+谷歌+百度总和。毕竟当年IBM也参与过这个项目招标,要价10亿美元不是胡乱报的。最后国内公司5000万拿下来了,谁说自己5000万能做好就去北京试试看,传奇等你谱写。

银行,不说国资的,就是中信,浦发,平安,光大这些全民营银行,哪个是花里胡哨的?都跟“经典传奇一刀99级”那画面才叫丰富?银行需要的本来就不是杀马特文化,风险,安全。我想这是做金融的人永远的干爹妈。什么时尚前卫够用就行。
电信运营商这个更滑稽了,流畅度这个没问题,再说界面,它本来就不需要提供多少信息,覆盖区域,基本套餐资费,固网单价资费,包年资费,手机号码资费,个人账户信息,包括余额,历史消费,通话记录,上网记录。也就这些信息,你还想要什么?今天哪条街在维修?今天又有哪几条街的井盖被偷了?今天应聘了哪个高智商美女?你家附近基站用的什么设备?
工业社会下很多人都有不同程度的心理健康问题,这是历史性现象。所以他们提出的问题也是非常可笑的!!!!!!

洋奴都是孤儿


曾经上线的时候很难用。不说体验性,这个众口难调,确实体验性很差,各种验证,各种密码。现在就网速来说,还好了。比如12306春运前上线,直接挤瘫痪,全国怨声载道,后来铁道部,现在的铁路总公司租用了阿里巴巴的云服务器,再也没发生过这种情况。国企繁琐的审批流程和僵硬的管理制度决定了效率和体验性,你不能说国企的管理层学历和水平比私企低,但态度决定了结果。你让通讯和铁路私有化试试,国内的巨无霸私企分分钟把联通,铁总干破产。快递行业已经凸显,EMS还有多少人在用?但偏远地方你还真得用EMS,因为其他快递公司送不到。国企正在不断的改善,越来越重视用户,这是好事,希望大家不要以偏概全,给点耐心,我们国家会越来越好。


风轻云淡_心如止水


BAT他们做的好是因为这是他们的工作,指望这网站赚钱呢,而其他的网站都是一个很小的部门,用来公开数据或者自助服务的,政府部门主要的业务还都是在现实中做的。举个例子,其实BAT就像自己盖楼赚钱,楼有问题了工程师立马就修修补补,让用户满意,否则用户都走了,而其他政府部门只是需要用楼而不需要用楼赚钱,所以不会养那么多盖楼的工程师,所以政府部门的楼有点问题只能比较慢的修修补补,不会像BAT那样养一大批工程师,毕竟政府的网站做的那么好也没有特别大的意义。

再说12306.因为12306网上售票成立不久,这其中的问题比较多也是能理解的,一个12306这其中的道道比淘宝要多多了,毕竟火车票这东西,可以买全程可以买半程,各种情况比较复杂,并且火车票还有高峰期,每年抢票比较厉害,不能因为从售票点转移到网上就能解决买不到票的问题,所以大家都刷票,而刷票就会导致多少人在同时刷,这个峰值会比较高,有时候承受不了就比较麻烦,不说其他就淘宝双十一开始的几分钟大家购买时候付款不也要排队付款吗?火车票同样道理,不足为奇。再强大的网站也禁不住上亿人同时刷不停刷。淘宝也不例外,那为什么12306就不能被原谅呢?并且要想想淘宝每年养上万人的网络工程师队伍,12306可不会专门养那么多人的,只能合作。


小耗子27999482


作为国有企业他们所服务的范围是面对全国性的,标题所说难用应该从哪一方面说清来!如说外观设计来看,应该比普通网站要好,不知道所说的难用是不是说慢、不进去,这个就好解答了:

1、12306、银行、电信等网站他们面对的群里不同,全同有那么多用户,这好比是一对多的服务,所以服务器集群受到很大压力;

2、这些国企单元,他们每花一分钱都得上国家上报,在投次方面确实不如民企,所以先以够用为主,不足再后期改进的方案;

3、在我看来,三个面最难用的应该是电信运营商吧,方案设计不说,但服务的东西没有几个实质的,有了什么问题还是要打电话、去营业厅,官网中一种摆设;

4、个人感觉,难用一词用得有点过了,这个要来个投票,不能以个人的偏出发;


分享到:


相關文章: