“大学生开学第一件事,就是被学校教务系统的‘土豆服务器’气疯。”

每年开学季,都是大学生们拼手速的时期。

不仅要抢到回学校的车票,还要和教务系统斗智斗勇,抢到下学期想修的课程。

图源新华社[1]

登录—查询—选择—确认,在手机上一番操作。

如果是在抢票,一套流程下来,可能车票已经支付成功,运气好的话,甚至连靠窗看风景的座位都选好了。

但十分钟过去,刷新了十几遍的教务系统还是一片绝望的空白。

被教务系统网页卡到崩溃的学生们,调侃说“所有学校的教务系统,都是用土豆发电的”。

那么问题来了,承接几千人的教务系统经常崩溃,而每秒都要承担几百万点击的12306,为啥能做到这么牛?

01

卖票软件,到底有多难?

事实上,我们实现线上“买票自由”的时间并不算长,或许很多人记忆中还有过这样的画面:

每年放假的前几天,火车站总会早早排起买票的长龙,在人们争先恐后的询问声里,大厅里游走着四处招揽生意的“黄牛”。

那时候能抢到一张火车票靠的是不仅是耐心和运气,还有售票员的手速。

图源:视觉中国

直到2011年,12306互联网售票系统正式上线。

这个人人在电脑、手机上都能打开的卖票系统,开始接替售票员,接受全国人民线上买票的考验。

面临的第一个冲击,就是惊人的访问量。

据介绍,12306高峰日的网络页面浏览量超过2600亿次,相当于全中国人每人每天访问了票务页面近200次。

平均1秒就要承受300多万次点击,系统还能维持正常运行,12306的压力可想而知。

据统计,12306在高峰日的点击量可达1495亿次,而全球访问量最大的搜索引擎网站谷歌日访问量也不过56亿次,仅是12306的零头。

超高访问量之下产生的订单量也是巨大的,有数据显示,12306的售票系统在高峰时段,1秒售出近700张火车票。

也就是说,一秒钟,一辆热门动车组的票全被抢光了。

有人把买票比作线上网购,事实上,在12306上买张票,背后流程的复杂程度远远超过了人们的想象。

中国的春运堪称世界上规模最大的人口流动,几乎人人都有买票需求。

12306票务系统首先需要解决的,就是精准对号入座,避免人们把票买重。

当许多人同时在竞争同一张车票的时候,12306要实时更新线上网站和线下5000多个车站的车票余量。

图源:微博@12306

此外,“买票”可能只是旅客众多操作中的一个,下单后的退票、改签、变更到站和延长乘车区间,更是巨大的计算量。

一个需求的变化,就会影响到整条路线火车站点可销售的余票量。

这要求12306在计算余量的同时还要实时返回精确结果,实现“动态变化库存”。

这无异于当场做高等数学题,100万道里还一道也不能错——

毕竟12306和电商平台不同,没有客服在下单后联系你,“亲,这款车票已经卖完了。”

当然,算法承受的压力不至于此。

一张车票的本质是某个车次的某一段区间,列车停靠的站越多,路线组合就越变幻莫测。

光是输入“北京”这个城市名,市内就有近十个出发站点/图源:微信公众号@中国铁路

比如,G71次列车从北京西开往福田,中间17个站,排列组合方式有136种。

与此同时,我国拥有世界上最现代化、最大规模的铁路网。

列车的起点和终点之间的若干站点,12306卖票的组合方式到底有多少种,恐怕没人能数清。

图源:央视一套

除此之外,要处理的问题还包括:如何在一条线路上合理公平配票,避免某一站卖出太多票造成上下车拥挤;

如何给老人优先配置下铺、为儿童配置相邻席位等。

每卖出一张票的背后,12306的大数据都需要考虑到旅客每一个细小的需求。

经交通运输部研判,2023春运期间客流总量约为20.95亿人次,比去年同期增长99.5%。

更多的人出行,意味着12306的售票系统将又一次承受前所未有的压力。

这让人不禁好奇:在这种的现状下仍旧保持不崩溃,12306到底怎么做到的?

02

12306,到底咋做到的

这是铁路12306客票系统的监控大厅,在大屏幕上展示着12306实时售票情况。

客流趋势、购票渠道、候补概览甚至风险防控等,一目了然。

图源[2]

在12306这张“无形之网”的调配下,不论多么复杂的线路和需求,都不会发生拥堵、碰撞。

人口流动这种原本无序的运动,变得井然有序。

为了做到这些,12306经过了数十年的改造和迭代。

人们点击网站开始查票的瞬间,售票系统的内存计算系统就运作起来了。

快速反应现查现算,能让你迅速查到车票的余量,并丝滑地下单。

还能查到等待人数和预估等待时间

为了缓解出行高峰期的压力,12306还想出了分时段销售车票的策略。

最初,一天只有4个放票时间。

为了不让“限制”成为购票的妨碍,如今,每天8点至18点期间,每个整点和半点均会有新票起售。

为适应更多样的需求,不同站点还设置了不同的起售时间。

控制流量是一方面,提升自身的可靠性也很重要。

12306自主研发的“双活中心”架构,建设了两个数据中心让它们数据同步、交互工作,当其中一个系统出现故障,客票系统可以做到秒级切换和快速智能修复。

简单来说,一个系统崩溃后会有另一个来顶上,减少了系统影响人们买票的几率。

与此同时,12306还把网络宽带从5G扩容至12G,“增加带宽就等于多开了几个门,能让更多的用户同时进来。”

敢这么做的底气,是12306学会了在春运高峰期租个“云”服务器一起承担压力。

高峰期间12306网站的火车票查询量,大概占了12306网站90%以上的访问流量。

在它们转化为真正的订单之前,这些查询业务会先被放到租来的“云”上,来提升系统运作的效率。

经过一系列技术的迭代和优化,现在人们买张票的平均耗时只有0.77s。

为了维持系统健康的运行状态,12306还会对异常请求进行风险评估和拦截,也就是防“黄牛”。

运用强大的识别手段进行风控并拦截,以此打击恶意刷票,在买票这件事上,12306最大限度地保障公平公正。

“春运”,世界上规模最大的人口迁徙,成就了世界上规模最大的实时票务交易系统。

总设计师单杏花,也凭借工作中一系列创新与突破被誉为“12306”系统的最强大脑,成为登上2023兔年春晚的“最美铁路人”。

图源[4]

03

被骂惨的12306,终于翻身了

作为一个为十几亿人提供服务的卖票系统,12306的每一个缺点和不足,都会被人们敏锐地觉察到,吐槽之声也少不了。

“天天被秒杀、天天被抢购、天天‘双11’。”

大量订单带来的庞大计算需求,是12306系统内工作人员每天面对的事实。

12306的后台有着庞大的计算需求

2011年12306互联网售票系统刚上线,随即在2012年春运时就遇到了“大考”。

最高日售票量119.2万张,访问压力达到14亿次。

庞大的互联网购票需求使网络带宽、设备处理能力一时难以支撑,系统出现卡顿甚至瘫痪。

归心似箭的人们不停刷新页面,面临的不是车次信息以及购票信息无法刷新,就是购票到最后一步无法成功支付。

一时间,对12306的批评铺天盖地而来。

在这样的情况之下,研发团队只能在晚上23点后,利用系统维护阶段一遍遍优化、测试。

经过近四五十天的努力,才让12306恢复正常运行。

但解决了系统问题并不代表一劳永逸,只要还有人买票,就会有新的问题出现。

2015年,为了区别真人和计算机、本人和黄牛,12306上线了著名的“图片验证码”。

据相关数据显示,这个“逆天”的验证码图片库里涵盖12个类别,有33万多个排列组合选项。

人们需要在各地方言中找到海南话,在一堆建筑中找中国名胜古迹,还要通晓古今中外各次元大咖。

一次就选对的成功率仅有8%,“好不容易通过了验证,票已经被抢完了。”

凭借如此“反人类的设计”,12306在此后多年一直被人诟病。

事实上,12306在功能更新上并不是一直处于被动地位。

围绕旅客购票这一行为,主动提升服务,一直是他们默默在做的改变。

比如官方“捡漏神器”——候补购票功能的诞生。

要知道,无论在哪款购票软件买票,最终都需要在铁路12306购票系统内排队。

能不能买到票取决于有没有票,而不是用了多少加速包,拉了几个人助力。

加价买票被坑骗的旅客不在少数,12306的候补功能,无疑给着急的人吃了一颗定心丸。

为了把兑现成功的机会拉到最高,12306甚至把候补购票的最晚截止时间由开车前6小时,调整为开车前的2小时。

如果出行太着急忘了带身份证,也可以在12306的APP上自助开具“临时身份证明”。

不用花时间跑窗口,更不用排队,在手机上简单操作过后,就可以顺利进站。

每人在一个自然月可申请3次电子临时乘车身份证明,每次申请成功有效期为24小时

针对特殊群体的出行,12306在APP中也提供“重点旅客预约”的选项。

老人出行不便可以提供轮椅,也可以帮忙送视障旅客进站乘车。

这些在细微之处的服务,是只有真正体验过的旅客,才能感知到的温度。

如今,12306在十几年不间断的吐槽和批评中,依然在迭代、更新。

12306到底是不是最牛的软件,或许并不重要。

重要的是,我们无需在车站窗口排起长龙,担忧着出行的不确定性。

所谓的“诗和远方”不再遥远,而是在手机屏幕上一触即达。

当人们出行的脚步变得更自由,生活的节奏也就变得更从容。