我从办公室的沙发上爬起来,摇晃着走到一楼12306监控大厅时,空空荡荡的厅里空无一人。扫了一眼墙上的挂钟,距离开售时间七点就差五分钟了。
这是2012年“十一”车票预售期间的普通一天,售票高峰接近尾声,我已记不得这是连续第几天在开售前坐在这里,看着12306监控大屏。恍惚间像是又回到了八个月前的春运,那段备受煎熬的日子。
年初,是12306出生后首次迎接春运大考。初出茅庐的系统表现差强人意,网上吐槽和质疑的声音铺天盖地。整整两个月的时间里,感觉每天都被汹涌的流量按在地上摩擦,年轻的客票团队压力山大,度日如年。12306承载的期望都化作了失望,团队的辛勤付出都化成了云烟。
春运结束后,团队痛定思痛,针对暴露的问题展开高强度的科研攻关,短短几个月时间搞定了多项关键技术,完成了余票内存计算、分库分表、排队系统、读写分离等多项架构重构和功能优化。
每年“十一”黄金周预售的售票量都是当年的最高峰,量级大、强度高,是成果的最佳检验时机,系统能否扛住下一年的春运就看在这次在“十一”的表现了。
但这次“十一”前半段售票仍然不顺利,余票内存计算正常上线,分库分表上线遭遇了在线回退,最终涉险过关。悲催的是,几天前排队系统上线后,用户等待时间太长,购票体验很差,反复调优收效甚微。网上吐槽大有超过春运之势,微博上群嘲12306就是把车站窗口排队直接克隆到了网上,排队时间比在车站窗口还长!整个团队被逼到了悬崖边缘。
陆续又来了十几位同事,一眼上看去都是一副没睡醒的样子。进入“十一”预售期以来,团队核心人员在办公室安营扎寨,白天监控系统、处置故障,夜晚停售以后进行系统调优,早上七点前又要准备开起新一轮的战斗。
坐在机器前,我脑海里浮现出一幅广场上黑压压人群等着售票大厅开门放人的画面。噢不对,真实画面应该是大江南北、成千上万的人和我一样坐在机器前,敲打着键盘,就等七点整网上开售之时,冲进网站飞速下单。这画面刺激得我的倦意立马烟消云散。
七点整,潮水般的流量应约而至。没几分钟,系统监控图上的订单处理时间、排队等待时间等众多曲线都爬上了“青藏高原”。尽管休息了一晚上,系统还是像高原缺氧下的运动员,气喘吁吁地很快就跑不动了。
勉强挺过了七点这一拨访问,下一步怎么办?八点的交班会上,大家面面相觑,一筹莫展。理论上推敲过很多遍的排队系统在运行环境投产后,因为订单生成时间过长,反而成了系统性能的爆点和用户体验的槽点。昨晚系统停售时,堆在排队系统中没来得及处理的订单竟然有几十万笔。从今早的情况看,今天还是不乐观。这个“十一”的运气难道和春运一样差?
“试试读写分离噻”,对面的小周突然冒出一句兰州味的川普。
读写分离也是今年科研攻关的内容之一,是指把订单的查询操作从交易节点AT调度到只读的查询节点AG。前期升级后,系统架构已具备条件,由于担心AG的运行效率,AG暂时只接收订单复制数据,还没有承载订单查询流量。
一语惊醒梦中人,我眼前一亮。
“好主意!”明哲接过话说,“打开读写分离,再借助现有的余票内存计算,没准有戏!”
其他各组同事的思路好像也一下子被打开,从各自业务的角度又提出众多建议。我边听边在心里快速捋了一下思路,越发觉得这条路可行。在这个“十一”预售高峰马上就要结束,系统还在黑暗中徘徊的时刻,任何可能的办法都必须努力尝试。
“志远,从AT上切一半查询流量到AG”。小阎同学挥动灵巧的双手在键盘上做着操作,开始了Inetis中间件的调整,其他同事同步进行相关的配合操作。几分钟时间,50%的查询流量就从交易节点AT逐步转移到了查询节点AG上。
所有人都紧盯着AG的负载监控,生怕查询流量压垮这最后一线希望。
“订单时间下来了!“坐在角落里的立鹏大吼了一声。
当全体迅速把目光投向排队系统监控上时,那条一直在盘踞在“青藏高原”上的订单处理时间曲线已经神奇般下降了,虽然离“华北平原”还有一定高差,也算降到“黄土高原”上了。
“排队时间下来了!”
“队列长度下来了!”
好消息不断传来,就像是给氧充足后的运动员,系统终于跑得轻快了。
整个一上午,系统各个节点负载正常,几乎所有的运行指标都有了明显改善!
事实证明,读写分离让原来兼顾订单生成和订单查询的交易节点AT专注做订单生成的写操作,订单查询的读操作交由AG完成,读、写节点各司其职后,订单生成时间缩短,排队时间随之下降,队列长度也应声而减,系统整体处理效率发生了质的飞跃。
中午之后,我们又将全部查询流量导向AG,订单处理时间曲线由“黄土高原”下降到了“华北平原”!
到晚间停售前,排队系统自上线以来第一次处理完了全部订单!
仿佛从这天起,运气就开始眷顾12306了。
这次“十一”过后的2013年春运,12306最高日售票量达到了365万张,是2012年春运的三倍多。网上吐槽依旧,但数量大减。
这之后,又经过数不清次的迭代和优化,读写分离和排队系统成为了12306的最核心架构。
再以后,2014年位于铁科院的客票系统第二生产中心建成,12306形成双活架构,当年春运最高日售票量超过500万。2018年超过1000万,2020年超过1400万。网上吐槽声已渐渐微弱,包容和支持的声音渐渐成为主旋律。
现在回过头仔细想想,那一天我们的运气真好。这天的好运气,也许是机会恰好碰上了始终努力从未放弃的我们。
今天的12306,不是我们努力的结束,甚至不是结束的开始,至多只是开始的结束。