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

壹零社科技宅 2024-08-31 02:13:54

01

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

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

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

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

继奥运带动出境游的热度持续高涨后,首个国产3A游戏《黑神话:悟空》的爆火,在暑期接近尾声之际为旅游业送来又一波流量高峰。

资料显示,《黑神话:悟空》在国内36个景点取景,其中27个来自山西,绝大部分都是主创人员实景扫描而来,游戏画面对中式古建筑及彩塑的高度还原,勾起了众多玩家想要去实地景区一探究竟的兴趣。

根据某团购电商数据显示,游戏上线当日,山西景区的旅游热度环比增长156%。在线旅游平台携程更是连夜加急设计相关景点的旅游线路,山西省文化和旅游厅也积极抓住流量风口,公布“跟着悟空游山西”主题旅游线路,推出“全线线路”“6天5晚晋北线”“6天5晚晋南线”“4天3晚晋东南线”“自驾路线”等多种旅游方案,还有多处国保单位首次向公众开放。

“跟着悟空游山西”主题路线

全国各大院校却开学在即,国铁集团公布的数据显示,8月26日至9月10日,铁路迎来学生客流高峰,预计发送学生旅客650万人次。家在柳州要回武汉上学的高洁就是其中的一员,然而在暴涨的出行需求之下,她也遇到了抢不到票的难题,提前看好放票时间后,高洁发动了四个朋友帮忙抢票,均以失败告终。

事实上,我们所看到的一秒售空大多是因为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

黄牛票、学生票……

这些“抢票”知识得掌握

“黄牛票”的历史可以说十分悠久,在20世纪五六十年代背景的香港电影《雷洛传》中,雷洛带女朋友看电影也要从猪油仔手里买黄牛票……所以以前的黄牛票就是票贩子抢一手票,靠倒卖赚差价,而现在无论火车票、飞机票甚至是演唱会门票都实行了实名制,黄牛票也变成了帮买家代抢票赚“辛苦费”,那么黄牛们是怎样在12306进行代抢票的呢?

抢票插件曾经还沦为了灰色产业的赚钱门道

目前来看,黄牛们会依靠专业的抢票软件和插件在电脑端进行抢票,这些工具能够模拟人工操作,自动完成登录、车次查询、订单提交等步骤,自动化操作不仅省去了人工输入的时间,还减少了因手动操作导致的错误,可以在放票瞬间迅速完成查询并提交订单,当普通用户还在手动输入信息时,票源可能已经被抢购一空。

在12306发展早期,抢票软件确实可以显著提高抢票效率,但后来也推出了反制措施,比如验证码识别,后来一些可以在手机上使用的抢票软件就开发出了验证码自动识别功能,只需一秒钟即可识别并输入验证码。除此之外还有并发抢票的方法,比如利用多个账号同时发起请求,或者在多台计算机上安装抢票程序,并通过一个控制端统一指挥等等,一些抢票软件甚至可以跳过网页中的一些等待和确认环节,直接向服务器提交购票请求。

当然,这些所谓的抢票神器并不是绝对有效,而且存在个人信息安全风险,因为使用抢票软件通常需要提供12306账号密码及个人信息,这可能导致个人信息被泄露。对于没有抢到票的读者朋友,其实应该善用候补购票功能,也就是当用户所选车次的车票售罄时,可以预付款提交候补订单,在有退票或余票放出时,系统将自动按排位分配车票并通知用户。候补购票功能对于用户而言省去了反复手动刷票的麻烦,也提高了购票成功率,而且这一功能适用于全国所有列车,实用性很强。

学生需要自行在12306 App填写购票需求,才能预订学生票

在春运等高峰期,还有一类优待票大家应该很熟悉,那就是学生票,那么12306又是怎么知道订票者是学生的呢?事实上对于新入学的学生,需要使用本人身份信息注册铁路12306账户,并将优惠类型选为学生,提交审核后即可购买学生车票。

而对于已经在读的学生,每学年乘车前,应在线完成学生优惠资质核验,当然也可以到车站指定售票窗口或自动售票机,办理居民身份证件与火车票学生优惠卡的优惠资质核验手续。而且铁路部门还在12306手机客户端推出了“学生预约购票服务”和“学生出行需求采集”两项功能,以更好地满足学生旅客的出行需求。这些功能不仅方便了学生购票,还帮助铁路部门合理配置运力资源,优化列车开行方案,最大程度保障学生的出行。

05

演唱会一票难求

技术与商业目的差异性思考

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

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

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

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

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

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

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

0 阅读:24

壹零社科技宅

简介:感谢大家的关注