本篇文章收錄於百家號精品欄目#百家故事#中,本主題將聚集全平臺的優質故事內容。讀百家故事,品百味人生。

應對雙11的技術體系,與12年雙11滾雪球般增長的數字一同迅速生長起來。隨着承載的消費者、商家不斷增加,它變得越來越龐大、複雜,每年雙11,最大的考驗是,如何在保持創新性的同時平衡穩定性? 建立面向失敗設計和擁抱失敗的文化。這是可能的答案。

文|李弘

失敗是必然的,隨着時間的推移,一切終將失敗。這是程序員中亭很喜歡的一句話。

在長達1年多的時間裏,這名阿里雲工程師在全力以赴推進阿里巴巴一個面向失敗的特殊項目。

2020年10月24日快凌晨2點,中亭和上百名工程師聚集在杭州一個報告廳中。這裏是常被外界提及的西溪園區1號樓7層,每年備戰雙11的光明頂。大家圍坐在一張又一張辦公桌前,電腦屏幕亮起,好幾臺電腦顯示電量即將耗盡。

程序員正緊張備戰雙11

模擬雙11流量洪峯時刻的全鏈路壓測即將進入尾聲。周圍窗簾全部拉滿,前方,一張超過10米長的大屏閃爍着深藍色的光焰,交易額的曲線沒多少波瀾,像一艘在大海里平穩行駛的船。

阿里零售技術事業羣總裁範禹悄悄從指揮室走出,他掏出手機,按下了一個按鈕。

有人叫了一聲怎麼回事?幾乎所有人抬頭望向大屏幕。

原本平穩的交易曲線像撞上了懸崖,瀑布一般飛瀉而下。指揮沙盤上,阿里位於張北的幾個機房飄紅,流量成功率降到了60%——這意味着一萬筆訂單中,有4000筆會交易失敗。

除了中亭和極少數幾個人,沒人知道這是一場內部突襲。

範禹按下的突襲APP,由中亭和同事們研發。這個按鈕,開啓了阿里技術團隊在真實世界的驚濤駭浪中一鍵壓測的序幕。

剛發起完突襲的範禹和霜波

一隻搗亂的猴子

從事技術風險工作的中亭,一直在思考一個問題,風暴來臨時,我們應該怎麼應對?

看似平靜的航行中,只有坐在船頭的人,能看到艙外的槍林彈雨。

由比特組成的賽博世界有一條規律與物理世界相同:在一個孤立系統裏,如果沒有外力做功,其熵,也就是混亂度,總是會不斷增大。

當熵積累到一定程度,各種各樣的失敗,也就發生了。這是必然事件,不是概率事件。

阿里巴巴的技術體系,與12年雙11滾雪球般增長的數字一同迅速生長起來。隨着承載的消費者、商家不斷增加,它變得越來越龐大、複雜,每年雙11,最大的考驗是,如何在保持創新性的同時平衡穩定性?

穩定壓倒一切每年在技術部門備戰區都隨處可見,但這又是一項前所未有的世界級難題。

建立面向失敗設計和擁抱失敗的文化。中亭的解決思路是主動製造更多混亂,將還未發生的失敗在可控半徑內提前爆破,從而給系統主動降熵。

背後的機制設計被稱爲混沌工程,它試圖模擬一隻搗亂的猴子在系統中上蹦下竄,直到搞掛系統。

從2016年備戰雙11開始,阿里巴巴開始定期進行模擬故障演練。

今年,隨着對穩定性的要求進一步提高,有人提議設計一個按鈕,演練從此升級成了突襲,並在阿里經濟體各業務線全面推行:只要各個團隊技術負責人按下發動突襲的按鈕,一場真刀真槍的戰鬥將在針對阿里自身技術體系的戰場上發生——真不僅意味着一線工程師不知道這是真實故障還是突襲,也意味着一旦恢復不到預期,給業務帶來的損失也是真金白銀。

動手設計突襲APP前,阿里集團技術風險部的產品專家漢英玩了幾十款策略遊戲。最後,她和同事設計出借鑑遊戲架構的APP,有歷史積分排名,有冠亞軍領獎臺,以此鼓勵突襲應對結果不斷進步的業務線。

技術團隊的模擬戰場取名爲WorldBox,既是上帝沙盤的意思,又諧音我的box。每個人不一定都是CEO,但他都有一個自己小小的技術世界。漢英說。

WorldBox模型

在突襲中,技術團隊被分爲藍軍和紅軍,藍軍負責出其不意發起進攻,紅軍則竭力抵抗。

APP上有一個供藍軍使用的火藥庫,裏頭裝着威力不同的武器,有的是炸彈,比如將一個機房全都斷網,有的是針管,比如在某個小業務上注入一點故障,有的是小刀,偷偷切斷某些產品的對外連接。將彈藥丟進戰場後,紅軍需要迅速將被困業務救出來。

負責發動襲擊的藍軍分爲兩種:一種是技術風險藍軍,可以理解爲職業藍軍;一種是散落在業務部門的業務藍軍,可以理解爲兼職藍軍。

相比處於防守方的紅軍,藍軍似乎佔據了有利地形。但在突襲開始推廣後,藍軍在內部輿論中並不佔優。

業務好端端的,爲什麼總是要搞我們?剛開始發動突襲後,藍軍經常收到紅軍尖銳的質疑,勞民傷財是第一大反對理由。甚至有不少紅軍直接給張勇和CTO程立寫郵件吐槽、抗議。

劍拔弩張相當長一段時間後,突襲機制才逐漸被紅軍接受。

硬漢紅軍

每次突襲來臨,紅軍方面對的都是一場與時間廝殺的硬仗。

7x24小時由中國區和海外區同學輪值的阿里運行指揮中心,會最早收到異常信號。運行指揮中心已將自動化做到極致,但每天仍需一位同學監控、管理海量的數據變化。

阿里運行指揮中心

數字反常波動,會導致系統自動發出叮叮的報警聲。運行指揮中心負責人玄燁對這個提示音太熟悉了,如同長期的一個習慣動作。每月2次的值班日中,他平均會聽到200多次。一個小時沒響起鈴聲,他會陷入自我懷疑:是不是這個系統有問題?有次坐地鐵,列車到站的鈴聲和他們的報警聲很像,他還恍惚了一下。

他要做的是,像條件反射般從無數雜音信號中分辨出真正的故障信號。

紅軍應對故障的基線是1-5-10 :1分鐘發現,5分鐘定位,10分鐘恢復。第一個環節,1分鐘內發出故障警報,幾乎已是極限挑戰,但玄燁和同事數年來很少失守。

每天遇到真正故障的頻次大概是七八次,操作手冊爛熟於心,不過面對有時一個月纔出現一次的P1或P2級重大故障,玄燁仍然會心跳一下,無論何時都不敢鬆懈。

收到警報後,業務方紅軍同樣要隨時響應。阿里雲網絡團隊的紅軍雲州每週要回一次在昆明的家。有幾次在去機場的路上接到故障通知,他立刻找地方緊急停車處理;登上飛機關機前,他一定在釘釘上做好交接;剛一落地,他即刻連上網絡,擔心一堆消息湧來。

爲了避免將家人吵醒,阿里集團技術風險部負責人霜波常年在睡覺時戴手環,電話一來手環就會震動。

由於需要極強的心理素質,紅軍普遍是硬漢型,男生佔絕大多數,不過統籌負責人霜波是女生。喜歡解決問題是他們普遍的特徵,不少人家中有模擬飛行器,阿里新零售穩定性負責人道延在公司空閒時會習慣性地玩魔方,看到魔方的六個面各就其位,他感受到一種成就感。

紅軍裏幾乎沒有人打遊戲,打手遊的時候,如果突然出問題了,特別影響隊友。

在阿里的頭兩年半,道延做運營商轉售業務,但他對技術更感興趣。每天下班後,他會花一個多小時,看業界前沿的社區和博客。

2016年雙11,交易量在零點的第二分鐘突然下跌了,大家都沒找到是什麼原因。事後覆盤,道延也被叫了過去,他分析問題出在沒給系統做預熱,人跑100米、跑1萬米都要熱身,系統沒有熱身、數據沒有熱身,也會有問題的。

後來發現果然是這個原因,從此享受找bug、修bug的感覺。很快,道延被調做穩定性技術。

紅軍積累的經驗,多數從過往的一次次失敗中挖掘。經年累月做消防員,道延總結出一條最寶貴的應對之道:火災發生時,第一步絕不是滅火,而是迅速挖出一條隔離帶,防止火勢蔓延,然後連接上提前開闢好的逃生道路,讓業務以最快速度逃生。

頭懸劍

紅軍一步步錘鍊出的防禦工具,很多得益於歷年雙11的教訓,甚至是一些敗仗。

優化和升級貫穿了長達11年的雙11技術史,成爲一筆無價且強大的裝備。

2009年,阿里第一次打造雙11,當時僅在杭州建了數據中心。到2013年雙11,杭州機房已經不夠用了。趕上那年杭州很熱,近40度的高溫幾乎持續了一個月,整個夏天都有互聯網公司可能被限電的傳聞。

萬一機房掛了怎麼辦?擔憂第一次浮現。

從此,阿里開始嘗試同城雙活,然後是異地雙活,最後是異地多活——在不同城市建立獨立的數據中心。

阿里雲數據中心

現實中暴露的問題也逼迫阿里加快升級的腳步。2015年,支付寶曾經歷過一次事故,誰也沒有料到,一場施工竟將光纜挖斷了。

這是一段痛心疾首的回憶。100多位技術負責人被拉入一個釘釘羣,羣名頭懸劍,彼時的阿里技術保障部負責人劉振飛下了軍令狀:立刻開啓容災演練和技術架構優化。

2016年1月23日,第一次斷電演練在深圳進行。當初的親歷者、阿里雲技術專家追源仍能清晰回憶起那個數字——23秒。

流量跌零,他們迅速將流量切至上海,然後靜靜等待。23秒後,原本奄奄一息的大屏,忽然有根線揚了起來,就像心電圖的復甦,在經歷一次死亡後復活。

開啓定期演練後,各種故障發生的頻次大幅減少,但每一次發生後帶來的仍是實實在在的陣痛。

每一個阿里新人,都被要求上阿里內部公佈客戶投訴的平臺進行聆聽,產品宕機後客戶的投訴電話最爲焦慮。有些是方言,不一定能聽懂,但從語氣裏也能分辨出對方的情緒。

2018年雙11,淘寶曾無法修改收貨地址。道延在聆聽小站上聽到一個投訴:一個消費者給父母買的家電送到了自己家,無法改地址,他工作又忙,最後白髮蒼蒼的老人只好自己過來,將家電從高樓層搬下,騎自行車運回去。

道延聽到後心酸不已,如果當時我知道這事,我寧願幫他去搬。

因爲清楚每一次故障背後意味着什麼,爭分奪秒是紅軍不自言的默契。

但無論經歷了再多演練,面對現實中一次潛在的重大失敗,身體還是會難以避免的緊張。遇到幾次大故障斷路時,道延特意觀察現場同學的狀態,有些人手還是抖的,明明想要敲A,卻敲成了B。

演練練的是人的經驗,但緊張感是練不出來的。

日後,他們發現,突襲練到了。

敵人,朋友

在10月24日這次突襲前,阿里已經進行了163次真實的自我攻擊,對象或隨機,或精準。

6月份,阿里CTO程立曾對一個業務條線發起突襲,結果並不理想,因爲新調整的技術產品還未在真實環境下被演練,故障處理流程也不夠流暢。突襲暴露問題後,業務團隊多次覆盤,去別的紅軍團隊取經,在APP上得分越來越高。

在一次次突襲中,紅軍練出了越來越快的反射弧。以前遇到問題,都是靠人去恢復,現在大部分靠系統自愈,先是連續、快速地檢測——有的檢測6次,有的高達十幾次,以防誤殺——一旦確認了,迅速把流量切走。

後來,有次阿里CTO程立再發動突襲,沒想到兩三分鐘就恢復好了。程立問身邊同學:這是真實的嗎?你們有沒有人偷偷泄露?

別說泄露,當突襲發動時,連身爲APP研發人的藍軍中亭也不知道是突襲還是真實故障。

對抗背後,藍軍和紅軍逐漸形成更深層的合作關係。

紅藍軍相會

設計突襲故障場景前,中亭領銜的藍軍先要去走訪一輪紅軍,看他們曾遭遇哪些歷史性的重大故障,對下游依賴如何、有沒有重大技術改造,和紅軍達成共識後,再針對性地找出他們的漏洞。

突襲結束後,紅軍和藍軍面對面坐下來,一起復盤。藍軍指出紅軍的問題,紅軍再予以反駁。戰鬥過程看着刺激,但能從戰鬥中學到什麼纔是更重要的。漢英打了個比方:最開始公司的業務是玻璃球,落到地上就碎了;經過月復一月的突襲後,變成了紙球,最起碼壞不了了;最終是要變成彈力球,摔到地上還能彈回來。

與藍軍共存久了,紅軍甚至學起了藍軍,內部自發組織成立了紅軍中的藍軍。

如果將突襲比作大考,雲州隸屬於要答題的紅軍。但爲了更好地應對大考,他團隊中的紅軍內部還會在每月底定期推出一次小考。這時候,雲州就客串出題的藍軍。我不停地去攻擊我團隊的人,他們都頂住了,纔可能扛住集團的突襲。雲州說。

高強度的突襲切切實實提升了系統的性能和表現。雲州記得,不過是三四年前,僅僅是網絡產品團隊一年的故障分就高達1000多分,而今年迄今爲止,故障分是29分。SLA(服務水平協議)中,阿里的電商業務承諾可用性達99.995%,意味着一年中只有26分鐘不可用——這個數字已經極低。

明年,目標是再次極限提升,不可用時間降到分鐘級。

指標落到了藍軍身上。中亭一開始壓力山大,防守是紅軍的任務,爲什麼讓藍軍去背這個指標?

後來他想明白了:既然我們要去驗收他們,必須跟他們站在一起,去改變。就像太極的黑色永遠都是不全面的,有了白色就會讓它更好。

生產突襲這場戰役,最終的目標,是讓每一個小二都可以參與到共建之中來。

隱蔽的角落

在阿里內部突襲APP上,最高級別的五星襲擊是讓支撐核心業務的阿里雲數據中心斷網。

阿里雲如同積木的最底層,抽掉了,整個玩具都塌了。相當於最基礎的水電煤,阿里雲網絡團隊紅軍雲州形容,千錘百煉阿里雲的容災能力極爲重要,因爲上百萬家外部互聯網、政務、金融等領域客戶把身家性命放在上面。

每一年雙11來臨時,除了阿里巴巴燈火通明,阿里分佈在全球的數據中心和服務器也在飛速運轉。單個數據中心同時運行着數十萬個進程,連對空調冷量的需求也比往常增大許多。熒光閃爍的數據中心交織成網絡,光點在中國華東、華北、華南聚集,也輻射至各大洲。

數據中心指揮中心

外界曾流傳的一個玩笑是:雙11零點在數據中心邊上剁手,網速更快。

十幾年前才一兩家數據中心時情況或許真是這樣,但現在,數據中心已遍佈全國,實現了幾乎零延時——從北至南,阿里已在22個城市部署了雲數據中心,其中包括五大超級數據中心,分佈於烏蘭察布、張北、南通、河源和杭州。

駐守的運維工程師是無邊數字世界的看門人。爲了確保這個世界的物理載體絕對安全,他們也開展了日常性的紅藍對抗和突襲。

有時,安排一人偷偷將某根線拔掉或是讓空調罷工,兩人比賽,看誰能在規定時間內找到根因,解決問題。

這個由人造設備構建的世界原本很脆弱。高溫、颱風、雷雨等極端天氣都可能影響到數據中心。工程師要做的是,窮舉所有問題的可能性,定期檢查和突襲所有風險點,併爲災害場景提供充足的冗餘性。就跟熊冬天來之前會囤脂肪一樣,不是說到了冬天再囤,會提前儲備好。

工程師們有自己的一套望聞問切:聞能聞出電線有沒有燒焦、柴油有沒有泄漏;聽就拿着一根螺絲刀,一頭對着水泵,一頭對着耳朵,聽水泵的軸承有沒有問題。

駐守杭州數據中心的工程師中,有一半都是處女座。

在雙11的高峯期,工程師們將平時巡檢的兩個小時提升至四個小時。今年,有一款新升級後的機器人陪伴他們,繁忙時可以代替他們巡檢,也能自動更換壞掉的硬盤。

數據中心地廣人稀,但迎接這一年中最盛大節日的儀式感不會減少。

雙11當天,一切萬事俱備後,除了穿上紅色的戰袍,高峯過後買買買,一個傳統是一起喫湯圓做宵夜。此外,各個數據中心還有地域特色:河源會喫蘋果和蘆柑,感恩平平安安,張北則喫烤全羊。

特殊的獎勵

內部的一次次演練和突襲,最終服務的是數以億計的外部消費者和客戶。

對阿里技術運行指揮中心的玄燁來說,社會的許多大小變化經過層層鏈條,最終投射到運行指揮中心的大屏上。春晚時淘寶交易量突然掉下來了,說明節目很精彩,吸引了全國觀衆的注意力。

去年有一次,阿里在東南亞的購物平臺Lazada交易量突然下跌50%。他們趕緊發出故障警報,經過幾分鐘排查,原來是東南亞發生了地震。

此前,有些養豬戶用上了物聯網,新生小豬的豬圈安裝上溫度傳感器,溫度採集功能異常會向運行指揮中心報警,平臺會做出自動化決策。時間同樣是最緊要的,長時間不做溫度控制,小豬們也許會被凍傷。

加入阿里前,玄燁很難想象,一家企業做的工作、開發的產品,竟滲透進國計民生的毛細血管裏。

今年2月,受疫情影響,學生們只能使用釘釘等軟件線上上課,家裏沒網的中學生甚至爬上鄰居家的屋頂借網。擴容需求量極大,所有預計第二天都被打破,就像洪水來襲,不停加固堤壩,可每往上蓋一層,洪水又變大了。

光是大擴容就發生了三次,整個過程持續了兩週。僅廣東河源數據中心,就爲釘釘連續擴容10萬臺雲服務器。

期間,釘釘創下一個紀錄:利用阿里雲彈性計算技術,在短短2小時內新增部署了超過1萬臺雲服務器。

小學生開課那天,阿里雲技術團隊將近六七十人在電腦前盯着,一上課,釘釘的流量一下上去了,但流量的洪水沒有沖垮他們日夜建造的堤壩。

過去數年埋頭打磨產品的付出,在這一刻得到肯定。

10月24日凌晨,雙11前最後一次面向失敗的突襲,是對阿里雲技術團隊的另一次驗收。

僅僅過了一分多鐘,經過運行指揮中心、業務紅軍等近十個節點處理後,針對阿里雲數據庫注入的P1級故障被修復。

如此快的速度,並非靠人,而是靠系統自愈。過去多次注入的破壞性攻擊,就像疫苗,不斷增強了系統的免疫能力。

這個晚上,還有另一層特殊意義:10月24日是程序員節。

在這天到來之前,範禹在光明頂講了一個故事:社會上有35歲程序員競爭力下降的焦慮,有同學問張勇,我過了35歲,還能不能專心寫代碼?

張勇回答,對於35歲以後立志寫代碼的同學,我120%鼓勵、支持、欣賞、敬佩,爲你們創造條件。阿里傳奇工程師多隆從未做過管理,靠着在一線寫代碼,他成爲了合夥人。

範禹與同事一起復盤

事實上,在幕後爲阿里巴巴抵禦失敗的紅軍們,平均年齡也超過35歲。他們是阿里巴巴最難得的尖兵,成員幾乎只從內部各業務線的骨幹中選拔。

我想趁着這樣的一個機會,倡導更多的同學能夠關注我們的代碼,能夠關注我們一線的工程師。範禹站在交易大盤前說。

10月24日零點過去一個小時,1024個雞腿擺在了光明頂門口。許多程序員對着拍照留念框,比起了V,這是對未來的期許,寄予即將到來的雙11:萬事俱備,勝利終將抵達。

相關文章