騰訊的硬盤裏,有互聯網的昨天今天和明天_風聞
观察者网用户_243785-2020-11-09 13:32
文 | 史中
2018年1月1日,太陽照常升起。
世界上所有的時鐘合謀,把最後一個90後推過了18歲的門檻。對於這些年輕的面孔來説,自由的風終於如期而至,只是其中難免裹挾着如刀砂礫。
長大好不好,試過才知道。
有老鐵感慨萬千,怒而把自己18歲時候的青澀殺馬特照片曬在朋友圈。果然,人們紛紛效仿,“全民曬18歲”的操作蔚然成風,各路神仙照片霸榜熱搜。

一個撲稜蛾子煽動翅膀都能引起颶風,何況千萬人一起搞行為藝術。
此時此刻,把地球輕輕撥動。遠在南海邊的深圳騰訊辦公室突然警報大作,幾十部手機同時收到風險預警——QQ空間的存儲系統遭遇意外的超大流量訪問,隨時有被擠爆的風險,引擎已自動開啓限流保護!
收到報警,騰訊存儲團隊的同學和QQ空間團隊的同學都是N臉懵逼,他們趕緊把實時數據拉過來查看,瞬間全明白了:
一覺醒來,全國人民都在找自己的18歲照片,可是當年存在舊電腦舊硬盤上的照片現在早就不知所蹤了。大夥兒一拍腦袋,沒商量就去了同一個地方,QQ相冊。
於是,原本一萬年都不會有多少人訪問的“冷數據”突然被大量調用,就好像一本老影集,上一秒還在角落裏吃灰,這一秒突然被家裏一百多親戚爭搶着看,臣妾着實有點頂不住啊。。。
這波“偷襲”來勢洶洶,騰訊存儲團隊的運維同學們把吃了一半的早飯扔在旁邊,像端起AK47衝鋒一樣噼裏啪啦地敲鍵盤,從四面八方緊急調集資源,給QQ相冊的冷存儲系統續上“超大杯”的緩存,用盡一切方法提高訪問性能。
忙了一天一夜,他們終於有驚無險地頂住了一浪高過一浪的訪問洪峯。
這件事,只是騰訊存儲團隊歷史上一個小得不能再小的波瀾,但回憶起來,這幫技術宅臉上都洋溢着幸福。他們比任何時候都更加確信:自己所守衞的數據,遠不止是冰冷的0和1,它們是鮮活的眉梢眼角,是億萬人的青春模樣。
存儲團隊,在騰訊內部是一個特殊的存在。
你可能有所耳聞,騰訊講究賽馬文化。無論是微信還是王者榮耀,當年都是同一個題目幾個團隊競爭着去做,最終“活兒好”的才勝出。但是從QQ時代開始,這麼多年過去了,騰訊的底層存儲團隊卻一直只此一家,別無分號。
這就奇怪了,這究竟是一羣什麼人呢?
這羣人,是騰訊最受愛戴的老CTO張志東親手招來的孩子,被稱為“Tony 的畢業生”;
這羣人,是騰訊第一批底層硬核技術的探索者,是互聯網技術史上的“別動隊”;
這羣人,也在漫長的時光裏開枝散葉,成為騰訊從互聯網公司向技術公司轉身的中堅力量。
這羣人在漫長的十幾年間,把代碼像地層一樣層層堆疊,做出精密又龐大的“分佈式存儲系統”,不僅扛起了QQ空間、微信、騰訊視頻、王者榮耀等等你能想到的幾乎所有騰訊產品,也幫無數互聯網公司、傳統企業甚至政府部門保管着他們的珍貴數據。
這羣熱血大叔手造的代碼裏,同樣埋藏着自己的青春記憶。

(一)神秘“少年班”
2006年,謝明博士畢業。
和很多憧憬未來的畢業生一起,他加入瞭如火山噴發的騰訊。
雖然騰訊的名字家喻户曉,但謝明進入的部門名字卻非常不性感,叫做“系統架構部”。
中哥得提醒你,可別被這個低調的名字騙了,這個部門其實是騰訊的“技術長老會”。全騰訊最有技術前瞻性的牛人都被 CTO 張志東拉進了進來,這幫“長老”的職責就是:為騰訊所有產品的技術架構做評審——説你行,你就行;説你不行,那就幫你弄到行為止。
如今騰訊赫赫有名的領軍人物,例如騰訊高級執行副總裁湯道生、騰訊高級執行副總裁盧山、騰訊副總裁姚星都曾經是這個神秘長老會的成員。這個部門有多兇猛,毋庸多言。
大牛人手畢竟有限,很快就忙不過來了。於是,張志東從一批應屆生裏“欽點”了12位精神小夥兒,放在了系統架構部培養。謝明就這麼稀裏糊塗地進入了大牛環伺的夢幻之地。
回想起來,那時候的日子特別輕鬆,有種恍惚還在學校的感覺。部門總共只有30多人,實際上盧山、姚星這些牛人導師只比我大幾歲,當時他們也很年輕,時常會拿最新的技術給我們出些題目做做。
謝明回憶。

謝明
站在今天回望,謝明這波“少年班”的人簡直不要太幸運,他們不僅加入了一個夢幻的技術團隊,還趕上了夢幻的歷史轉折點——幾十年一遇的技術大噴發。
就在謝明加入騰訊的2006年,Google 的三篇論文引爆了整個互聯網,分別是 Google FS(分佈式文件系統模型)、MapReduce(分佈式大數據計算系統模型)、BigTable(分佈式數據庫模型)。
別被一連串名詞嚇退,這三篇文章的核心奧義只有一條:
把無數廉價的服務器用縝密的代碼縫合起來,可以做出一台無遠弗屆的分佈式超級計算機。
這是人類第一次用鋭利的代碼語言把“分佈式計算”從模糊想象變成鋼鐵現實,雲計算時代的曙光在那一刻怦然閃耀。
看到這些論文的時候,騰訊系統架構部的所有大牛都為之一振。因為,彼時他們正在解決一個“世紀大難題”,而 Google 的思路又和他們不謀而合。
難題正是QQ空間給出的。
當時的那個世界,90後還沒成為苦逼的打工人,在玩非主流。社交網絡才剛剛誕生——沒人對這玩意兒的技術複雜性有充分的心理準備。

結果,QQ空間用户暴漲,帶來了甜蜜的煩惱——僅僅60萬人在線的時候,系統就跑不動了。(在今天動輒10億人在線的鵝廠看來,當年的問題着實是小兒科。)
實在頂不住,QQ空間團隊只好想出了奇招:讓用户“排長隊”,進不去的就先玩玩小遊戲,等排到了你再説。
QQ空間的總負責人吳宵光緊急把大牛湯道生拉去做了技術總監,這才慢慢讓用户在線數突破600萬,6000萬,6億。
併發在線(拉客)的問題解決了。很快,壓力就轉移到了存儲系統(接客)上。
對於很多人來説,QQ空間就是他們的“大相冊”,每天都會以恐怖的熱情上傳他們的照片。QQ空間團隊自己搞了一個通用的存儲方案,這個系統不難用,但問題在於:存儲擴容的時候需要複雜的手動操作,速度非常之慢。
本來以為擴容只是偶爾為之,複雜就複雜吧。現在可好,上億用户每天狂傳照片,擴容成了日常操作。
當時負責QQ空間存儲系統運維的是如今的騰訊運營管理部總經理鄭亞峯,當時他就沒日沒夜地加機器敲代碼擴存儲,死去活來,活來死去。結果很殘酷——仍然頂不住。

謝明回憶,最危急的時刻,QQ相冊只好每天限制800萬個用户上傳照片,經常還不到中午12點800萬個名額就滿了,只好明天請早。這導致了神奇的現象:每天半夜12點,就有用户定鬧鐘,爬起來搶着登錄空間上傳照片。
這樣下去是不行的。
難題擺在了系統架構部負責人盧山的桌面上——如果沒有一個好的存儲系統,那豈止是QQ空間,未來騰訊所有的業務都會遇到同樣的瓶頸。
這事兒有多嚴重,恐怕很難估量。
深圳大梅沙海灘邊的會議中心,盧山、姚星還有一眾技術大佬眉頭緊皺,他們越説越激動,最終拍案而起——系統架構部全員轉向,通力開發一套“分佈式存儲系統”,就不信頂不住幾億用户!
這一拍桌子,也就註定了一代神獸——TFS——的誕生。
(二)拯救大兵“QQ空間”
大佬們要親自整活兒了,一眾粉絲刷花點贊,板凳排排站,鑼鼓傢伙響徹枱面,只待一場浸透土地的榮譽之戰。
姚星使出畢生功力,構思了一套當時最牛的架構設計。要中哥説,這套系統的工作原理像個動物園:
1、每12台存儲服務器放進一個機櫃,叫做一個 Set。Set 與 Set 之間用分佈式系統連接,就好像好多籠子連綴成了一片超大型的“動物園”,這就是分佈式文件系統 TFS。
2、在“動物園”旁邊還有一個標記了各個“動物”位置的“導覽圖”,這就是索引數據庫。
3、每當用户來存儲照片,系統就會根據“導覽圖”給他在“動物園”裏指定一個籠子,把動物放進去;每當用户查詢自己的照片,系統就會根據這個“導覽圖”,去“動物園”裏再找到那隻動物給他。
架構明確之後,就由少年班的小夥子們一行一行地用代碼實現出來。
要知道,分佈式存儲系統是這個世界上公認最精密最複雜的玩意兒,論精密堪比瑞士手錶,論複雜堪比航空母艦。果不其然,越做,老鐵們就發現坑越多。
QQ空間上的圖片每張都不大,總數又非常多。難受的是:每一張圖片都對應索引數據,這就導致索引量也很大。系統頻繁地讀取索引,就會給索引系統的接口帶來炒雞大的壓力——這就好像遊客都擠在導覽圖那,動物園裏反而空空蕩蕩。。。
回到現實世界,用户實際的感覺就是:每一張圖刷出來的速度都會變慢。
如果你下載一個電影,耗時10分鐘還是20分鐘,你感覺上區別其實不明顯,反正都很慢。但是如果你刷一張圖,1秒鐘刷出來還是2秒鐘刷出來,你的感覺就會天差地別。
雖然受 Google 啓發,但面對這種海量小圖片的存儲模式,我們其實很難直接借鑑 Google 的架構,而是要自己獨創很多技術。
謝明回憶。
那邊QQ空間靠限流苦苦支撐,這邊系統架構部還在代碼的屍山血海裏艱難爬行。時不我待,謝明他們一夜之間都被迫從輕鬆的“新兵蛋子”變成了眼裏噴火的“沙場勇士”。他們每推進一行代碼,都距離拯救QQ空間更進一步。
這情景像極了《拯救大兵瑞恩》。
講真,這個團隊本身就是一台大戲,自帶反差萌看點:一方面,姚星是出了名的高標準、嚴要求、暴脾氣;另一方面,少年班畢竟剛畢業,很多思路着實是幼稚可笑中透着不自量力。
“姚總,ASN 最新的版本是1.7,你為啥還要讓我們用1.3嘞?”一位同學問。“廢話,1.3穩定可控!1.7出了問題你負責嗎?讓你幹啥就幹啥!問這麼多幹嘛?”姚星直接懟回去。
越是高標準,小夥子們越是犯錯誤,姚星氣得整天訓斥他們。小夥子們自己還沒覺得怎麼樣,隔壁組同事都看不下去了:“老姚你這訓得也太狠了,嗷一嗓子,把我們都嚇夠嗆。。。”
不過,今天的謝明提起老領導姚星,眼裏唯有感激——姚星手裏的戒尺,把這批年輕人對於技術的模糊理解變成了精準的肌肉記憶,這是一生的財富。

姚星
2007年春節前幾天,TFS 終於準備就緒。
QQ空間一刻都等不了,決定馬上從舊系統一點點搬遷過來。
我記得,當時春節我和老婆回她家,家人在那邊其樂融融,我在這邊抱電腦搬遷索引數據庫,也顧不上親戚怎麼看我。。。
謝明笑。
搬遷絕對是個技術活:
不僅要把上億用户的數據都“打包”清楚,還要把索引也“拆分”明晰,這有點像把長城上的每一塊磚都標號,然後拆掉從另一個地方重建起來;
而且為了挪動數據的時候不影響用户的正常使用,往往都要放在後半夜進行。
眼看就要到2007年五一節了,那時候五一還是“七天樂”,大家都會去旅遊。想都不用想,假期最後幾天肯定會瘋狂上傳照片。
謝明和夥伴們熬了幾個通宵,終於趕在五一前把所有QQ相冊的數據都搬到了新家——TFS。
猜猜最開心的人是誰?當然是天天生無可戀搞擴容的鄭亞峯。由於 TFS 自帶了擴容自動化程序,當年996的活兒,現在只需要敲幾下鍵盤就能完成。鄭亞峯熱淚盈眶,恨不得親存儲團隊的兄弟們幾口。(後來他果然以身相許加入了存儲團隊。)
那個五一,用户開始還按照慣性每天搶那800萬個上傳名額,不過很快他們就發現,騰訊好像已經完全放開了上傳的限制,想什麼時候上傳就什麼時候上傳,簡直不要太爽。
QQ空間得救了。

當時謝明大概就是這狀態。
直到這時,這幫兄弟們才有機會坐在岸邊,好好欣賞自己創造的這片代碼海洋攝人心魄的美。
這的確是一個令人驕傲的存儲架構。望遠方,一個個 Set 在賽博空間的地平線上匯成無邊浪湧。看腳下,磁盤裏每一個字節都被鋼鐵機械臂一樣的數字引擎引來送往,眼花繚亂,一派未來世界的朋克景象。
在後來的騰訊內部講義《解密騰訊海量服務之道》裏,專門有一章就叫“分 Set 部署”,羅列了這種分佈式架構方便擴容和運維的種種優點,驕傲之情四處盪漾。
然而,光芒的背後總是陰影。這種 Set 架構中潛藏了一個隱隱的傷痕。而這個傷痕,將在十年後下一次技術大噴發中被猛然撕裂成一道巨大的溝壑。只不過在當時的歷史情境下,讓這羣技術宅意識到問題所在有點強人鎖男。
況且在他們面前,還有更緊迫的事情要解決。
(三)知心愛人也得練“硬功夫”
時光轉眼到了2010年。
謝明已經百鍊成鋼,成為了存儲團隊的負責人,而當年的“少年班”又續了好幾茬畢業生,人丁興旺。
在煙火人間,除了QQ空間,這兩年人們還迷上了偷菜、搶車位,好多人用QQ郵箱收發郵件,好多人用QQ旋風下載電影,還有好多人去騰訊網看新聞。當然, 彼時他們還不知道,很快一個叫微信的東西就會橫空出世。這些炙手可熱的服務,無一例外都跑在存儲團隊開發的產品上。
很長時間存儲系統一直有求必應,宛若“知心愛人”。

但風雨還是眼看就要來。。。
當時騰訊所有的數據全部存在深圳的機房,每天全國人只要使用騰訊相關的的產品,就必然通過網絡連入廣東省。中國十幾億人可不是吃素的——你想象一下,就好像通向深圳只有幾條高速公路,全國人民卻每天都開車進進出出反覆漂移,不堵爆才怪——華南地區的骨幹網絡已經告急。
當時深圳機房的圖片流量每天都創造新峯值,每多1G,對公網來説都是很大的挑戰,我們也捏着一把汗。
而且對於騰訊自己來説還有個更嚴重的問題:深圳的機房已經全被填滿了,擴容出來的存儲服務器肉身都沒地方放了。
謝明回憶。
存儲團隊身上的壓力越來越重,如果解決不了這個問題,“空間”“視頻”“遊戲”“新聞”所有業務都將面臨數據無處可存的恐怖命運。
你還記得我們之前把數據比作動物,把存儲系統比作動物園嗎?這羣技術宅的緊急任務就是:在全國其他城市也迅速新建幾座“動物園”,然後把深圳的“動物”分給它們。
這第一個省外機房,團隊選擇了西安。
要知道,這不是普通的數據搬遷,從深圳到西安,不僅要跨越機房,還要跨越城市,更要跨越長江黃河千山萬水。這堪稱存儲產品歷史上難度最高的一次“乾坤大挪移”。
然而,謝明他們卻做出了一個大膽的決定:這次搬遷全部使用公網。
簡單科普兩句:公網就是我們平常上網用的線路,相當於民用公路,誰都可以上去跑,所以魚龍混雜有些擁擠還可能出事故,速度大概是500M 每秒;而專網就是運營商給你修一條“專用道”,你掏了錢,整個路上就只有你一輛車,速度大概是1.5G 每秒。
這羣技術宅為啥非不用專網呢?
兩地實在太遠了,專網也提供不了極端穩定的傳輸能力,況且還要額外花錢,本就不富裕的家庭雪上加霜。我們商量了一下,索性是技術人就對自己狠一點,來一次極限挑戰,用公網把數據搬過去才説明我們掌握了最硬核的技術。
謝明笑着説。
當時剛剛加入團隊一年的運維負責人高向冉完整見證了這次“血淚搬遷”。
2009年6月,數據開始進入嘗試性遷移。為了安全起見,最早遷移的都是 Alpha 賬户。Alpha 賬户就是騰訊員工自己的QQ號下面的數據。畢竟是自己人,就算萬里有一遷移出了問題,也都有個擔待。。。
雖然大家都屏氣凝神小心翼翼,然而墨菲定律還是生效了。
一方面因為沒有經驗,一方面因為壓力太大,跨城遷移的腳本接連出現了兩三次錯誤。大家驚出N身冷汗,幸虧高向冉他們多了個心眼,提前備份了數據,才沒有釀成大禍。
這個事情,和數據安全息息相關。每次出問題的覆盤都是很嚴肅的。那時候開會,總是姚總一個人開罵,先罵一上午下午再幹活。大家心裏別提多難受了,憋足了勁想要把遷移搞成。
高向冉回憶。
遷移腳本經過各種非人測試,終於萬無一失。2009年7月,遷移正式開始。
每天深夜,高向冉他們都攥着拳頭,護送珍貴的數據在公網中孤獨地穿過華夏大地,如此往復,螞蟻搬家。一個月後,西安機房宣佈:每一個字節的數據都平安落地!
這幫技術宅創造了中國大規模數據搬遷的“樣板工程”,經此一役,他們的戰場就不再是某個機房,某個城市,而是廣袤的土地。
那之後,騰訊每在一地建設機房,存儲系統就在那裏生根發芽。騰訊存儲毫無懸念地成為了全中國最大的分佈式存儲系統,團隊的同學上班都插着腰,可把他們牛壞了。信心爆棚的少年班決定挑戰其他的硬科技。
其中一個有趣的技術就是:“分級存儲”。
2015年,存在 TFS 上的文件已經超過了500PB,相當於8000個全世界最大的圖書館。
謝明和同學們隨即發現了一個有趣的現象:這500PB數據的“訪問密度”是不一樣的——這和動物園的情況相同:國寶大熊貓前面總是圍滿了人,獅子老虎前面的人就少一些,而像火雞這種菜市場能買到的動物就基本上沒人看了。。。
特別是騰訊推出“微雲”之後,訪問密度的差異就特別明顯了。用户把資料傳到微雲上,有時候幾年都不會看一眼。這些就成為了“冷數據”;而像一些遊戲裏的狀態參數,恨不得每秒鐘都要被改寫,那就是超級熱的數據。
謝明説。
熱的數據,可以用成本高昂但性能爆棚的高速內存來支持;反之,特別冷的數據就可以用成本低廉的HDD硬盤來存儲。這樣“分級存儲”,好處就是能省下不少錢。
技術大牛朱建平當時就參與了分級存儲的開發。

朱建平
例如,像農場、搶車位這種每秒鐘訪問3萬次的數據就用全閃存的 T-Memory 頂住;
像圖片索引數據庫這樣比較熱的數據就存在 SSD 硬盤搭建的 T-SSD 系統上;
像日常QQ空間的圖片就存在標準的 TFS 上;
像微雲裏用户上傳的文件就可以存在成本最優的 BTFS 上。
朱建平給我科普。
咋一下子多出了這麼多英文詞兒呢??
別害怕,你就把他們都當做存儲系統的不同形態就好了。有關 T-Memory 和 T-SSD 的故事,中哥在另一個故事《騰訊數據庫的三場戰役》裏有詳細講過,這裏給你説説成本最低的“BTFS”。
在 BTFS 上,朱建平他們降低存儲成本的法寶叫做“糾刪碼”。
啥是糾刪碼?
舉個例子:現在你就是這個 BTFS 存儲系統,你的任務是存儲兩個數字“1024”和“2020”。於是你拿來兩張紙,分別寫上“1024”和“2020”。但是現在有個額外的“安全要求”,那就是假設隨便一張紙丟了,你的數據還要在。
於是,最容易想到的辦法就是:你把兩張紙再抄一遍,就是“1024”、“1024”、“2020”、“2020”,共需要四張紙。
但是,你也可以用另一種省錢的方法:除了“1024”和“2020”這兩張紙,你再找來第三張,寫上“第二個數比第一個數大“996”。這種方法同樣可以保證隨便丟一張紙但數據不丟,你品品,總共只需要三張紙,成本大大的節省。
這就是糾刪碼技術。
除了糾刪碼,BTFS 存儲系統還會把文件壓縮之後存儲,這也能大大減少磁盤佔用(為了加速壓縮朱建平他們甚至還專門定製了芯片)。總之,用BTFS存儲同樣的內容,可以比標準的 TFS 節省一半多的磁盤,可以説相當會過日子了。
説到這些,謝明滿臉驕傲。要知道,正是憑這些硬技術,騰訊存儲系統服務了全球十幾億人,一個技術人一生中如果有這樣的作品,已經堪稱人間值得。
存儲團隊的黃金一代開始創造屬於他們的鼎盛王朝。
然而,彼時這幫技術宅們還沒意識到一個更加嚴峻的事實——騰訊存儲不是騰訊的存儲,而是全國人民的存儲。

2011年,騰訊存儲突破50PB。
(四)扛!扛!扛!
微信簡直是存儲團隊歷史上的歡喜冤家。
2014年春節,微信紅包橫空出世,全國人民發錢搶錢不亦樂乎,存儲團隊猝不及防扛了一波訪問壓力;2015年春節,微信贊助春晚,全國人民一起搖紅包,存儲團隊又死扛了一波。
好不容易到了2016年春節,存儲團隊目測今年終於沒啥事兒了。。。
那年帶着大家在辦公室值班的正是高向冉,晚上九點多,他看一切數據都很平穩,大家過年還加班真的很辛苦,於是決定開車去龍崗海底撈買食材,回來大家一邊吃火鍋一邊值班跨年。
我記得特別清楚,晚上十點十幾分,我剛進海底撈,手機就響起來了,支持微信的存儲系統莫名其妙地飆到極限。團隊給我打電話,從後台數據來看,突然大家都在轉發圖片,發朋友圈。
由於隱私規定,騰訊不能查看用户發送內容,所以沒辦法直接確定發生了什麼。。。幸好微信和我們都做了一些緩衝預案,能保證微信不掛掉。
高向冉回憶。
當時高向冉一個箭步衝出海底撈,啥也沒買, 開着車160邁的速度殺回辦公室。
回到騰訊總部,高向冉才恍然大悟,原來是另一家友商贊助了春晚,大家在抽福卡,結果最後一張你懂的福卡特別少,開獎之後,無論抽中還是沒抽中,大家都在微信羣朋友圈裏吐槽,反而對微信造成了巨大的衝擊。
那時候我才第一次意識到,微信贊助春晚,我們要幫着扛流量,別人贊助春晚,我們也要幫着扛流量。。。
高向冉笑。
意識到自己是一個“國民基礎設施”以後,存儲團隊的服務意識就變得特別強。快手做活動,他們要做預案,抖音做活動,他們要做預案,拼多多做活動,他們也要做預案。
但是,即便這樣,人算還是不如天算。
有一次,深圳突然刮颱風,人們早晨起來突然開始在微信裏各種發被颱風折斷的樹,存儲系統無端承受巨大的衝擊;還有一次,北方突然下大雪,人們也是集中時間各種發照片發視頻;還有一次北京三里屯,算了不説了。。。
也正是從那時開始,謝明深切地意識到,僅僅做一套能自動化擴容的系統還遠遠不夠,未來的世界需要的存儲得具備超高的“系統自治性”。
不過,這個“自治性”的存儲系統究竟應該怎麼做,由誰來做,彼時的謝明還看不太清。

2016年春節值班後,同學們合影。
(五)裂痕
有關騰訊雲的崛起,是騰訊歷史上另一個五彩斑斕的故事。
騰訊雲最早孵化於湯道生負責的社交網絡事業羣(SNG),聽這個名字你也會有感覺,騰訊雲和社交網絡好像八竿子打不着。你的感覺是對的,騰訊雲最初也只是一次嘗試,並沒有如今這麼高的戰略地位。
其實早在2013年底,騰訊高層就有過一次 PK,討論的題目就是:“騰訊雲這麼苦逼的活兒,到底值不值得賭上公司的身家性命去做。”
那次討論的結果是:“穩妥起見,再等一下”。
商業世界就是這麼殘酷。就是這“等一下”的功夫,阿里雲電光火石般異軍突起。友商的成功也在客觀上堅定了騰訊的信心。從2015年開始,各大機場開始出現騰訊雲鋪天蓋地的廣告,這在客觀上宣示着騰訊雲已經成為了騰訊的主力戰略。(有關騰訊雲的故事,淺友們可以去看**《騰訊偷塔》**。)

這是騰訊雲最初發布時候的照片。
顯而易見,一個雲計算系統只要對外服務,就必然提供存儲能力。騰訊存儲團隊和騰訊雲團隊的兩條故事線,就這麼猝不及防地撞了個滿懷。
回憶一下我們故事的開頭就會知道,湯道生和盧山這兩位頂級負責人,當年可是“技術長老會”的老戰友。如今湯道生要搞雲,盧山怎麼可能不幫忙呢?
不僅幫,還要用力幫,用盧山的原話説就是:要“往死裏幫”。
你可能會説,幫就幫唄,咋還要死要活的?把存儲系統開放給騰訊雲,賣給客户去用不就行了?
可不是這麼簡單。人人都會在家自己做火鍋,很多人也做得很好吃,但是如果讓你開個火鍋店,你能幹得過海底撈嗎?這説明一個道理:自用的技術和商用級別的技術,中間還差着十萬八千里。
存儲團隊一開始也沒意識到問題的嚴重,就吹着口哨把存儲系統直接包裝了一層接口,改名叫“騰訊雲存儲”,直接交給騰訊雲了。
講真,這個存儲模塊對於一個雲計算系統來説是完全夠用的,但是對於一個偉大的雲計算系統來説,還遠遠不夠。不好意思,騰訊雲還是想做那個偉大的雲計算系統。
果然問題出現了。。。最頭疼的問題有三個:
1、雲存儲系統的索引全部基於QQ號(或類似的ID),而其他公司就沒有QQ號這個東西,很難調整;
2、雲存儲使用的對外接口都是自研的,和國際不接軌,客户用起來莫名其妙,不方便;
3、雲存儲的成本有點高。當年騰訊自己產品的盈利能力強,並不那麼在意成本,但是你要拿到市場上按照市價賣,就會賠錢。
這些問題單拿出來哪一個都夠存儲團隊喝一壺了。
要知道,用QQ號管理數據是騰訊的創舉,這麼多年功勳卓著,解決了很多問題。2009年那次“世紀大搬遷”,也正是因為用QQ號做索引,才能打包得條理清晰,遷移順利。
沒想到,過去最大的優勢,反而成為了今天的劣勢。
苦難開始降臨。
作為存儲運維負責人,高向冉經常會收到騰訊雲的同事發來的一些截圖,內容是他們和客户的對話。客户要麼就是吐槽存儲性能不如友商好,要麼就嫌棄存儲價格比友商高。每一張截圖都直戳心窩。其實還有更難聽的話雲同事沒好意思截給他看。。。

高向冉
用户口碑確實體現在了市場份額上。
“2016年是我們和友商市場份額差距最大的時候,那時我的心裏真的有些動搖,難道我們的技術真的不如別人?”高向冉説。
最讓人煎熬的,倒不是技術差距,而是心態上的微妙變化——前些年,騰訊存儲是一個託舉着十幾億人的驕傲技術團隊;如今,自己卻突然要變成一個聆聽用户需求的“乙方”。
對方的每一個要求,聽上去都那麼刺耳。
足足兩年,大家在幽暗裏穿行,有不少新同學實在看不到光明,提出了轉崗,他們想去騰訊的“優勢”部門,去做那些一上線就有幾億用户的遊戲、App,去舞台中央,去追光之下暖暖身子。
高向冉抿抿嘴,告訴我他都會尊重年輕人的想法,他覺得每個人都有自己的追求,多説無益。“只是有時候覺得可惜,我能看到,有的小夥子真的很有潛力。”平常嘻嘻哈哈的他有點傷感。
“最艱難的時候,你自己想過走嗎?”我問高向冉。
“我沒有”,高向冉斬釘截鐵。“十幾年的戰鬥感情,我們這羣兄弟一起見證了歷史,我把這兒當家。”
其實那幾年也並沒那麼暗淡——不只有同學離開存儲團隊,也確實有很多同學申請轉崗來到存儲團隊,他們想做一件更久遠的,能在代碼世界留下深刻痕跡的東西,雖然為此付出的代價可能同樣深重。
這幫技術宅扶穩坐好,又重新上路。
他們最先利用內存數據庫和糾刪碼技術做了“分級存儲”,大大降低了存儲成本(就是在第三章我們講到的那個);
然後他們着手開發了不基於QQ號的索引系統 LavaDB,大大擴展了騰訊雲存儲的適用範圍;
隨後,他們又忍痛割愛放棄了自研的數據接口,全部改成了兼容 AWS S3 的國際接口。
這一波連環掌幹下來,騰訊雲存儲重回業界技術第一梯隊——“往死裏幫”的 Slogan 初見成效。
但是正當他們準備一鼓作氣再剛一波時,猛然發現自己面前出現了一座難以逾越的“大山”。
你還記得嗎,我曾經説,讓騰訊存儲團隊引以為傲的 Set 架構,其實隱藏着一個重大的裂痕。沒錯,這座繞不過的大山就是 Set 架構 本身。
站在2017年看,Set 架構的問題有兩點:
1、資源利用率低。由於存儲的最小單位是 Set,每個 Set 就相當於一個可樂瓶,可樂瓶裏的水不能溢出來,所以就要留有一定的餘量。例如每個 Set 都留有20%的空閒磁盤,寫到80%就不再寫了。這20%磁盤就是一種資源浪費。
2、接口閒置。由於數據是分 Set 存放的,所以早期的數據存在較早的 Set 裏,新數據存在新的 Set 裏。但客觀規律是,較早的數據訪問量會很少,新數據訪問量會很大。這會導致老 Set 裏面的讀寫接口處於閒置狀態,新 Set 的讀寫接口又時常處於滿載狀態。這也是一種資源浪費。
不過這裏還是要給 Set 架構説句公道話:在十年前,網卡硬件還沒有取得技術突破,數據很難在服務器間自由流動,Set 架構確實是當時技術條件下最優的解決方案,但是如今,主流網卡已經是萬兆吞吐,舊的架構就不是最優方案了。
一句話:舊有的存儲架構已經無法適應雲上的環境,騰訊雲在等待一個“雲原生”的存儲系統。
這時,一位“天降猛男”被謝明拉進了團隊,他就是雲原生存儲大神楊奮強。
(六)YottaStore 創生記
2017年,楊奮強來到騰訊雲存儲團隊。
楊奮強在分佈式存儲系統裏泡了多年,人狠話不多,一個雲原生的分佈式存儲系統早就在他的腦海裏了。
回憶起研發時的狀態,楊奮強用“清苦”形容。最開始團隊只有三個人。
雖然清苦,但謝明給了楊奮強他們更寶貴的東西——信任。他們可以毫不妥協地打磨自己心中的理想世界。

楊奮強
咱們先來硬核科普一下吧,這個雲原生存儲系統的結構是醬的:
1、拋棄了12個存儲服務器組成一個 Set 的結構,而是每個存儲服務器都通過網絡和其他的存儲服務器相連。這樣的話,所有服務器就連成了一個更為細密的海洋。
如此,就不存在為了每個 Set 預留20%空間的操作了。整個海洋可以存儲到99%,餘下的空白量的絕對值還是很大,不會出現溢出的問題。這大大降低了成本。
2、每一台服務器上存儲的內容,都是系統自動調度的——同一個磁盤上,這個區域存儲着QQ空間10年前的照片,下一個區域就存儲着微信羣裏剛剛分享的視頻。
如此,就不存在某台服務器滿載,某台服務器閒置的情況,整個存儲海洋的接口使用率是平均的。這大大提高了性能。
一個系統越精密,其實也就越脆弱。
分佈式存儲系統由於把文件都打散到了各個服務器,每一塊硬盤上都存儲了眾多文件的一部分,如果它突發故障,影響的範圍就很廣泛。(就像你同時做着100個甲方的項目,你要是猝死那影響可大了。。。)
舊的文件存儲方式:
新的文件存儲方式:
更主要的是,存儲系統變大以後,每時每刻都會有硬盤壞掉。就好像一個國家足夠大,一定每時每刻都有人生病一樣。
這個特性,就對系統自愈能力的要求高到變態。
打個比方,假設每塊硬盤就是一個人。以前的系統要保證100個人裏面有1個人都不生病,這個還容易一些。現在的系統要保證10億人裏1個人都不生病,這對防疫系統的要求就相當高了。
楊奮強説。
所以,楊奮強他們的做法是在存儲的全部路徑都加上自動校驗邏輯,並且在重要的硬件上添加了定期巡檢邏輯。如果一塊硬盤出了問題,系統會馬上把壞盤停用,再把裏面的數據自動恢復到其他健康的節點上,與此同時,通知運維人員去機房換掉那塊壞盤。
這一整套操作中,外界對於存儲系統的訪問不會受到絲毫影響。
而且,這套系統也可以零成本支持各種冗餘模式,可以三副本、四副本、糾刪碼,都可以根據需要自動調整;另外系統還自動支持你能想到的一切存儲介質:HDD硬盤、SSD硬盤、光盤、磁帶,什麼姿勢都能給。
你有沒有發現,以上説的種種金光閃閃的特性,都是系統自動完成的,不需要人的干預。
這就是謝明期待已久的“系統自治性”。
有了這種自治性,高向冉他們再也不用大年夜飆車160邁來解決系統擴容問題,也不會出現大家去QQ空間翻個相冊就把系統打掛的尷尬現象。
頂級的系統,需要頂級的工匠精神,整個系統研發歷時一年多,直到2019年才整裝待發。
到了最激動人心的環節——給新的分佈式存儲系統起個名字。
楊奮強他們算了一下:
數據的計量單位從小到大是MB、GB、TB、PB、EB、ZB,YB(每大一級就增加1024倍)。現在互聯網公司的數據量都是 EB 級別的,而理論上這個分佈式數據庫每個集羣就能放下1ZB的數據(1024PB),如果未來全世界建立1024個集羣,總量就能達到 1YB。而YB的全稱是 YottaByte。那我們的存儲系統就叫 YottaStore 吧。
YottaStore 的名字就是這樣來的。

楊奮強和他的 YottaStore 同學們
2019年7月,是 YottaStore 大規模上線的大喜日子。
作為運維負責人,高向冉又開心又害怕。開心的是,終於可以讓騰訊雲上的客户享受全宇宙最強的存儲系統了,把“難用”的帽子甩進南海,從此吐槽是路人;害怕的是,楊奮強把 YottaStore 的性能吹得這麼神,上線之後可別打臉啊。。。
可反觀楊奮強,卻跟沒事兒人一樣。系統上線第二天,就帶着同事們“懷着無比輕鬆而又一覽天下小的那種很吊的心情”,一起去吃了人均500塊的自助大餐。
YottaStore 對外承諾的可用性是至少14個9,意思就是整個生命週期內不出問題的時間要佔比99.999999999999%。這個數看着就眼暈。
牛X的是,YottaStore 上線之後整整三個月,系統沒有出過哪怕一個最輕微的問題,可用性是純純的100%。
經常夾在客户和底層系統之間的高向冉徹底釋放自我了:“原來客户提過來什麼需求,我都提心吊膽,生怕存儲系統的架構不支持。現在我放心了,您有啥要求,儘管提,我搞定!”
不過作為普通用户,人們並不關心 YottaStore 研發背後的熱血故事,他們感覺到的只有一點:騰訊雲存儲在參數不變的情況下,越來越便宜。
前兩天,騰訊雲官網上居然掛出了一個瘋狂的價格,深度歸檔的存儲,1GB只要1分錢每月。
我們就是要比別人便宜的情況下,自己還能賺錢。
楊奮強笑。
(七)少年
2018年9月30日,是騰訊歷史上一個繞不過的里程碑。
那一天,馬化騰發表內部信,宣佈了騰訊歷史上第三次架構改革,史稱“930變革”。
這次改革,湯道生帶領一眾人馬,成立雲與智慧產業事業羣,這就是大名鼎鼎的 CSIG。而為了更好地支持雲,騰訊專門成立了雲架構平台部,總經理由謝明出任。
兜兜轉轉這麼多年,謝明也從一個技術人漸漸成為了運籌帷幄的指揮官。
作為存儲團隊,原來我們的成就感來自於支持的業務發展,例如QQ空間有了6億用户,微信有了10億用户。但是現在我們會看營收,從1億到10億,從100億到200億。這種成就感是完全不同的。
謝明説。
這羣技術宅告訴我,騰訊雲存儲系統正走在“軟硬一體化”的路上。
存儲系統需要什麼樣的服務器,就和服務器製造商一起聯合定製,現在每三個月就會出一款性能更優的新機型,由於 YottaStore 無敵的自治能力,這些機型一接進去馬上就成為存儲海洋的一部分,可以對外提供服務。
這些服務器被閃閃發光的代碼連綴起來,彷彿生命睜開眼睛,望向星辰大海。
從2006年,QQ空間上的第一張圖片存到 TFS,到2020年,騰訊存儲系統上的圖片已經超過10萬億張。這10萬億張圖片裏,有你18歲蓄起的搖滾長髮,有你怦然心動的姑娘的臉龐,有你畢業前深夜無眠刷到的快手老鐵,有你30歲深夜加班朋友圈的自嘲,有你精打細算過日子的拼多多百億補貼。
這十五年的歷程,是騰訊這羣年輕人的奮鬥,恐怕更是一代中國人的歲月長歌。
想要了解騰訊,你一定會讀吳曉波的《騰訊傳》。但我覺得,真正的《騰訊傳》,仍然鮮活地流淌在謝明、高向冉、朱建平、楊奮強還有無數騰訊人的身上。
高向冉告訴我,從2013年開始直到今天,每年除夕他都帶着大夥兒值班到凌晨,已經快十年沒回家過年了。
“我和這些兄弟們見面的時間,比和我老婆都長。”他説。
路過野草幽香,也穿過泥沼荒涼,有人轉身尋覓彼岸,也有人創業重走長征。然而劫波歷盡,當年“少年班”的兄弟卻大多仍在此地,只是花謝花開,人無少年再來。
但時光從不會白白流走,他們曾如彼努力地守護互聯網的昨天。陽光下,他們的身影也正在召喚無數年輕人,和他們一起守護互聯網的今天和明天。
恰同學少年,中流擊水,浪遏飛舟。
人間又有誰比他們幸運呢?

2009年,“少年班”的合影。