2019 年双 11 来了。1 分 36 秒 100 亿,5 分 25 秒超过 300 亿,12 分 49 秒超 500 亿……如果没有双 11,中国的互联网技术要发展到今天的水平,或许要再多花 20 年。
从双 11 诞生至今的 11 年里,有一个场景始终在支付宝技术团队之中循环往复——每一年确定目标时,大家都将信将疑,或惊呼或腹诽:“不可能!太夸张了吧!”但每一年的夸张目标,到最后都能奇迹般地成为现实。
前一年需要拼命跃起才能够到的果实,后一年就会成为再普通不过的日常。不知不觉之间,双 11 已经从最初启航时的小船,成为了承载数十亿人快乐和梦想的巨舰。在这个举世瞩目的“奇迹工程”背后,是技术和技术人一起,十余年如一日,以难以置信的“中国速度”在不知疲倦地向前奔跑。
技术人的初衷往往极致单纯——既然决定要做,那就全力以赴,一往无前,但当他们一步一个脚印风雨兼程地走来,蓦然回首,就发现奇迹已经在那里了。
1 那时距离宕机只有几十秒
2009 年 11 月 11 日,对于支付宝工程师陈亮而言,本来是与往常没有任何不同的一天。
那年还没有支付宝大楼,更没有 Z 空间,他趟过早高峰的车流,坐到华星时代广场的工位上时,一封来自 CTO 程立的邮件发到了他的电脑里:今天淘宝商城要搞一个促销活动,预估交易量比较大,大家盯着点系统。
陈亮当时所在的团队主要职责是保障整个系统的稳定可靠。在促销活动的场景下,通俗地说来,就是要保障服务器“坚挺”,别被蜂拥而来的用户挤爆了。
淘宝商城在 2009 年的 8 月刚刚重组上线,日均交易量对于当时的支付宝而言,要稳稳接住不在话下。就算搞促销临时出现洪峰,不怕,扩容就好。
事实上也就是这么操作的。全团队的同学聚在办公室里,盯着电脑屏幕,只要发现交易量逼近系统承载上限,就马上进行扩容。
交易量的上涨有点不寻常,一片安静的办公室里本来只有键盘声,忽然有人高喊一声:“我秒到了!”紧接着又有人跟着喊:“我也秒到了!”办公室里嗡地一下,热闹了起来。
原来有人很好奇淘宝商城究竟在做什么促销让交易量涨成这样,点过去一看,发现有折扣高达 50%以上的“秒杀”,忍不住出手一试。
“已经想不起当时究竟秒到了什么,只记得大家都特别快乐。”陈亮说。
快乐,是陈亮对于这个促销活动最初、也最鲜明的印象。
不过除了一整天都忙于扩容的同学之外,当时支付宝的大多数人都对这场促销并无感知。“事后才知道前一天有促销,同事说流量有点猛。”现在已成为蚂蚁金服研究员的李俊奎说,运维负责人很紧张地在第二天的复盘会议上提出“抗议”:“淘宝商城那边在搞什么?支付量一下子提升了这么多,万一我们提前准备的量不够,就危险了。”
淘宝商城搞了什么?站在今天回头去看,他们只是搞了一件不算很大的事:在“光棍节”当天,联合 27 个品牌做了一场促销活动,单日 GMV 5000 万。
当时没有任何人能够预计这个促销活动日后会成长为什么模样,不过支付宝从数据的增长之中嗅到了山雨欲来的气息:这个活动带来的交易峰值超过平日的 5 倍,虽然这次平稳过关,但已经逼近了当时支付宝的承载极限。
2010 年的年中刚过,支付宝就去跟淘宝商城通气:去年那个促销,今年还搞吗?淘宝商城说,搞。
好汉不打无准备之仗,如何筹备“双 11”被提上了支付宝每周稳定性会议的议程。首当其冲的是要准备充足的容量。但是按多少准备呢?谁都没经验。
“拍脑袋估个数据,然后按预估数据乘以三去买机器,简单粗暴。”李俊奎直言不讳。
为了检验这样拍脑袋的决策行不行,他还和团队一起搞了个测试:通过手动更改配置,把多台机器上的流量导到一台机器上,测试一台机器的能接住多大的流量。“现在想起来,那就是压测最早的雏形。”
他们甚至准备了一个备用的工作联络群。当时还没有钉钉,工作群都搭在旺旺上,“万一旺旺服务器也出问题了,不能及时联络怎么办?”
筹备的时间虽不长,倒也方方面面都有兼顾,“但是不管事先做了怎样万全的准备,每年总有意外发生。”金融核心技术部工程师赵尊奎说。他当年所在的团队是账务会计组,一举一动都关系到钱,丝毫不容有错。
意外真的来了。
11 日凌晨,促销活动刚开始不久,支付宝的账务数据库就容量告急。
病来如山倒。发现问题时,状况已经十分危急,“只能再撑几分钟!”运维心急如焚,如果不能马上找到解决办法,支付宝就面临宕机风险,交易链路一断,谁也买不成。
怎么办?运维把心一横,说,砍了会计系统吧,给核心的账务系统腾空间。
时间已经容不得多加斟酌,一群高管站在背后,支付宝中间件团队的工程师蒋涛感到前所未有地紧张,“操作的时候手都在抖。”
这个当机立断的决策将支付宝从距离宕机只差几十秒的悬崖边挽救了回来。事后的数据显示,2010 年的双 11,参与用户达到 2100 万,总 GMV 达到 10 亿,是上一年的 20 倍,这是任何人都很难在事先预估到的涨幅。
“能想到会涨,但谁也想不到涨势会这么猛烈。”赵尊奎说,“也就是从那年起,我们开始隐隐觉得,更猛烈的还在后头。”
2 代码的力量
85 后的肖涵和 90 后的郑洋飞,都是在读大学时就知道了双 11。
肖涵喜欢网购,09 年就成了第一批尝鲜双 11 的剁手族,还在一个技术交流群里认识了参与过双 11 的支付宝工程师;郑洋飞常买《电脑报》,那上面说 2010 年双 11 一天的销售额等于香港一天的零售总额,他一边惊叹,一边心生向往。
“觉得好牛 B,想进去看看。”
当年互不相识的两个年轻人,不约而同地产生了这样的想法。
肖涵在 2011 年加入了支付宝,那一年支付宝已经开启了“上半年搞建设、下半年搞大促”的模式,筹备工作从 5、6 月起就着手进行,他刚一入职,就被调去开发流量接入和调拨系统 spanner。
这个系统相当于支付宝交易链路的第一道门户,“好比餐厅上菜的推车。一般餐厅,一个服务员只能每次上一盘菜,但双 11 的挑战,就是要让一位服务员同时能上十盘菜,因此我们需要一个推车。不过业界没有现成的推车能满足支付宝的需求,我们得自己造。”
差不多一整年的时间中,肖涵和团队为这个项目废寝忘食,spanner 终于在 2012 年的双 11 迎来了第一次大考。
谁曾想,意外又发生了。
那一年支付宝的大促监控系统也已经上线,流量曲线能够秒级实时显示,零点将近时,所有人都紧盯着屏幕,翘首以盼。
——零点一到,流量进来了,曲线开始增长,形成很漂亮的弧度,所有人开始欢呼,但是忽然,它跌了下去,然后开始像心电图那样抖动。
监控系统没有问题,也没有报错,为什么流量会进不来呢?
一石激起千层浪。他所能看到的抖动,同样实时显示在了淘宝的作战指挥室里。支付宝工程师贺岩正作为支付宝的唯一“代表”,在那里和淘宝的技术同学一起备战。这是个极其考验心理承受能力的工作,在支付曲线发生抖动的时刻,“淘宝的技术同学们一下子就把我围在了中间。连问‘支付宝出什么事了’?”贺岩回忆道。
肖涵脑子里一片空白,唯一的念头是,“不能让交易停下。”
0:00 到 0:20,短短的 20 分钟里,10 分钟用来定位问题,10 分钟用来解决问题;同样在这短短的 20 分钟里,外面已经天翻地覆:“‘支付宝不能付款了’登上了微博热搜,家人、亲戚、朋友都给我打电话问是什么情况,手机都要被打爆了。”
关掉了一个健康监控模块之后,系统终于恢复了稳定。比起紧张,肖涵感到的更是前所未有的震撼:原来自己所做的事已经和千万人息息相关,每一点微小的疏漏,所影响的都是难以估量的庞大群体。
“没有身在其中过,就很难意识到自己敲下的每一行代码有着怎样的分量。”郑洋飞说。他在 2013 年加入支付宝实习,带他的师兄巩杰说了一句令他印象极深的话:你看看那些客服 mm,你敲代码时仔细一点,少出一个错,她们就不知能少接多少个报错电话。
3 架构革命
跨过了 2012 年的坎儿,DBA 就再三给出警告:扩容已经到头了,顶多再撑几个月,按这个增速,如果不想点别的办法,肯定坚持不到明年双 11。
祸不单行。另外的“紧箍咒”也接连落下:Oracle 数据库的连接数上限成为扩容的瓶颈,更要命的是,由于机房的一再扩容,杭州的电力已不足以支撑。有时候为了保机房供电,“大夏天的,办公室都会停电,不得不运冰块过来降温。”巩杰苦笑着说,杭州的盛夏,谁过谁知道。
治标的方法快要山穷水尽,必须要从治本的角度出发寻找新的解决方案,比如,从架构层面“搞革命”,做单元化。
革命不是请客吃饭,要从架构层面做根本性的调整,举步维艰:一来没有任何成功经验可以借鉴,只能摸索着走;二来牵涉到众多部门,大家需求不同,意见难免相左;三来,既然要革命,那目光必须放得更加长远,不能只是为了解决今年或明年的问题,至少也要做未来三年的规划。
与此同时,在和淘宝商城——现在叫天猫了——沟通之后,支付宝毫不意外地定下了又一个令人惊呼“不可能”的目标:支付峰值每秒 2 万笔。
事关重大,人人都很谨慎。“光是架构调整的方案就讨论了很久。”陈亮说,作为项目的架构师,他费了不知多少口舌去说服所有人都认同这个方案。
重担的一头落在他的肩上,另一头则交给了 2010 年抖着手化解危机的蒋涛,蒋涛更愁稳定性问题:“做技术架构变更的同时还得稳住业务,这件事非常复杂,技术风险也很高。”
留给他们的时间也不多了。LDC 架构的立项已是 2012 年年底,距离 2013 年的双 11 不足一年,对于这样浩大的工程来说,就一个字,紧。
陈亮最初构想了一个宏大的体系,要把所有系统都一口气单元化,但这个方案被程立否了:“主要问题在淘宝的交易上,先把淘宝做了。”按他的意思,哪怕先做第一期,2013 年也必须上线。
一堆不可能的目标聚集在了一起。但目标既然定了,就只剩向前这唯一的方向。
“立项之后,我们几乎每个月都做发布。”蒋涛说,这个频率是一般项目开发的好几倍,但即便如此,直到双 11 之前半个月,整套系统才算部署完成,小错仍然不断,不过,随着越来越多的小问题和被发现和修正,他终于感到,“心里总算慢慢有点底气了”。
2013 年,支付宝 LDC 架构首次在双 11 亮相,支付宝也第一次派“代表”前往双 11 的总指挥室——阿里巴巴西溪园区的“光明顶”。
这位“幸运”的代表就是李俊奎。“我就是去当‘炮灰’的。”他笑称自己一走进光明顶就感受到了热烈的压力。当年的总指挥李津当着全集团几百位工程师的面,指着大屏幕点名喊他:“向秀(李俊奎的花名)!你看看支付宝!”
这项压力山大的任务,李俊奎连做了好几年,乃至于做出了经验。“首先是不要慌,无论接到什么反馈,先说‘知道了,我看看’。因为你一个人在现场其实什么也做不了,你的职责其实是传达,以最快的速度,把问题传达给后方的伙伴,然后,相信他们。”
他说这是支付宝技术团队的重要制胜秘诀之一:你永远都不是一个人在战斗,你也无法一个人战斗,但你的身后永远有最靠谱的伙伴。
至于这一年的战果如何,按蒋涛的话说,“硬扛过去了”。新架构有惊无险,走出了第一步。
评论