12306到底有多牛 | 计算复杂性是淘宝数百倍,最高日访问量1500 亿

社会网编2023-03-07 18:172520

《中国经济周刊》记者 周琦 | 北京报道

每年的高考、国考、春运,被称为中国的“三大全民参与活动”。其中,尤以春运涉及的范围最广,关注最多。

时至年关,春运出行必备的12306,再次成为人们使用频率最高的APP之一。从春运车票开售的那一刻开始,在外打拼的人们夜以继日地点击着刷新,期待订票成功那一刻的到来。

但是,热门方向、热门时段、热门车次的需求量巨大,难以满足所有人的购票需求,延伸出了不少人对于12306的疑问——为什么我就抢不到票?在前些年12306多次出现系统不稳定的情况时,中国铁路总公司(现为国铁集团)备受关注。

其实,12306系统的复杂性远超外界想象——在SKU(商品存货)数量计算难度远大于淘宝等电商的情况下,还要每天完成超过1500万个订单,并承受近1500亿次的点击。

“天天‘双11’。”是12306内部人士自嘲的“口头禅”,但也是现实的写照。

春运首日(1月10日),《中国经济周刊》记者走进了铁科院12306全路客票系统监控中心,对12306的“秘密”一探究竟。

12306到底有多牛 | 计算复杂性是淘宝数百倍,最高日访问量1500 亿

12306全路客票系统监控中心监控大屏。《中国经济周刊》记者 周琦 摄

库存复杂性远超淘宝、京东

12306系统到底难在哪儿?

在提出疑问的网友中,不乏软件工程师,甚至还有人表示,只要40台服务器、2个架构师、4个程序员,就足以开发出和12306类似的网上购票系统。

但实际上,12306的库存复杂性比淘宝、京东等电商高很多倍,运算量也大得多,传统的分布式数据库、缓存、负载均衡技术,并不能满足12306的需求。

一位淘宝前资深工程师曾对此有过非常详细的分析。

在电商平台上,每个商品对应一个SKU,有人购买1件,库存就减1。而12306的特殊性在于,火车票是一种动态的SKU,计算起来的数据量可能是普通电商产品的数百倍。

以北京西到深圳福田的G71次高铁为例,共有17个站、3种座位。表面看起来是3个SKU,即G71商务座、一等座、二等座,但实际上,G71次高铁有408个SKU。

原因很简单:从北京西站始发的车票,后面有16个车站,即16种不同的车票;涿州东站是第二站,有15种不同的车票,以此类推,单以上下车的站来计算,G71次高铁就会有16+15……+2+1=136个SKU,而每种票对应3种座位,一共是408个商品。

12306到底有多牛 | 计算复杂性是淘宝数百倍,最高日访问量1500 亿

12306全路客票系统监控中心内的车票发售时间表。《中国经济周刊》记者 周琦 摄

也就是说,如果旅客购买了一张北京西站到涿州东站的车票,G71次高铁的SKU要减去16;而如果购买的是北京西站到深圳福田站的车票,则要减去136个SKU。

以上只是SKU的减值。若旅客购买的是短途票,如北京西站到涿州东站,则在SKU减去16的同时,还要增加涿州东站到之后各站、之后各站相互间的SKU,即增加120个SKU。

若再叠加当前的选座功能(A、B、C、D、F),计算数量可能还要再翻倍。而这些计算数据,需要在大量购票者抢票的数秒,甚至数毫秒内完成。

对于上述计算方法,铁科院12306技术部技术总监杨立鹏在接受《中国经济周刊》记者采访时说,车票在出售时会引发非常复杂的连锁的变化,是铁路业内独有的情况。因此,12306在设计时,首先是要考虑到铁路部门的业务需求,“铁路要支持沿途不同的旅客出行。尤其是一些停站特别多的车次,有的车要运行70多个小时,一列车可能正常是拉1000多个旅客,但实际上不同阶段、不同区间的可发售的车票,要远超过这个数值。”

杨立鹏介绍,车票售出后数据的变化,对12306系统的压力考验非常大,铁路部门通过采取数据的分析预测,根据不同的运力需求和运营安排,提前安排相应车票的发售等方式,缓解压力。“铁路部门从1996年到现在,通过20多年的技术积累,采取了一些独有的技术方案,解决了这个问题。”

例如,将车票分时段销售,就大大降低了同一时段的数据压力。12306的放票时间,已从最初的一天4个放票时间点,增加到10个,再到现在每天21个放票时间点。

12306到底有多牛 | 计算复杂性是淘宝数百倍,最高日访问量1500 亿

12306全路客票系统监控中心监控大屏,风险请求占比超过一半。《中国经济周刊》记者 周琦 摄

高峰日平均1秒承受170多万次点击

作为全球交易量最大的实时票务系统,中国铁路客票系统平均一年售出30亿张火车票,这些火车票首尾相接可以绕地球7圈。

铁科院12306技术部副主任阎志远介绍,目前铁路售票中,互联网销售占全渠道的80%以上,其中手机客户端占互联网售票的78%,网页端占互联网售票的22%。

在2020年春运以来的发售量最高日1月3日,铁路部门全渠道售出1637万张,其中网络售票占比88%。

在车票绝大多数通过互联网渠道售出的过程中,12306系统的稳定运行,是绝对的工作核心。

据铁科院首席研究员、12306技术部主任单杏花介绍,2020年春运期间,12306在高峰日网络点击量高达1495亿次。

也就是说,12306在高峰日平均1秒就要承受170多万次点击,大概相当于每个中国人每天在12306上点击了100次。

12306面临的流量压力,可想而知。一名IT工程师在听到《中国经济周刊》记者转述的这组数据时,表示自己很难想象,“即便是百度,也很难有这样的点击量,可以说是一组天文数字。”

作为对比,2019年淘宝的订单创建峰值,是54.4万笔/秒。Trustdata的数据显示,淘宝APP 2019年“双11”当天的日活跃用户为4.76亿。

若以此计算,12306的最高访问量,相当于淘宝“双11”当天活跃用户每人点击超过300次。

对此,杨立鹏自嘲道,12306系统面临的,基本上是“天天被秒杀、天天被抢购、天天‘双11’”。

12306到底有多牛 | 计算复杂性是淘宝数百倍,最高日访问量1500 亿

铁科院首席研究员、12306技术部主任单杏花介绍12306相关情况。《中国经济周刊》记者 周琦 摄

“组合拳”打击恶意刷票

值得注意的是,如此高的点击量中,风险请求的占比非常高。

1月10日上午,12306全路客票系统首次面向媒体开放。监控屏幕显示,截至当日上午9点,12306收到的风险请求访问占比已达52%,每秒的风险请求高达82.12万次。不断滚动的风险拦截报警,则详细记录了风险请求的IP地址和来自的省份。

阎志远说,12306从2018年开始构建风控系统,通过识别包括浏览器、IP在内的一些异常行为予以拦截。“例如,正常旅客购票可能每次操作需要一秒钟,而风险请求则可能达到毫秒级,对这种异常请求就会被风控系统拦截。当然,具体的拦截中,我们还有更多的考虑方面和识别手段。”

在这些风险请求中,来自第三方抢票软件的请求,占据不小的比例。

单杏花表示,其他网站提供的抢票服务,对12306系统造成了一定影响,铁路部门因此在风控方面进行了研发,通过风控系统对一些异常行为进行拦截,来保证12306能够运行稳定。“我们保障运行稳定的目的是什么?是为了让正常的旅客正常查询、正常下单、正常支付,更好保障售票的公平公正。避免出现一些加价、价高者得,避免出现一些退票、退手续费情况,让旅客受到损失。”

除了通过风控系统防范,铁路部门还打出了“组合拳”,通过“候补购票”,让刷票软件存在的意义大打折扣。

“自2019年12月12日开售春运车票以来,铁路12306售票系统候补购票订单兑现累计582.6万笔,车票723.7万张,兑现率达76.8%,减少了旅客反复查询次数。”单杏花说。

近年来,12306上需要进行“图片识别”的请求已大大降低,也是得益于这套“组合拳”。

此外,云技术的运用,也大大保证了12306系统运行的稳定性。

从2014年开始,12306把网站访问量最大的查询业务分担到“云端”。2016年,12306进一步扩大了云端容量,几乎所有查询访问都在云端进行。

杨立鹏接受《中国经济周刊》记者采访时介绍,12306通过采用公有云和私有云相结合的模式,提高12306的数据处理能力。“在日常情况下,国铁集团和铁科院两地各有一个数据中心,采用自有资源来提供售票服务。在节假日等高峰期,出于经济性等各方面的更考虑,采用公有、私有结合的混合云技术来提高服务能力。”

单杏花补充说,12306是一个弹性和扩展的架构,核心数据只在核心部位,扩展的功能则可以用一些外延的服务器,或者和公有云开展合作,“这些跟整个核心部位是不交织的,相互之间可以不影响。”

正在研究:往返车票一起购买

除了保障系统稳定运行,12306还通过大数据分析,为旅客们提供购票便利。

据悉,通过大数据分析,铁路部门可以提前预判一些热门地区的需求,进而在条件允许的情况下增加运力,例如将8节编组的动车组增加为16节编组的动车组,或者开行临客等。

单杏花介绍,2020年春运车票发售以来,截至1月9日,铁路全渠道共发售车票4.12亿张,其中预售春运车票1.3亿张。

她还说,春运车票预售,也就是车票发售首日预售出的车票占比不足1/3,说明很多旅客并不着急,没有在发售的第一天就去抢票。热门地区、热门方向、高峰时段列车票源紧张,但部分车次还有剩余车票。“这些剩余的车票大多是时间点比较差,或者席位比较差,如站票等。从大数据可以明显看出,旅客出行已经由‘走得了’向‘走得好’在转变。”

大数据的便利性不止于此,为老人优先配置下铺、为儿童配置相邻席位等,也需要12306系统的大数据支持。

单杏花对《中国经济周刊》记者说,12306上有购票者的基本身份信息,系统若判断订单里面有老人,就会去为老人优先寻找下铺,“哪怕只有一张下铺,就一定会给他找到。”

为儿童配置相邻席位方面,考虑到家长带孩子,购票时本身分为全价票和半价票两种票种,可能会出现位置不相邻、不好照看,甚至有时候出现在不同车厢这种问题,12306在2020年春运期间进行了优化。“哪怕是为了均衡运输需要,票已经卖散了,但是系统也会尽量将他们匹配在相邻的位置,如果没有相邻的位置,优先配置在同一个车厢。”她说。

值得注意的是,关于从大城市返往二三线城市的去程、返程同时购票的问题,铁路部门也在研究。

铁路部门通过大数据分析,有不少乘客,在大城市返往二、三线城市的过程中,会出现买了去程票买不到回程票,或者只买到回程票没买到去程票的问题。尤其是在春运等节假日,问题更加突出。

“我们一直在分析这种规律,准备展开研究,能否在出行时把去程和返程的需求一起考虑。尤其是在乘客已经买了去程的情况下,是不是优先配给返程?但是措施可能还得研究成熟之后再进行研发,再进行一些评估才能上线,可能还需要一定的时间。”

责编:李慧敏

评论区