楠木軒

騰訊存儲技術背後的十五年往事

由 頻長志 發佈於 科技

作者:王德清

出品:雷鋒網產業組

前言:數據“橫行”的今天,用來存儲數據的系統至關重要。而一個大型存儲系統,從醖釀到誕生再到成熟,並不是一件簡單的事情。

騰訊作為國內領先的社交巨頭公司,不僅在2006年自研了TFS等存儲系統支撐了其內部90%+的數據存儲業務,在面向To B業務,騰訊在2018年又自主研發了面向雲場景的「YottaStore」存儲系統,存儲系統要換代,數據遷移是不可避免的,對騰訊這般體量的公司來説,需要莫大的勇氣。

契機之下,雷鋒網與騰訊存儲團隊6位老兵展開了一次深度對話,還原騰訊存儲系統變革背後的那些故事。

這一切要從2006年開始説起。

彼時,互聯網行業正處在社交化浪潮中,騰訊還並非是現如今這般規模的社交巨頭,雖然手握QQ這樣的爆款產品,但在SNS剛剛興起的時代,誰都無法保證可以笑到最後。

也就是這一年,QQ空間作為一款定位於“展示自我和與他人互動的平台”,被騰訊推了出來,一開始數據表現出乎意料的好,用户快速增長,活躍度很高,甚至收入也超出預期,但競爭也隨之開始了。

就在QQ空間發佈沒過多久,靠炒房賺得第一桶金的龐東昇決定回到互聯網繼續冒險,他以100萬元人民幣收購了張劍福創辦的個人數據庫公司10770。在稍稍弄明白SNS是怎麼一回事後,龐升東決定將10770改造成互動社交型的51.com。

在龐升東的心中,51的假想敵只有一個,就是騰訊的QQ空間。

只要騰訊出什麼新花樣,51在一個月內一定跟上。更可怕的是,在2006年的大多數月份,51的用户增長數一直在QQ空間之上,這讓騰訊非常緊張。

“QQ空間”保衞戰勢不容緩,而這場保衞戰第一戰,拼的是“技術”。

上線即“王者”

2006年,剛接手QQ空間的負責人聽到的都是投訴的聲音:「QQ空間無法打開」;「照片下載速度很慢」……而經過測試,打開一個空間,需要5秒鐘。

而要解決這些問題,首先要解決的就是存儲這個底層技術。

“2006年,我博士畢業來到騰訊的時候,騰訊還沒有統一的存儲產品或者技術平台,基本上都是各個業務自己去做一個存儲的系統。”騰訊雲副總裁、雲架構平台部總經理謝明對雷鋒網説到。

QQ空間登錄頁

據騰訊2006年披露的數據顯示,QQ空間上線3個季度,註冊用户數就突破了5000萬,月活躍用户數約2300萬,日訪問人數也已經超過1300萬。

那時候,QQ空間的存儲系統僅能支撐所有用户每天共上傳1000萬張圖片,顯然,面對用户持續不斷的增長,依靠此前不斷購買存儲服務器的方式來進行擴容,其速度是無法跟上用户內容的增長速度。

這些持續增長的UGC數據無疑將會給騰訊存儲帶來巨大挑戰,而如果無法突破這個挑戰,QQ空間第一戰的結果也就難説了。

而這個挑戰被一支剛剛成立的團隊接下了。

一支被騰訊主要創辦人之一、前CTO張志東稱之為“黃埔軍校”的團隊。這支團隊成立的第一個任務就是解決QQ空間發展所帶來的存儲問題,其第一任主帥就是現任騰訊公司高級執行副總裁盧山。

而擺在這個剛剛成立團隊面前的難題,並不亞於愚公家門前王屋、太行兩座大山。

技術人員都是有夢想的,他們希望用技術來解決一切,亦或是他們可以參考的只有2003-2004年Google發佈的關於三大件(BigTable、GFS、MapReduce)幾篇比較知名的論文。

“GFS算是最早期的企業級存儲轉向互聯網大規模廉價分佈式存儲比較早期實踐。那時候我們決定去做一個存儲系統,我們當時取名叫TFS。”謝明回憶道。

借鑑Google的幾篇論文,在團隊成立的第二年,TFS存儲系統就上線應用,並全面接管QQ空間的相冊業務。

再回到產品冊遇到用户投訴,空間團隊要求技術人員製作一張全國地圖,凡是打開速度高於5秒的被繪成紅色,3秒到5秒之間為黃色,低於3秒的被繪成綠色,地圖製作出來後,掛在牆上,大家看到的是“祖國江山一片紅”,其中,尤以西北、西南和東北地區的顏色最深。

只有一個基礎的TFS存儲系統顯然是不夠的。

“從技術角度來説,圖片都是百K左右的小數據,相比大尺寸的數據來説,這種存儲因為索引密集度更高,帶來的技術挑戰要大很多,一是要解決索引和數據尺寸協調的空間問題,二是要解決大規模下的成本問題。

於是存儲部門根據業務場景的演變,先後推出了適合各種不同圖片存儲場景的存儲系統,如支持實時回收的CTFS系統、支持高頻快速訪問的HTFS系統、支持EC編碼的BTFS系統、基於HDD的鍵值對TDB存儲平台等

就這樣,技術團隊一塊一塊地啃,在地圖上,綠色和黃色一點一點地增加。花了差不多一年的時間,到2007年年底,一張綠色的中國地圖終於出現在大家的面前。此次速度優化上的闖關,為QQ空間日後流量的倍級增長提供了至關重要的保證。

另一座“大山”

但在2009年,另一座大山擋住了“去路”,帶寬不夠了。

“那時所有的數據中心都是在深圳。當時的骨幹網帶寬跟現在實際上不能同日而語,是很小的,QQ相冊高峯時佔用40-50G,而1G的流量對公司的網絡就已經是很大的負擔了。QQ空間用户增長帶來大量的數據讓我們基本上把整個華南地區的骨幹網消化完了。”

擺在謝明他們面前的也就只有一條路了:啓動相冊一通點等項目,將海量業務數據從深圳向西安、杭州、廣州、上海等地分佈,訪問帶寬同時調度到天津、南京、東莞等成本更低的一通機房。

“我記得搬第一個設備是100T,現在看來100T不大,但那是騰訊歷史上最大的一次數據搬遷了。”

那時,沒有數據中心專線網絡可供騰訊使用,因此,謝明與團隊其他成員在半夜通過用公網出口把數據一點一點地“搬到”了西安等地。

而在做數據分佈搬遷的過程中,自身也在同步迭代演進。TFS從3份存儲演進為同時支持1/2/3份數據的多副本存儲;CTFS從2份存儲演進為同時支持2/3份數據存儲。TSSD平台也從僅支持單機獨享的Uin-Value定製存儲演進為支持多租户的通用Key-Value存儲

就這樣QQ空間在TFS存儲系統的支撐下,笑到了最後。(51.com被QQ空間擊敗,轉型做了遊戲代理,之後逐漸沒落。)

2009年騰訊存儲團隊合影照片

也就從2009年之後,QQ空間的收入大幅增加,成為排在網絡遊戲之後的第二大收入貢獻部門,黃鑽收入在2010年達到峯值,也因此QQ空間獲得2009年度的騰訊合作文化獎。

此後QQ空間的相冊日上傳照片數不再受限(用户體驗到的受限是騰訊產品部門策略),其照片累計存儲量也多達數萬億張。

TFS存儲系統也逐漸開始為QQ、微信、郵箱、微雲、流媒體加速等提供存儲服務,目前已經支撐起騰訊90%+的數據存儲業務。

微信帶來的“衝擊”

如果現在回憶2014、2015年的互聯網公司的競爭,可能很多人都會想到那時春晚的紅包大戰。

可讓謝明他們萬萬沒想到的是,給TFS存儲系統帶來下一個壓力的節點竟然會是移動互聯網時代的微信朋友圈。

“PC互聯網時代的競爭其實沒有那麼激烈,還在吃人口紅利,創業公司也並沒有那麼多,大家覺得日子都還是很好過的。”

從騰訊發佈的財報顯示,截止2014年底,微信月活躍用户達到5億,就是這些快速增長的用户讓存儲團隊感受到了前所未有的衝擊。

這裏要説一下存儲系統在微信中的主要作用,微信用户在給朋友發送圖片、視頻等文件,甚至發紅包的時候,首先這些文件要存儲在騰訊公司的存儲服務器中,而朋友在看這些圖片和視頻文件的時候,實際上他們是讀取了我們存儲在騰訊服務器的上的內容。發朋友圈亦是如此。

2014年,隨着4G網絡的普及,微信得以推廣,QQ也可以用手機登錄,因此,在春節,微信和手機QQ成為了人們送祝福的主要平台。

“比如在除夕,大家都會到朋友圈去送祝福、發照片、曬年夜飯等……在2014年的除夕,讓我們感受到了壓力。”騰訊雲架構平台部技術運營與質量中心總監高向冉如是説。

用户在除夕的0:00-0:30分之間都在用微信去給親友發送春節祝福,這對騰訊的存儲服務器的讀寫能力帶來了很大的挑戰。

微信打開頁面

需要科普的是,為了控制存儲的成本,存儲服務的磁盤容量其實是不斷變大的,但讀寫能力並沒有隨着磁盤容量的變大而提升,實際上單GB的讀寫能力是成倍下降的。

這背後其實,就是在遇到高併發(用户在同一時間點發消息/朋友圈)情況下,那時的騰訊存儲服務器的讀寫能力是無法滿足幾億用户高並發動作的,用户的直觀感受就是你的消息對方無法及時看到,你也可能無法及時收到朋友發給你的微信/朋友圈。

因此,存儲團隊聯合微信產品團隊首先在各個層面制定了相關的柔性策略,保證用户可以及時的將信息發出去並能被看到,而信息的存儲落盤在30分鐘內完成。

而在落盤的過程中,需要存儲團隊通過技術將磁盤的讀寫能力開放到極致。

“壓力其實是挺大的,因為你中間一旦有什麼問題,風險還是很高的。”

而在之後,這樣情況也並不只是在春節的時候發生,無論是哪家公司籌謀的活動,大家都會來微信朋友圈來“曬”。

“很多時候,友商活動策劃做的是否完美,我們可以‘檢驗’的,而檢驗的依據就是某一時間段節點給騰訊存儲帶來的壓力。因為微信的業務太大了,一個活動產生了爆點,就會額外給我們存儲帶來很大的壓力,因為用户所有分享在朋友圈的圖片和內容最終是要存儲在我們數據中心的。”

得益於2014年春節期間的經歷,騰訊存儲團隊在春節過後就開始針對這些“爆點”制定了柔性策略。

2015年春節,微信與央視合作,為觀看春晚的微信用户發紅包,也讓微信的用户量快速增長,除夕凌晨零點的朋友圈等存儲場景也達到了數十倍的增長。

2016年騰訊存儲團隊春節值班零點後留影

“微信是一個要出海的業務,出海其實給我們帶來了很多挑戰。”

説這句話的是現任騰訊雲架構平台部系統研發中心總監郭振宇:“微信出海是有一些競爭對手,特別是在東南亞有LINE,還有WhatApp,東南亞的人和自己國內人進行數據溝通的鏈路很長。”

顯然,這是不利於微信搶佔海外市場的。

作為公司業務的支持方,我們在存儲上面要配合微信團隊做更定製化的服務,因為微信也是騰訊重要戰略業務,所以當時我們團隊為微信做了很多存儲相關的業務系統。

郭振宇接着説:“比如怎麼樣讓圖片傳輸更快,我們在全國建立了很多接入點,用户數據只需要傳到最近的地方,國外只傳到國外數據中心,內地也只需傳到內地數據中心。”

而這一切,其實對於存儲團隊來説,都不再是什麼難題。

來自外部的“挑戰”

雲計算的發展,讓很多廠商都瞄向了To B的生意,騰訊雲亦是如此,但這又何其容易?

集團層要制定大的戰略,事業部要具有To B的思維,技術上也需要具有To B 的意識。

但騰訊的存儲部門卻在此走了一次“彎路”。

騰訊雲副總裁、雲架構平台部總經理謝明

“説到騰訊雲,其實在2012年騰訊開放平台就已經開始做雲了,但是開放平台跟現在的騰訊雲並不一樣,開放平台時候,我們和合作夥伴對接時我們是資源方,因為你要用QQ、QQ空間的資源。但是到後來騰訊雲做To B服務的時候,這時候要靠自己的實力去證明我們是專業的。”謝明如是説。

此時,支持騰訊自己業務的TFS存儲系統等,已經成熟且穩定。在騰訊看來,將TFS存儲系統進行一次產品包裝後也能服務好外部第三方業務。

谷歌其實就是這麼做的,目前,Google的雲存儲產品GCS建立在ColossusV2的根基上。ColossusV2是典型的元數據Federation架構的分佈式文件存儲系統,説白了ColossusV2就是Google由GFS存儲系統改進優化而來的。

“但Google的GFS存儲系統是誕生於雲計算興起之前。”現任雲架構平台部存儲研發中心總監楊奮強接着説:

那時候扁平式的對象存儲場景不像今天這樣豐富清晰,所以分佈式文件系統管理的單位是文件,過多過小的文件會導致元數據管理爆炸,所以主要面向幾十M的大文件,這樣一個百字節的元數據可以管理幾十M的大文件,元數據單字節管理效率大概百K級別,冗餘的目錄樹顯然對對象存儲場景是多餘而且低效的。

而此時,又有幾個問題擺在了騰訊雲存儲產品團隊和存儲技術團隊面前:

  • 雲計算迅猛發展,行業競爭的日益激烈,客户可選擇面較大,對功能、性能、質量、價格等方面的需求不斷增強;

  • 從自身現狀來説,數據量的不斷增大,隨之帶來軟硬件成本、運維成本、優化成本的日趨增大;

  • 行業下游的基礎設施,如大型數據中心、新機型、新硬件、各種存儲介質、網絡環境的不斷髮展演進。

在這個形勢下,2017年,騰訊存儲部門決定要做一個新的存儲系統,一個更適合雲計算的Blob存儲系統。

着眼於未來

“開始我們想的名字是BlobStorage。”

楊奮強笑着對雷鋒網説:“Blob的意思是一大塊連續的二進制數據,像一個視頻文件就是一個Blob數據,Storage的意思是存儲空間。”

顯然,這完全是大家印象中程序員的“正常操作”,但沒有獲得謝明的贊同。

最終存儲系統的名字被確定為「YottaStore」。

“我們是做存儲的,每天打交道的詞彙比如説GB、TB、PB、EB、ZB,而在ZB上面是YB,也就是YottaByte,目前全世界所有的數據加起來也不超過一個Yotta。”楊奮強接着説。

“另外這個單詞又朗朗上口,中文譯名‘有他’,給人安全可靠放心的感覺,我們在內部的分享課程,就是‘存儲有他,能力無限’。”

而這個名字,也代表了騰訊存儲部門的野心,這個存儲系統的理論峯值是YB。

“我們現在一個集羣可以存儲1ZB的數據,如果是1000個這樣的集羣,那我們就可以存儲一個YB的數據。”楊奮強很自信的説。

回到重做一個存儲系統的問題上,為何騰訊會做出這樣一個決定?

“我們當年將內部業務上雲的時候,TFS系統支撐我們內部業務的海量數據都是沒問題的,支持外部業務當然也沒有問題,但我們要把目光放到十年以後。”謝明如是説。

但事實上,重新自研一個存儲系統不是一件容易的事情。

再以谷歌為例,為什麼谷歌不做一個適合於GCS的雲上的Blob存儲系統?其實Google也深諳ColossusV2的問題,在幾年前,谷歌就組建了一個二三十人團隊去做這件事,但最終卻不了了之。

由於業務驅動着技術的變革,騰訊選擇了Google沒有成功的那條道路,YottaStore在2018年開始了研發,並於2019年正式上線。

“YottaStore,我一直説它是一個雲數據存儲系統,這跟當前業界絕大多數公司的做法是完全不同的,它的優勢也是很明顯的。”

楊奮強介紹説:“YottaStore的極限是一個集羣可以管理超上千萬台服務器,而要管理這上千萬台的機器,我們原數據管理只需要用600G左右的空間,用一台機器就能存下所有的索引結構,管理上千萬台的存儲節點服務器,這在業界是絕無僅有的。”

此外,楊奮強表示,YottaStore一個集羣可以同時支持各種不同的冗餘模式、任意的EC編碼,同時,集羣可以自適應各種各樣不同的機型;對於存儲節點的升級,無論集羣規模多大,YottaStore都可以在20分鐘內完成一個集羣的升級。

更令騰訊存儲團隊驕傲的是,YottaStore開始上線大規模支撐業務的前三個月一直維持百分之百的可用性,而目前系統仍實現單人值周零故障運行。

“YottaStore存儲系統上線之後,一反通常系統上線後的緊張忙碌的狀態。就在系統上線的第二天,我們研發團隊懷着無比輕鬆的心情去吃了一頓人均500多的自助餐,來犒勞自己。”

楊奮強笑着對雷鋒網説道。

用户最為直觀感受的就是,基於YottaStore存儲的騰訊雲COS存儲的最低價格為1分錢/GB/月,而其數據持久性達到了99.999999999%(11個9)以上。

YottaStore上線後即獲得了騰訊公司級的業務突破獎。

而如今,基於YottaStore存儲系統的騰訊雲對象存儲COS平台,正在為快手、OPPO、小紅書、海康、獵豹、58同城等幾十多萬個企業客户提供了可靠的存儲服務,整體數據量高達EB級別。

騰訊內部的“黃埔軍校”

從各種渠道的信息來看,關於騰訊這支存儲團隊的報道少之又少,但其實在內部,這支團隊被稱之為騰訊的“黃埔軍校”。

現任騰訊雲架構平台部研發中心總監朱建平也曾是這其中的一員。

“存儲部門走出了很多人去負責很多其它方向的技術研發。比如做FPGA異構加速的,做醫療AI,做視頻編解碼,同時還從這個團隊裏面不斷孵化出創新業務。”

朱建平接着説:“我們內部説存儲部門是專家的搖籃,分佈式存儲平台,系統設計也好,還是運營等各個維度,面臨的問題比較多,存儲部門特別能鍛鍊人,所以過往一般都是最好的畢業生放進來,然後這邊能力成熟了以後,慢慢又分流到其他戰場去。”

據雷鋒網瞭解,目前騰訊AI、服務器、運管、研效、搜索、CDN、視頻編碼等很多領域的帶頭人都是從存儲團隊出來的。

而也正是這樣的一個團隊,在為騰訊默默築建着技術的根基。