1. 程式人生 > >千億級網際網路平臺技術架構及背後那些事

千億級網際網路平臺技術架構及背後那些事

(一)​

這是一個從0到3000億的故事!
故事裡的那群人架海擎天,俱懷逸興壯思飛,欲上青天攬明月。那時的碼大叔也正風華正茂,意氣風發!我們浩浩蕩蕩地碾壓過肆意的年華,在程式碼的世界裡千騎卷平岡。

(二)

窗外,正淅淅小雨,很適合用來回憶。正如普魯斯特在《追憶似水年華》裡說的:當歲月流逝,所有的東西都消失殆盡的時候,唯有空中飄蕩的氣味還戀戀不散,讓往事歷歷在目。

X專案,剛開始只有一個高層業務模型,但產品具體應該怎麼設計怎麼呈現誰也沒有想清楚。一群人就那麼擠在南京奧體中心的公寓裡,人緊挨著人坐著,連伺服器都只能架設在衛生間的盥洗臺上。產品需求經過一輪又一輪的調整,程式碼經過一遍又一遍的推翻重寫,上線時間也一再地推遲。夏天的時候過了17點整棟樓的空調就自動關了,我們啪嗒啪嗒地敲著程式碼,汗水啪嗒啪嗒地敲打著桌面,經過了大半年的折騰和準備後終於接到通知真的要上線了。那時的心情反倒是很平靜,只是覺得該來的終於來了。

由於涉及到線上資金交易且單筆支付金額較大,系統接入了某銀行的銀企直聯介面,支援單筆高達300萬的支付金額。所以資金安全問題成了當時唯一的擔心,團隊做了很多的風險預案,包括系統對賬審計人工核算等等。上線前2天郭局長又把程式的事務控制臨時調整為SERIERLIZED最高隔離級別,那是我從業以來唯一一次使用到這個級別。就這樣專案終於悄悄低調地邁出了第一步,接著媒體開始鋪天蓋地報道:國家隊進場,行業將面臨新一輪的洗牌。

和很多網際網路專案一樣,系統架構剛開始是單一的,交易和資金耦合在一起。每一次需求調整都戰戰兢兢,如履薄冰,生怕影響到了資金模組。後來公司招來了一位支付寶的資深大佬,花名“溼手”,支付系統開始獨立出來,我也從那個時候開始了5年的支付生涯。

有一個關於程式設計師的笑話就是做飛機系統開發的人不敢坐飛機,做高鐵系統開發的人也一定不敢坐高鐵,因為大家都深知沒有0Bug的系統,不知道什麼時候一個隱藏的Bug就爆炸了,措手不及。做支付的這些年來每一個需求我們都腦洞大開,窮盡所有可能,包括“你身邊的朋友知道你的卡里有鉅額資金找了一個和你一模一樣的人去銀行以你的名義辦理了一張銀行卡,有一天你在常用的電腦上登入了網站忘了退出,偏偏又拉肚子去上廁所,情況緊急你還忘了帶手機,手機沒有鎖就擺在桌子上,此時如何保證賬戶安全?”等等。去年的時候還有一位企劃部的同事找我聊到了網站安全和專案效率如何平衡的問題,問我你們做了這些有意義嗎?產線實際發生過賬戶或者資金安全問題嗎?我說正因為有了產品運營、安全、研發、資料中心等一道又一道的防護屏障,因為我們所採取的一系列安全措施,所以系統累計資金處理超過3000億依然沒有出過一次資金損失,0差錯。我們要確保的是不要出系統性資金風險,而不是出現資金風險後考慮怎麼挽回。

公司也開始高速發展,一路披荊斬棘,歷經千磨萬擊,進入了行業前3名。我個人也跟隨著公司一起成長,由一名開發人員成長為資深專案經理,到助理專案總監,負責支付、大資料、供應鏈等幾個產品線的專案研發管理工作。

( 三 )

上個月我看到一篇關於騰訊保險的文章,裡面講到了保險系統上線的事情。微保團隊秣馬厲兵半年,經過各種測試後,終於準備“核武器發射”,啟動微保第一單:

CTO Jackie 伸出大拇指,像發射核彈的將軍一樣,把指紋貼向手機按鈕。 >“錯誤!”
幾十個老司機忙活了小半年,居然在眾目睽睽之下直接翻車,大家臉上都有點發燙。Jackie趕緊讓同學們檢查原因。忙活了半天,自己的軟體邏輯沒有找到問題,仔細一看,系統卡在了微信支付這邊。和微信同學一確認,才知道,微信支付有個“支付額度上限”,是5000塊。

由於錯誤,Jackie賬戶短時間被系統鎖定了,於是換成了資料中心負責人Lorry,保險金額2822.99!

核武器準備,二次發射!
“錯誤!”
保險公司系統給出來的提示居然是:繳費不足。
兩千多都已經扣出去了,你說我繳費不足??”Lorry 哭笑不得

仔細檢查,原來是微保的使用者業務系統算出金額出錯,2822.68元,少算了1分錢。

架構中心負責人 Hoky 突然想到,這很有可能是因為兩種系統使用的程式語言不同。一般 Java 保險系統設計的時候,價格會使用貨幣型別數值計算,單位是元。

就這樣團隊又花了四天時間把貨幣基本單位換成分,才終於成功。

當時看到這段我是比較驚訝的,騰訊這樣一個高手如雲的團隊居然連犯兩個支付系統最基本的常識性錯誤,而且是在系統上線前的最後一刻碰運氣被發現的,就像文章裡說的“幸虧當時我們觸發了這個 Bug,要是 Jackie 出手沒那麼大方,真的讓普通使用者遇到了這個問題,那問題可就大啦!”。

那時候就想到了X專案,相對於大型網際網路動不動就千萬級、億級的流量,X專案或許是微不足道的。但細細回顧,這個專案從0走到現在以來,我們經歷了國家政策多次調整,產品規劃變更與漸進明細,專案上百次的迭代釋出,開發上也踩過無數的坑,這裡面還是有很多可以拿出來細細品味的地方。專案上有很多先進的技術和嘗試,也有一些歷史包袱原因導致依然採用著與現代技術不符的設計在艱難負重前行。《月亮與六便士》的作者毛姆有一句很有名的話:“即使剃刀裡也有哲學。專案上也是如此,這個專案裡也有著系統設計的哲學,程式設計師的禪,我們自己理解的禪。

那些我們習以為常的,其實只是因為我們恰巧經歷過而已。有些人把經歷過的坑鋪平走過之後,遠遠地拋在了身後;有些人把坑的深度逆轉為自己的高度;
千錘萬鑿,始出深山,烈火焚燒若等閒。挑柴運水無非道,行住坐臥皆是禪。

( 四 )


在我的書架上有一本書擺放了很多年,《禪與摩托車維修藝術》,我時不時會拿出來翻一翻。裡面有一句話:“如果一直向前看,或者只看到目前的狀況,對你並沒有任何意義。一旦你回顧以往,就會看到一種模式隱隱出現。如果你由這個模式出發,那麼很可能會迸發出一些東西”。所以,這不是一個故事,這是一個關於專案的重新覆盤。

我有做工作規劃的習慣,做月計劃、周計劃,到每一天具體的工作,從14年至今在我的印象筆記裡記錄著我每一天的工作。我支付生涯的導師“溼手”在2015年11月06日和我說過一句話:當我們變得挑剔,我們才有提升的空間。接下來的一段時間我將以挑剔的眼光、現在的能力、現在的經驗回過頭來回顧這個產品,回顧這個專案,回顧整個系統的技術架構設計,甚至是回顧到某一個案例下現在的程式碼應該是什麼樣子。

讓我們在這條路上慢慢地走著,收拾這時光,眉目生歡!
下一期,再見。


架構師,十年戎【碼】,老【叔】開花。個人微訊號:qiaojs,註明CSDN,一起學習交流。