12306的实时票务系统有多厉害啊(12306的实时票务系统有多厉害呀)

网友提问:

12306的实时票务系统有多厉害?

优质回答:

以前没有多么厉害,也是经过不断迭代开发才走到了今天。那么,它是怎么成为今天这样一个超级系统的呢?

从本质上讲,12306网站是一个票务电子商务网站。

2010年春节,12306官网正式上线运行,平台上线后,因为访问数据量过大,造成大量的用户无法购买,从普通的网民到程序员都狂喷12306的系统垃圾。

12306票务系统一期的开发费用合计3个亿(含硬件),这套系统需要结合铁道部信息数据库,结合电话售票、窗口售票等相关的数据,所以,12306不是一个简单的在线交易系统,而是一个全国最大的大宗物资货运系统。

12306的技术确实非常难解决,利用现有的分布式数据库、缓存、负载均衡技术,已经不能满足需求。

12306在春运的时候,日均有297亿次访问量。天量的火车票查询是影响12306性能的重要原因之一,大概占了90%以上的访问流量。更棘手的是:峰谷的查询有天壤之别,几乎没有办法在成本和并发能力之间做一个好的平衡。

2015年阿里云与12306进行合作,免费给12306提供技术支持,把12306网站的查询访问放在了阿里云上。

一般而言,查询是多数售票系统访问量最大的部分,它的请求次数一般占到整个网站的85%以上。交易相关的过程中,都会多次提交查询请求,这让余票查询系统成为整个系统的压力集中地。

所以,需要把余票查询模块和12306现有系统做分离,让其具备独立部署的能力;在云上独立部署一套余票查询系统,这样子12306和云上都有了一套余票查询系统,调度更为灵活。

经过技术改造的12306系统,年售票量已超过35亿张,是世界上规模最大的实时票务交易系统。平均每日发售车票达937万张,最高日售车票1135.7万张,高峰时每秒售票量达700张,已占到了总销售票量的80%。 高峰日的网络页面浏览量超过1500亿次,相当于全中国人每人每天访问了票务页面100多次。

如今的12306已成为中国最牛的电商网站,能让上亿人每天盯着网站使劲刷,就为了买到票,很多不惜花钱买软件刷,除了12306,基本也没谁了。淘宝、京东、亚马逊直接秒杀!

其他网友回答

怎么不复杂?比如北京到上海某列车有一千个座位,中途会路过十个站,比如石家庄,郑州,徐州,蚌埠,南京等等。如果有个人买了一张北京到上海的票,那么就还剩999个座位也就是999张票对不对,同理,石家庄到上海就只剩999张了。但要考虑中途上车并且中途下车的,比如另一个人从石家庄上车然后从徐州下车,这时候北京到上海还剩998张但是南京到上海却依然还有999张,

比如北京到石家庄1000张,北京到郑州1000,北京到徐州1000张。接下来,石家庄到郑州1000,石家庄到徐州1000,石家庄到南京1000,等等几十种组合。每种组合1000张,只要其中一个组合的票少一张,会影响或者不影响其他组合的票数。

这种还只能算简单的设想,要是全国人民一下子这么进来买,那就更复杂了,12306其实相当于每时每刻都在承受着比淘宝双11更大量的冲击,服务器适中处于负荷状态。

2018年时12306曾经公开过相关的数据:日均PV达到556.7亿次,峰值时段PV达到813.4亿次,每小时最高点击量59.3亿次,平均每秒164.8万次。2019年春运时这个数据就更高了,高峰时段点击量1400亿次,高峰日点击量达2000亿次。

这种海量的数据吞吐,全国范围内应该是没有网站或者APP能达到,况且在这些请求次数的背后还得计算出来,那么这种情况下,票池怎么维护?等等各种问题。

从列车运行的时刻开始,一辆列车晚点,调度系统就开始出现调度和预测,凡是经过该列车轨道的相应列车全部晚点等候,或者先行不等候,同时列车与列车之间的距离,时间,必须达到一定标准,否则就会出现相撞事故,全国的动车组和线路图多到惊人,首先就要将这些数据进行统一归纳进行整理,路线与路线交错,列车与列车之间交叉运行,列车每到一个站必须将数据回传,就算晚点了,还得针对每一辆晚点的列车计算出晚点时间和预计到达时间,这些全部是动态计算出来的数据。抛开这些不说,春运期间的车票预售能达到未来三个月,期间可能有各种各样的突发性情况,我想问,你怎么保证在春运的预定时间里保证列车准确到达目的地的时间精度?数以万计的铁路如何维护,列车运行时相应的轨道如何精确的自动变道?如果列车又晚点了,那么后续列车的轨道又如何动态变道?光是处理列车与轨道之间的协调性就是一个很大的问题,设计的算法要能应对各种突发事件,你能设计出这样的调度算法吗?12306的系统比你想象的复杂的多,线路与线路之间的关系,列车与列车之间的关系,线路与列车之间的关系,你理得清吗?别以为12306就是一个售票系统,整个系统契合在一起就是一个天大的工程。天真的以为就是几句增删改查,多线程,分布式事务,分布式锁这么简单。

车辆调度后才能进行售票,如果车辆晚点,未来预售的票全部往后延迟,否则就会出现你买了票去坐车,大厅却告诉你,由于车辆晚点,导致你的列车重排到了明天,12306铁路网的几大系统无缝集成,内部系统及其复杂,单单一个预售未来三个月的功能就要处理N多个问题,如果各个系统不能协调工作,你上哪买票?买到票了车都重排了你上哪坐?全国各地的站点数以百万,铁路网数以万计,12306本就不是一个单单的售票系统,它是一个庞大的系统暴露给外部的接口,集群负载均衡,高并发,锁只不过是保证售票系统正常运行的一种手段。而且这种手段的解决方案成熟,成本低廉。别以为12306是个售票系统,内部的算法和处理逻辑比想象的不知道要多高。

另外,引用一些回复过我的网友的话:"哈哈 做为曾经的同程抢票数据供应商 可以很负责任的告诉你 我们五千多台服务器同时对12306发下单,在我了解中 我们这样的供应商差不多一千多家 还有各种多线程抢票软件 [泪奔] 12306:我太难了"。

其他网友回答

如果给淘宝做。,会更好的!

其他网友回答

能同时能那满足13亿的出行需求,你说有多牛皮