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:我太难了” 。
【12306的实时票务系统有多厉害】
我是一名铁路客运人员,干过多年售票工作,你们根本不了解铁路系统的复杂性,铁路系统作为国家大动脉 , 无论从经济还是政治上都要互相协调发展,当年铁路招标 , 包括阿里在内多少公司都不敢也无法接这个活,是我们铁路工程师们一点一点在全国人民的骂声中日以继日建立起来的,每天我们都及时上报工作情况,梳理总结问题,才不停的更新系统,年复一年,日复一日的完善和流畅,岂是你们这般臆测乱评的,没有他们的付出,换不来现今的发达,如果都如你们所说阿里如此厉害,世界上比阿里有实力的大公司多了去,全世界建立如12306这样的网站会多如牛毛 。再补充一下,12306网站售出的车票即是一件如淘宝一样的商品,同时也是一个生产机器,搜出一件商品后会有n次方的不同车票产生 , 计算量很大,铁路也有些外包工作实践证明不是专业对口出来的产品都很失败 。你们不懂得 。

经验总结扩展阅读