揭秘12306团队:为一张票"抢"一年 与机器抢票对战
2月2日,中国铁道科学研究院全路客票系统监控中心,最大的三块屏幕显示着2018春运12306售票实况、分控实况和排队实况。视觉中国供图
在这座大厅里,半面墙的窗帘经年紧闭。106块大小屏幕上方排着3面巨幕。中国地图居中,代表城市的点被密集的弧线连结。桌椅间,黑色线缆蜿蜒丛生,服务器柜机靠墙站了一圈。数据接口的红绿指示灯交替闪烁,屏幕荧光在柜机的白色金属表面流淌,也被工作人员的眼镜折射。
没什么人说话,只有键盘敲击声、机器内置风扇的嗡声和硬盘读写声交叠共鸣。挂钟秒针咔哒一步,大屏幕上鲜红显示牌8位数字的后3位就变了。
在这1秒内,12306网上售票平台又售出了数百张火车票。那座大厅是中国铁道科学研究院(后简称“铁科院”)全路客票系统监控中心,它日夜关注着全球交易量最大的中国铁路票务系统的健康状况。系统一年售出30亿张火车票,12306互联网售票占比最高时超过80%。
监控大厅正直播着这个系统一年内最大的硬仗,春运。
自1月3日狗年春运车票正式发售以来,已经有2.8亿张车票从互联网平台发售成功,占全渠道售票量的八成。全国范围内,人们使用12306时的请求和等待、满意或崩溃,都会被这个平台捕捉。
它平均每天卖出937万张火车票,迎来12404万次登陆。达到峰值那天,它被刷新了15777.8亿次,平均每秒2700万次。
你买不买得着票,什么来决定
网友常用“秒抢”或“秒没”调侃买车票,但很少有人知道,点击余票查询到最终结果出现之间的时段里,究竟发生了什么。
在整个12306团队眼中,每1秒都无比漫长。他们推进工作的时间单位是“毫秒”。
“滴”,某地某人轻触屏幕,一个查票请求信号诞生了。它从手机出发,沿着网络飞驰,抵达铁科院电子计算技术研究所的机房。一列列黢黑的服务器在那里矗立,机箱线路密布,各区功能井然。
“滴”,查票请求信号在电路中游走,像一颗桌球击中另外几颗,它们又四散撞击更多的球。查票请求被发送到北京之外各站客票交易系统,那里可能是山峦积雪的西藏,也可能是花香浓郁的广州。
这一步比“双11”当夜秒杀商品更复杂。商品的库存变化“是简单的数字加减”,拍一样少一样。余票的数量则随着出发地和抵达地的组合而变化,实时变动,需要一套算法模型才能得到准确答案。2017年10月12日,12306的接续换乘功能上线,在已有的变化因素中加入了中转换乘站,对算法的要求更加严格。
“滴”,计算结果翻山过河,传回计算中心。同时,不断有人买票成功。余票信息的存储属于动态存储,称得上“瞬息万变”。铁科院电子所副总工程师兼12306技术部主任单杏花承认,“有小概率”,即使查询到余票,这些票也可能在下一个瞬间售空。
“滴”,查询信号得到系统响应,返回手机。查询者选择车次,点击购买键,发出购买的请求信号。它加入奔向系统的同类信号,像一群乘客涌向购票大厅。速度就是一切,它受网速和运气影响。来晚了,会被关在“大厅”门外。
为防止订票者犹豫后悔造成机会浪费,“大厅”一次性放进的信号会比余票数量稍多一点。但购买者和余票量在一定时间内基本持平,“为了公平”。
铁科院电子所副所长、研究员朱建生表示,如果让这座“大厅”里每个“乘客”以最快的速度买到票,有多少“乘客”就需要多少“放票窗口”——处理购票需求的任务线程。这意味着巨大的计算成本。
目前12306网络售票平台的方式是,在“大厅”里开数个窗口,窗口前排起长队。每个信号依据一定算法归入某个窗口,跟随队伍有序向前。此时,不少人的手机上会显示“排队等待中”的字眼。
这套流程的核心是“异步交易排队”技术。铁科院在这方面“处于国内领先水平”。
“公平”是技术研发人员遵循的基本原则。每个购票请求信号进入的次序会被系统记录下来,就像热门餐厅向等待就餐的食客发放排队号码。无论后续进程快慢,信号位置凭借这个“号码牌”保留,先到先得。
“滴”,购票信号得到响应,订单产生。人们点击支付,完成交易。
监控中心的大屏幕显示,2018年2月2日上午10点22分,系统对请求信号的平均响应时间最长不超过0.9秒,请求信号的平均等待时间则是1.8秒。朱建生告诉中国青年报·中青在线记者,在平均值后,每个用户状况不同,有人点击购买后可能要等上八九秒甚至更久,有人则在不到1秒内完成了整个交易,“甚至意识不到经历了怎样复杂的过程”。
持续40天的“双11”
12306的技术团队和阿里研究院的淘宝团队有过接触,双方都有点感慨,“这或许是全中国最能理解彼此的两个技术团队了”。
单杏花觉得,自己在春运时的工作感受和“双11”当夜的淘宝工程师类似。只不过,“他们只有1天,我们却要面对40天”。
火车出行是春运时很多人的第一选择,也是“综合性价比最高”的选择。它不易受天气影响,价格适中。铁路系统内部曾讨论过大幅提高票价,以期用市场杠杆降低需求量。
这个动议最终被放弃。2016年底,国家发改委发布《铁路普通旅客列车运输定价成本监审办法(试行)》。“公平性”被放在首位。
2017年春运,全国铁路累计发送旅客3.57亿人次,相当于搬动整个美国和加拿大的人口。网络买票渐成风潮,到2017年,12306平台的客票发售量达到全渠道的70%。
监控大厅里高悬着一张2018年春运网络售票日历,每个数字都有A4纸大小。除夕前两天、农历正月初五到初七分别是回乡和返程的高峰期,被特别标红了。
近来,单杏花每天早晨6点半起床,儿子还在睡梦中,北京的天空几乎全黑。监控中心灯火通明,工作人员大多在早上7点网络售票开始前到齐。下班则在晚上11点后,系统休息了人才能休息。
监控中心的大小屏幕实时显示着购票情况。最火爆的请求队列会被重点关注。一旦平均等待时间“出现异常”,工程师会迅速投入查找和解决问题。所谓“异常”,有时和同热度队列的等待时间仅有几秒甚至零点几秒之差。
朱建生介绍,这里类似卫星发射中心,“春运之战”的火光在计算中心闪耀。
中国铁路客票系统拥有两个计算中心,位于一条长长走廊的两端。两个中心能力相同,不分主从,各自承担50%的系统任务。一个崩溃,另一个会立刻接过它的工作,保证服务运行不会被任何意外中断。
同样,内存计算是“分布式”的。“就是同一项工作,分给好多台计算机来做。”单杏花说。
12306的流量分为旺淡季。如果完全依据旺季对计算能力的需求储备计算的软硬件资源,淡季一到,大量资源就被闲置了。
弹性计算架构被建立起来,旺季时扩展,够用;平时压缩,不浪费。铁科院研发了自己的云系统,足够应对平时购票需求。但他们仍租用了阿里云和腾讯云,应对在春节等旺季剧增的计算量。
“他们只分担计算工作,用户信息还在我们自己的‘云’上,保证(用户信息)安全。”朱建生说。
单杏花最焦虑的时期已经过去了。2012年春运期间,当时的铁道部决定将20%左右的票源投到12306平台进行互联网销售。“每天可处理100万笔购票需求,当时想着应该够的。”一位负责此项工作的前铁道部工作人员在2012年接受《中国青年报》采访时说。
互联网售票的推动者没有想到,12306平台最高峰时一天售出了119.2万张火车票,超出设计时每日最大售票量的20%。因为能力不足,当时的系统平均每秒只能成功售出几十张火车票,运算压力大时这个数字还会掉到10以下。那一年,“12306”登上了多家主流媒体的“年度热词”榜单,“卡顿”“失败”频繁出现在有关它的报道里。
那些天,单杏花“床摆到了实验室”,每晚11点售票系统关闭后,团队连夜对系统进行优化和测试。
6年过去了,12306网络售票平台原有的400台服务器增加到2000台,系统版本升级了6次。区域联网升级成全国联网,电子支付被引入。电子客票起用,刷身份证可进站。
铁路系统不成文的行事规则被网络摆到明处。少有人知道,一些车次的火车票正式发放后还会有一次小规模发售。前者大多是这一车次出发站和抵达站的席位资源,后者则来自沿线各站铁路售票系统的少量分配。这在行业内被称作席位“复用”。12306网站5.0版本更新后,铁路系统与网上平台共享了“复用”资源。预售期遭遇发售车票“秒光”的12306使用者,出发日期临近时再刷刷网站,可能发现大量余票。
在朱建生看来,12306的一年被“春运”一分为二。为这次年终“大考”所做的准备会持续一年。每年“春运”结束,是下一年备战的开始。
刚刚过去的一年里,12306网站的日售票能力从1000万张提升到1500万张。动车组自动选座功能和接续乘车功能均于2017年10月12日上线。微信支付功能实现不久,购票通知短信能转为微信阅读,从座次安排到两地天气在内的细节得以显示。
2017年7月17日,互联网订餐系统上线,乘客购票后通过12306系统下单,提前选择沿途某站餐饮提供商的产品。当列车在那一站停留时,乘客可以坐在车内等着外卖送达。保持时间的精确是整套系统的关键。“一般咱们用手机App点外卖,十几分钟,迟就迟了。”单杏花说,“火车送餐晚十几分钟,车都开走了。”
12306 今年8岁了。它正由一个新鲜的买票渠道发展为一个更全面的“服务平台”。
与机器抢票对战
12306默默上线时,没吸引太多注意力。那是在2010年,代表中国互联网的“.cn”正式写入全球互联网根域名系统。中国互联网网民达4.57亿人,其中移动网民有3.03亿人。“互联网购买火车票是一场不可逆转的潮流中必然会发生的一步。”
朱建生介绍,移动端的发展是这几年的最大趋势。手机购票占互联网购票的70%。
12306会继续发展,但不会成为铁路售票的唯一渠道。据中国铁路总公司副总经理黄民介绍,这是整个系统的共识。电话订票系统和线下窗口将保留下去。总有人落后于这个数字时代,他们的需求同样重要。
另一方面,最沉重的沙粒也终将被时代的潮水托起。
一直以来,协调成本和需求是铁路系统的一件大事。12306返回的数据将作为重要参考,帮助铁路系统进行微调,在节约成本的同时,让每个焦急等待的人能踏上旅程。
2009年,当时的铁道部公安局抓获票贩子4069人,打掉倒票和制贩假票团伙、窝点1672个。据媒体报道,这些团伙很多是来自农村的一整个家族,“倒票比种地赚钱,判刑都值”。
网络售票时代到来,这批票贩子的教育水平跟不上了。到2014年火车票购买推行实名制以后,多地车站的铁路公安一度都察觉到票贩子的减少。
新的时代又有新的问题。
“刷票软件确实给我们的系统带来很大压力。”单杏花说。机器每秒钟可以点击发送请求成百上千次,大大增加了系统的任务量,也无形中增加了其他不依靠软件用户的购票难度。
除了隐于暗处、熟悉掌握技术的票贩子外,包括著名旅游服务平台在内的多家技术公司都光明正大地推出了抢票软件,用户支付一定费用,就能更快、更稳当地买到车票。除了大量批评,也有一些评论表示,这是火车票市场的自主调节,一些人愿意用更高价格换取更多机会。
12306试图在海量诉求中分辨人与机器。2015年,不少用户发现自己在12306购票必须通过8张图片组成的关卡,他们得从中准确找出“花生”“松鼠”之类的指定物品。在后来的采访中,12306团队将之视作“保证公平的有效手段”,因为在当时,“看图识物”还是只有人类才能解决的难题。
他们没想到,这项举措在网上迅速火了。至今,朱建生几乎每次接受采访还得解释一遍:“网上的很多图片是PS的。”那些被网友转发数万次的图片包括从一堆锥子脸中找到某个网红。
2018年春运,能够取代图片型验证码的验证方法尚未出现。12306表示会减少它们出现的概率,让超过八成的用户不必与之相见。
与“机器抢票”的对战也在继续。监控中心的一面大屏幕实时显示着风险控制实况。购票请求的饼图上,代表有机器刷票“风险”的红色和代表正常购票请求的蓝色几乎各占一半。11位IP数字变化闪动,它们都是被系统发现的危险分子。
单杏花表示,一定时间内,请求数超过某个范围的IP地址或设备,系统都会纳入眼底,对其限制访问,或干脆拦截。
这也意味着,一旦有使用过抢票软件的“黑历史”,你的设备和IP很可能被系统认出来,进行限制。再通过正常渠道买票只会难上加难。
“我们只能尽量地限制。”对于这个话题,单杏花很谨慎,但也表示“今年抢票软件不会那么好用了”。
海量的数据流向12306,汇成一张中国“春节人口迁徙图”。“北京”“上海”“广州”是这张图上最亮眼的3个点,像光源一样发射千万条轨迹,指向隐身在中国地图上的某个小小站点。
中国青年报·中青在线记者 王梦影 周伟来源:中国青年报