低调的12306:中国软件技术难度之最

01

“旅游热”+开学季:流动高峰的抢票热潮

“我定了三个闹钟,提前填好预购信息只等放票,结果到点一秒售罄。”来自南京的陈女士很早就规划好了自己的出游行程,虽然对暑期的高峰抢票做足了心理准备,但看准的车次开票秒空还是让她倍感沮丧,“不敢相信一下子所有车票都卖光了,这又不是五一、十一或者春运。”而这样的情形在前一天的试抢中已经上演过一遍,她无奈之下只好提交候补申请。

暑假向来是旅游高峰期,随着开学季临近,各大院校学生的入学报到又为繁忙的铁路系统增加不少运作压力。作为中国铁路客户服务中心推出的官方购票渠道,应对高频的流动高峰已成为12306的常态,它不仅需要面对总量庞大且类别不同的用户群体,协调不同的车次路线和乘车区间,还要在线上线下不同渠道同步余票信息,并保持高效运转。那么12306究竟如何处理多线程工作,并保持复杂而精密的系统运转呢?

图片

“旅游热”+开学季:流动高峰的抢票热潮 

事实上,我们所看到的一秒售空大多是因为12306系统的“区间限售锁票”。放票即售罄并不是真的卖光了,而是系统为了运力最大化,需要先保证长途旅客的席位,让从始发站坐到终点站的全程旅客先买票,在一段时间后,中间站的车票才会按照区间由长到短的先后顺序一一放出。

如果还未轮到短区间放票,长区间旅客已经满席,那么后面的旅客确实无法再抢票,但若尚有余票,短区间的旅客就能通过候补排队的方式顺利订到票,而候补则是按申请的先后顺序处理,因此及时提交候补申请也是抢票的关键。

此外,对于学生返校抢票难的问题,经验丰富的国铁集团也已出台应对之策。8月24日,国铁集团在官网宣布推出“学生预约购票服务”和“学生出行需求采集”两项新功能。 

图片

“学生预约购票服务”入口

“学生预约购票服务”功能是对学生用户提供预售期外预约购票的专用入口,即8月20日至9月8日每日5时至23时,学生用户可以通过该入口预约乘车日期为9月5日至23日的车票。为了满足陪同出行的需求,同一账户除学生本人以外,还可添加最多两位同行人的购票需求。

“学生出行需求采集”功能则是面向学生用户提供出行需求提报服务,即自8月20日至9月23日,学生用户在购票界面输入信息后,若查询结果显示没有购票所需车次、没有中转推荐方案,可点击“中转”页面的“学生出行需求采集”进行需求填报。铁路部门会根据提报的出行需求进行研判,再统筹运力资源来保障需求。    

不仅能在庞大的流量压力下分区间处理需求,还能根据特定情况定制方案和接口,12306的系统究竟有多复杂?    

02

曾被IBM、阿里拒绝的12306

回顾12306的发展历程,其实并非一帆风顺。比起其他软件精美的UI界面和交互设计,12306的单调和古板总给人一种充满“年代感”的印象。2010年春运,12306 网站首次开通并试运行,然而庞大的流量需求远超系统的承受能力,网站随即出现多次瘫痪,随后推出的App客户端也并未逃脱频频崩溃的命运。这一问题虽然在此后几年间有所缓解,但并未得到根治,因此12306一直遭受着诸多吐槽和批评。

12306曾经尝试找企业提供解决方案,但IBM、阿里巴巴等大企业最终均退出了竞标,除了报价成本的问题,关键在于已有的解决方案都不足以应付春运购票负载,于是12306走上了漫漫自研路。

图片

作为全球最大的票务交易系统,12306的复杂程度其实远超人们的想象。在大众近几年的印象里,每年的双十一购物节是最考验系统算力的时刻,但实际上12306所要承载的压力远超购物节,关键原因在于12306的库存计算比京东、淘宝这类电商复杂得多,传统的分布式数据库、缓存、负载均衡技术,根本无法满足12306的需求。   

 一位头部电商资深工程师曾详细讲解过二者的区别,电商平台中,一个商品对应一个SKU(供应链管理中的库存单位),售出一件库存就减1,但12306上的火车票是一种动态的SKU,计算的数据量可达普通电商产品的数百倍。   

例如,始发站与终点站之间一共途经10个站点,一共分为商务座、一等座、二等座3种座位,如果按一般情况计算,这趟高铁只有3个SKU,但实际上却有135个,因为从始发站上车,到后面9个站点分别对应9种车票,从第二个站点上车,到后面8个站点分别对应8种车票,以此类推,就有9+8+7+6+5+4+3+2+1=45种票面,每种票分别对应3种座位,一共就有135种商品。

这只是库存的统计,售出一张票还不能单纯减1,因为短途票旅客可能会在中间站点下车,那么减掉这个SKU后,还要增加这个站点到以后各站的车票库存。在此基础上,再叠加选座功能,以及退票、改签环节的处理,计算数量会再翻倍,而这些复杂的过程还需要在短短数秒内完成。

中国铁道科学研究院集团有限公司首席研究员、12306科创中心副主任单杏花曾指出:“铁路客票系统的余票计算非常复杂,包括客票管理、票价计算、径路计算等,票面信息压缩、加密、存储和读取……网络运算量、信息处理量之大超出想象。

除了计算难度,流量压力也为12306的技术优化带来不小的挑战。互联网的普及为12306的推广奠定了基础,官网资料显示,目前约九成车票都是通过互联网渠道售出。单杏花曾在采访中提到,2020年春运期间,12306在高峰日网络点击量高达1495亿次,相当于平均1秒就要承受170多万次点击。    

2024年春运,全国铁路日均开行旅客列车较2019年同期增长18.5%,客运能力投放创春运历史新高,全国铁路单日最高加开旅客列车2256列,12306系统单日售票量最高达2091.6万张,页面浏览量最高898.3亿次。其所承受的流量压力可想而知,由此看来,“12306天天都在过双十一”绝非一句戏言。

经过漫长的迭代升级,如今的12306已经鲜有“崩溃”,这主要得益于算法的改进、云端技术的发展、大数据的引入,以及人工智能技术的突破。那么,12306的系统究竟是如何运作的,又是如何一步步进化的呢?这或许得从技术层面来拆解。 

03

年复一年抢票难,12306出票机制解读

从技术上来说,12306整体的系统设计原理是通过分布式集群部署、多层负载均衡和高效容灾手段来保证在极高并发情况下提供正常、稳定的服务,而且12306作为全球最大规模的票务交易系统,其架构设计充满了挑战与创新——不仅要处理日常的海量请求,还要应对特殊日期,比如春节、国庆的运输高峰时段秒杀抢购的场景,因为在这些特殊时期,全国上下几亿人可能会同时在线尝试抢票,给系统带来前所未有的压力。            

为了应对这种高并发流量,12306采用了大型高并发系统架构,系统上层部署了多层负载均衡,包括OSPF、LVS和Nginx等多种技术,这些技术确保了用户请求能够均匀分配到不同的服务器上,避免单点故障和流量拥堵。

其中在负载均衡方面,Nginx起到了重要作用,通过其高性能的HTTP代理和反向代理功能,实现了高效的请求分发,比如Nginx可以根据服务器的性能和负载能力进行加权轮询,从而优化请求的分配,不同服务器按照权重接收请求,确保了系统各部分的均衡负载。

图片

12306的系统构建十分复杂且精细   

此外,12306还采用了全面缓存和队列削峰的技术,缓存服务使用基于内存计算的NoSQL数据库,大幅提升了车票查询的并发能力,使得车票查询速率从一开始的不足1000次/秒,逐步提升至超过20000次/秒,查询响应时间也从1秒缩短到10毫秒。

队列削峰则通过构建交易处理排队系统,先将用户的下单请求排入队列,然后根据后端处理能力异步处理队列中的请求,这样不仅减轻了数据库的压力,也优化了用户体验。

对于订单和库存管理,12306采取了预扣库存方案,该方案首先在本地服务器的内存中扣除库存,然后再异步生成用户订单。这种方式避免了频繁操作数据库接口,提高了单机应对多并发的能力。同时,为了防止服务器宕机导致的问题,系统还在数据库中存储统一库存,并设置了余票系统,确保了高可用性。 

近年来,12306还在持续进行技术创新和架构调整,比如已经实现了异地双活和公私结合的第三代架构,进一步提升了服务的可靠性和用户的购票体验,12306目前依然在持续进化的过程中,其技术和架构的改进也为用户带来了更加稳定和高效的购票服务。

04

演唱会一票难求 技术与商业目的差异性思考

其实对于大多数人来说,对抢票的认知可能源自火车票,但亲身体验往往来自各种演唱会,相对于12306购票系统主要用于铁路客运车票的购买,大麦、猫眼、摩天轮等专注于演唱会等文娱活动的票务服务在技术实施和用户体验上有哪些区别呢?

首先,它们的技术逻辑是共通的,差别其实就是服务器能力的高低而已,这些文娱票务平台的并发处理能力不及12306,但在热门演唱会抢票时也会面临瞬间流量激增的情况,比如像周杰伦的演唱会从来都是一票难求,票务系统常常面临巨大压力。为此,这些平台也逐步优化了其服务器架构和负载均衡技术,甚至临时租用云服务器以提高数据处理效率。 

图片

央视就曾曝光这种一人操作多台设备同时抢票的黄牛手段

其次,文娱票务系统的座位机制明显更复杂,12306的座位分配机制相对简单,用户可根据车次的不同选择不同的座位类型(如硬座、软座、硬卧等),但具体的座位号不能自选,同时退票流程也比较简便。

但文娱票务系统的座位分配复杂得多,因为同一场演唱会的票价和座位位置会大大影响观众的体验,用户在选座时不仅要考虑位置的优劣,还可能遇到“柱子票”等问题,与此同时在退票政策方面,演唱会门票往往存在退票时间窗口严格、退票手续费高等问题,这导致许多消费者在退票时遇到困难。   

当然,12306和文娱票务系统最大的区别就是后者是纯商业平台,换言之它们是需要自负盈亏的,这些平台的盈利模式不仅包括直接的票务销售,还涵盖了广告收入、数据分析服务以及与演出主办方的合作分成等多种方式。三大文娱票务系统里,大麦网作为行业内的领头羊,其商业模式主要围绕官方代理票务和主办方紧密合作展开;猫眼娱乐则以电影票务起家,逐步扩展到其他类型的娱乐票务,商业模式主要包括在线票务服务、娱乐内容服务及电商和广告服务等;而摩天轮票务平台则主要定位于二级票务市场,提供一个供用户购买和销售票务的平台。 

这也让我们不得不思考:12306如果要商业化,它可以在保证基础民生项目属性的情况下,实行哪些玩法呢?

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值