賬務三期

如果說支付寶三期對程立有特殊意義,那麼「賬務三期」則是支付寶所有技術人員共同的記憶。

2007年之後,淘寶業務量呈幾何級增長,這對支付寶的系統提出了不斷改進的要求。2007年上半年,支付寶計劃對系統進行改造,這時公司已經積累了三年多的數據,在諸多待改進的系統中,核心賬目系統最為關鍵。由於記載了用戶核心的資金和交易信息,核心賬目系統對穩定性要求很高,不能有絲毫差池,甚至連一個比特都不能錯,因為錯一個比特就是一個億或者十個億的差錯。

因此,核心賬目系統的改造如同一塊巨石壓在程立的心裡,但是為了繼續支撐淘寶業務的發展,支付寶的系統遲早要做一個「傷筋動骨」的改造。

這次系統改造有兩個主要目標:一是將核心賬目系統做一個分佈式的改造,二是將記賬模式全部改變。支付寶早期的模式是單式記賬,收一元就記一元,改造之後要做成一個符合標準的複式記賬,簡單地說就是收了一元還要知道這一元是從哪裡來的。這就相當於重新做了一個賬務系統。難度更大的是,在改造期間業務還不能停。

2007年10月,支付寶發佈完交易系統以後,所有人沒有休息,又都進入核心賬目系統的項目中來。當時的計劃是花三個月的時間將系統開發完,然後再停機發佈。

程立清楚,如果系統發佈不成功,導致用戶的數據和賬目錯了,支付寶就將面臨滅頂之災。2008年1月的一天,時任支付寶首席技術官邱昌恆問程立:「新系統可不可以發佈。」程立說:「不行,還需要一個星期。」一個星期過去後,邱昌恆再問,程立說:「還不行。」又一個星期過去了,答案依然如此。

邱昌恆急了。為了等新系統,支付寶的很多新業務都暫停了,業務開發的人員想等到新系統發佈後再做,但是連續幾周的「跳票」,導致很多業務創新不得不暫緩。

後來,邱昌恆拍板:「系統必須發布。」當時,大家對於這個新系統沒有十足把握,但箭在弦上,只能硬著頭皮上。

老苗的任務是在發佈期間將賬目系統的資金全部平掉,只有他告訴技術團隊可以開放,系統才能發佈。他和資金部的葛勇荻開玩笑說:「如果這個項目做不好,我們都從22層樓上跳下去。」「你是資金部,你先跳。但你放心,我馬上跟著你跳。」

為了穩妥起見,技術團隊申請八個小時的停機時間,他們會利用這段時間,把過去所有的歷史數據搬到新的系統裡。

2008年1月1日零點,系統停機。

停機以後,老苗和技術部的同事開始把原來系統的數據往新系統裡換,將數據換入新系統之後,還要做各種各樣的變化,如要讓原有數據符合新系統的數據格式,公司為此制訂的計劃是:停機八個小時,前面四個小時調換數據,後面四個小時進行數據核對。

然而在數據核對過程中,大家發現數據無法配平,而如果數據不平,系統就不能發佈。接下來的工作就變成了尋找錯誤的數據,然而在幾十億條數據記錄裡面尋找出錯誤,無異於大海撈針。

八個小時很快就過去了,沒有人發現錯在哪裡。15個小時過去了,問題依然沒有解決。直到當天下午三點,技術團隊才發現數據轉化中存在問題,經過一番努力,修訂之後的數據終於可以核平了。

直到這時,所有人才鬆了口氣。大家覺得新系統差不多已經可以發佈了。

為了確保萬無一失,程立和老苗等人做了一個決定,先將系統發佈出去放五分鐘,接著馬上收回來,這樣就可以對數據再進行一次核對。由於系統只放出五分鐘,即使出現錯誤,影響也是有限的。

下午三點,新系統發佈。五分鐘後,系統準時收回。正當所有人覺得可以高枕無憂時,核算公式檢驗的結果讓所有人都傻眼了——數據依然不對。

離停機發佈已經過去了15個小時,比原定的結束時間超過了7個小時。這時,大家勞累交加,所有人的腦子裡面都像裝了一團糨糊。

空氣凝固了。

到底哪裡出了問題?

在這千鈞一髮之際,程立不由自主地感覺到緊張和茫然,在責任感的驅使下,他下意識地向主控的電腦前走去。

「同學,讓一讓,我來。」程立拍了拍電腦旁的同事,自己坐了下來,眼睛在長長的公式上掃過,他覺得四周安靜極了,只有不斷起伏的呼吸聲。

在程立身邊圍著一圈項目工程師,他們的座位組成了二十多平方米的「核心作戰區」,這個區域雖然沒用擋板或者隔斷進行阻攔,但是「核心作戰區」四周好像有一條無形的高壓線,沒有人過來打擾。

兩個小時又轉瞬即逝。

這時已經到了下午五點。

網絡上就炸開了鍋:支付寶到底怎麼了?說好的8個小時,為什麼17個小時還沒有發佈?馬雲是不是攜款跑路了?……一時間,謠言四起。最不靠譜的一個謠言是,支付寶的一個「小二」在搬機器時,頭不小心碰到了機器,腦子裡的水進入機器裡,把電路板搞短路了。

但在這時,「核心作戰區」的人對這一切並不知情,他們好像在一個隔絕了一切的密閉環境中工作。為了不讓項目團隊感受到壓力,外面的管理層從不進來問,都在一旁靜靜地等著。

時任支付寶總裁邵曉鋒和支付寶首席技術官邱昌恆此時正在外圍,他們知道,在這個時候,不打擾是最大的支持。警察出身的邵曉鋒素有硬漢的冷靜,但在這時,他只能坐下來,一根接一根地抽悶煙。只有邱昌恆每隔兩個小時過來問一下情況。

外面的人緊張,「核心作戰區」的技術人員卻慢慢平靜了下來。因為要專注於解決問題,程立腦子裡雜七雜八的想法少了,他開始沉浸在檢查公式的過程中。用程立的話說,當他感覺到壓力大時,最好的解壓方式就是把心中的那個「我」消掉,完全沉浸到這個事情當中去,這時就感受不到壓力了。

此刻,程立突然發現,公式裡面有兩個數值正好差了一倍,把「+」號換成「-」號,數據就平了。當時他也不知道為什麼把「+」號變成「-」號,但是這樣做以後,一算確實可以調平數據。

在大腦緊張工作了十幾個小時之後,已經沒有人還有精力去想這一切到底是為什麼。

「好,就這樣發佈吧。」大家在商量之後,做出了決定。

下午五點,新系統發佈。

積攢了多時的用戶流量像潮水一樣湧來,兇猛程度完全超出了新系統的設計容量,系統放出去就「掛」了,「掛」了以後再「起」,再「掛」之後再「起」……雖然局面狼狽了些,但是所有人都清楚,只要數據不出錯就是成功。

系統的發佈讓所有人都鬆了一口氣,人們彷彿已經被掏空了身體,開始慢慢放鬆下來,但就在這時,意想不到的事情發生了。

突然,尖銳的系統報警聲響徹「核心作戰區」。

為了確保這個項目不出錯,支付寶的技術團隊為新系統專門建了一個監控系統,後者可以監測每一筆交易和資金,系統不停地報警,說明核心賬目系統出錯了,而此刻核心賬目系統已經發佈多時,幾億甚至幾十億元的資金已經湧入,如果有錯誤,現在已經不知道錯在哪裡了,想挽回也只是徒勞。

程立的臉一下子變得煞白。他癱坐在椅子上,發不出任何指令。一邊用殘存的一點點力氣檢查系統是不是真的出錯了,一邊想「完了,完了,支付寶完了,我完了……」

又過了20分鐘,當用戶的洪流慢慢洩下,系統穩定之後,程立平靜了下來,他又查了一遍數據,最後發現是監控系統本身的問題,賬目沒有出錯。

賬目三期發佈成功了!

2016年1月,當我和程立談及此事,他笑言自己的運氣不錯,現在回過頭來看,如果那時系統真的出現問題,或者支付寶沒有辦法那麼快地解決問題,就沒有支付寶和現在的螞蟻金服了。

付出沒有白費。2008年1月上線的賬務三期系統,直到現在仍在使用,作為支付寶非常關鍵的核心賬目系統,雖然後來經過了一些優化,但是基本的架構沒有變。更可貴的是,這個系統是具有擴展性的,很多新業務都可以在其基礎上不斷拓展。

賬務三期是支付寶歷史上最有名的項目,這個項目因為曲折艱難,而被很多當時參與的技術人員所銘記。這個項目中培養出來的很多技術骨幹,在日後的支付寶技術發展中都起到了關鍵性的作用。雖然項目的過程非常曲折,但是結果非常好。

《螞蟻金服》