话点 言语峰

12306与淘宝的技术难度对比

转载文章

向好友分享此话题 5人分享

分享话题后, 信息将显示于动态内。

12306首秀被骂的狗血喷头后铁道部找来IBM、阿里巴巴等大企业要解决方案,给出的条件是资金管够但是问题得解决。几大企业最后都拒绝了。12306开始自己尝试解决问题。他们发现市面上可以买到的成套解决方案都不足以应付春运购票负载,所以只能自己改进已有的数据库。以前12306用的是小型机,发现性能严重不足,遂改用x86系统+linux平台。最后他们的核心系统用了十几个节点的多路Xeon E7,每个节点配1TB内存,数据库全部在内存中运行。2013年春运,12306系统峰值负载11万tps,与2012年淘宝双11活动峰值负载相当,新的系统基本经受住了考验。

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

40条回复

1
二丁目拓

昨天试了下刷票软件发现真尼玛恐怖,再牛逼的硬件系统都没用,挡得住全世界五分之一的人民玩DDOS?

2
消音弥散

资金管够,结果阿里巴巴拒绝了?

3
棉花土土

别指望摩尔定律了,现在CPU比苹果还保值呢

4
阿芙拉

除非把全国的春节按省份错峰过,否则12306就RIP吧……淘宝双11卡成啥样,12306的服务器能比淘宝耐操两倍?

5
汀沙云树

说少一点3亿人在同一个时间段对某个网站进行手动/脚本 DDoS攻击
哪家服务器扛得住?

6
irus。

@消音弥散 跨越在台上时一直在搞网络购票系统,搞了三年还是五年都没搞定,不敢上线……

7
海Nereida

这个能不能算目前为止互联网最大最长的DDOS攻击了……
建立防火墙,屏蔽抢票软件IP能不能解决问题?

8
幻云矢

取消网络订票大家用回电话可不可以……

9
LoLAe

访问量解决不了是技术问题;插件屏蔽不了,难道还是技术问题?

10
卡碧尼

为什么火车票不能像机票一样提前好几个月就能定?

11
茄汁鯖魚

@卡碧尼 什么时候开放买票, 什么时候被抢吧.

12
Chemist

@卡碧尼 因为飞机一般是2个点对点,中途最多换一班。而火车一趟下来站点少的10来个,多的20几个,这里的问题复杂度高无数倍。

13
CockWizard

唯一的解决办法确实是只有内存数据库,
我觉得后台穷举订票规则,或者预制热门线路查询也许能解决一部分查询压力,但是不是有篇文章说过,其实最终的的压力来自铁道部的票务结算接口,以前只是为各个订票点服务的,现在是直接DDOS,所以扛不住。这就不止12306的问题了,铁道部的票务系统就得先大改。

14
Kioo

服务器实在跟不上的话
弄个roll点制度吧
超过负载访问人数的话 按负载/实际访问人数进行roll点放行
一定程度上杜绝抢票软件 大家来拼RP

15
Silvara澈

车票没有座号,要到站后领取写有座位的登车牌。这样的话一列车就不用记录几千个座位在各个站点之间的有无情况了,而是只用记录各个站点间的余座总量

几千件商品,变成了一个能卖几千次的商品,就能大大减轻购票过程中的查询负担

16
图画

像中航信那样专门成立一个集团公司,上大机,甚至春运期间直接包场国家级计算中心,然后延长提前预定时间。

17
UF

楼主贴的这段漏了很大一部分
关于查询与订单,对系统性能要求的巨大差异
查询基本上只需要缓存服务器就可以了
但是下订单就存在修改数据库,处理并发需求,订单锁,等一系列既复杂,又要求实时性的操作

18
Wildorld

解决地区发展不平衡是最终办法。没有好大学的地方搬个好大学过去,经济不发达的地区开放博彩和色情,迎刃而解啊。

19
黑谷山女

@CockWizard 内存数据库 好危险啊

20
阿橙橙

每年临近春节都有抢不到票又脑子不好的跳出来说“这要是淘宝早就搞定了”

21
伊西多拉

@幻云矢 你以为电话不会占线么……

22
Leelulu

@Silvara澈 每个站点都有乘客下车,然后又有新的乘客上车。

23
Herne

我觉得可以一部分车次提前俩月开放申请,提前一个月通知你,你的购票申请有没有通过……这样应该能好点吧
提前多久申请都一样,到时候随机发票
不把这DDOS攻击的高峰给错开就是无解的

24
七角茴香

@Silvara澈 感觉上行不通....首先吧,假设一趟车有一千人,所有人都要去排队拿个登车牌,一晚上大点的车站像是广州二十趟车是有的吧...足够水泄不通了...就不说无座票还有多少人了...
其次,硬卧分三档...同样的票价下,谁不愿意睡下铺啊...
最后,一趟车到不同的地方票价不一样...还是要查的...所以这样不行啊..

25
Raeine

改变业务流程就行, 所有火车票实现taobao/EBAY 2手那种竞拍机制即可, 价高者得;
拍不起火车票的就别回家, 竞拍价格超过机票, 就去买机票;
这样就不会大家赶时间进行DDOS攻击了, 反正肯出钱的笃定的加价。

26
恶魔露露

把开售时间再细分一下行不行?一个小时一批的改成15分钟一批行不行?或者10分钟?

27
Monse

天猫魔盒秒杀是,淘宝一样卡。你觉得秒杀火车票的人,比秒杀魔盒的人多多少?

28
柚吉

@Raeine 真敢这么搞那些外来务工人员立刻就把铁轨给你扒了信不信

29
Danny

@LoLAe DDOS是无解的,现在针对DDOS的措施都只能减低影响,而且抢票软件用的是使用者的ip不能封,一个公司有人用了抢票,整个公司的人都不能买票,答应吗?

30
子里奈

@Kioo ROLL点还不如排队

31
前田墩子

提前1-2个月提交购票请求,到时候象彩票一样开票,抽中了的就发通知交钱,30分钟不交钱就把票收回再分配......怎么招也比现在好多了
刷了3天票一张也没刷着的苦逼在此........

32
梵树

@恶魔露露 怎么分开呢?
是不同车次放票时间分开,还是同一车次的票分批放出?

33
闻花未名

已经算过了, 2000多趟, 2000核就搞定了 撑死500台机器
按大阿里的机器量, 站站分一个核都够了

34
顾盼欲语

@二丁目拓 快上量子脑

35
Cleva

我觉得可以从非硬软件来解决

今天一群人11点抢票,瞬间爆了

如果是从半夜12点开始,每隔几分钟放部分票。
会不会瞬间压力小一些。

甚至按照不同铁路段/不同列车,分布服务器。从不同入口进入的方式强制分流人群。

36
Denne

@Monse 胡说。秒杀和普通的下单根本不是一组服务器,能卡才怪

37
Caramel

我来说吧。取消春节假期。

38
VIRIDIA

@LoLAe 我这里有两个http请求,你告诉我哪一个是高尚的,哪一个肮脏的?

39
安非它命

呵呵,平时12306从来不卡,春节前也没有卡得很夸张…只有真的节点那几天卡得不行…淘宝不也这个德行

40
醒醒′

干脆打回计划经济时代简单粗暴
每个地区按指定时间区块的运能发车票,发到谁就是谁,卡死时间爱回不回。
车站站好解放军,不听话上枪托。
怎么样 够不够毛味?

邀请好友加入启维

输入想邀请的好友邮箱, 启维将第一时间发送邀请码

好友1
好友2
好友3
好友4
好友5

邀请邮件已发送, 感谢您使用启维!