EB級存儲引擎背后的技術(shù)
1、序言
自從互聯(lián)網(wǎng)從web1.0跨入到SNS時代,用戶開始從站點獲取數(shù)據(jù)跨入到用戶自己產(chǎn)生數(shù)據(jù),分享數(shù)據(jù),這時用戶的數(shù)據(jù)存儲開始急劇增長。更重要的是時代的發(fā)展,用戶內(nèi)容從文字時代跨入到了圖片時代,這個時代的明星產(chǎn)品--qq相冊的誕生,更是讓用戶分享數(shù)據(jù)達(dá)到了一個頂峰。在這個數(shù)據(jù)開始飛速增長的時代,當(dāng)時是沒有合適的存儲引擎和方案來支持的。在qq相冊飛速發(fā)展的同時,由當(dāng)時存儲系統(tǒng)的萬金油--mysql搭建的存儲解決方案,遇到了訪問延時高,擴(kuò)容困難,成本高,等問題。而這一類問題也同樣困擾著所有的互聯(lián)網(wǎng)公司。因為那時是一個沒有真正存儲系統(tǒng)的混亂時代。這個時代,我們的存儲還不到1PB。
這時在GFS,bigtable等論文中,各大互聯(lián)網(wǎng)公司從困擾中找到靈感,紛紛效仿推出類GFS存儲引擎。騰訊也不例外,由TEG--架構(gòu)平臺部研發(fā)的TFS存儲家族橫空出世,并推進(jìn)了由沒有定制存儲系統(tǒng)的混亂時代向TFS1.0的演進(jìn)。
2、TFS家族誕生
TFS家族1.0整體設(shè)計中包含對開發(fā),運維,資源管理等各個要素的考慮,并由各個相關(guān)要素的組件組成。其中最重要的兩個引擎組件為基于SAS和內(nèi)存的KV索引存儲引擎,以及基于SATA的數(shù)據(jù)存儲引擎。正是這兩個核心引擎解決了騰訊存儲在跨越PB級別中,所遇到的存儲上的難題。
2.1 KV存儲引擎特性
以農(nóng)牧場為代表,基于社交關(guān)系的各種應(yīng)用和游戲越來越多。這類應(yīng)用或游戲的特點是單個用戶的一個操作會涉及大量數(shù)據(jù)的讀寫,而且是對于數(shù)據(jù)的部分讀寫,對后臺數(shù)據(jù)存儲帶來的極大的性能挑戰(zhàn)。傳統(tǒng)關(guān)系型數(shù)據(jù)庫如Mysql更偏向數(shù)據(jù)一致性的保證,復(fù)雜的引擎設(shè)計注定了性能相對較低,雖然讀性能可以通過實現(xiàn)Cache解決,但是寫性能始終是一個不能規(guī)避的難題。因此,key-value形式數(shù)據(jù)庫特別適合,特點是小塊數(shù)據(jù)的快速存取、數(shù)據(jù)弱一致性。TFS家族的KV存儲引擎就是為這種業(yè)務(wù)場景而誕生的通用、高速、持久化Nosql存儲系統(tǒng)。KV存儲引擎具備高性能 、低成本、高可用的良好業(yè)務(wù)體驗,能輕松應(yīng)對海量數(shù)據(jù)訪問、存儲成本敏感、延時敏感等問題,并且安全可靠 ,擁有多份熱點數(shù)據(jù)和流水落盤,備份中心備份數(shù)據(jù)和流水,具備回檔能力。
業(yè)務(wù)根據(jù)數(shù)據(jù)讀寫時延的需求,可以自由選擇內(nèi)存,SSD,SAS等做為存儲介質(zhì),甚至可以更通用的讓系統(tǒng)自動選擇冷熱數(shù)據(jù)存儲在不同的介質(zhì)上。在內(nèi)存中存取延時達(dá)到***的us級別,支持超高并發(fā)的讀寫請求,普通單機(jī)可跑到30w/s讀或11w/s 寫。在加入多隊列支持和10G網(wǎng)卡后單機(jī)性能超過100w/s。這種讀寫性能,***的解決了農(nóng)牧場的高并發(fā)寫問題。
KV引擎最重要的特性是多個介質(zhì)集群中,可以自動調(diào)度數(shù)據(jù),下圖就內(nèi)存集群和SSD集群之間的數(shù)據(jù)自動調(diào)度。將熱數(shù)據(jù)存儲在內(nèi)存集群,冷數(shù)據(jù)存儲在成本更低的SSD存儲集群有幾個優(yōu)點:用戶訪問是透明的,成本是降低的,體驗是提升的。
2.2 文件存儲引擎特性
TFS文件存儲引擎分為數(shù)據(jù)層、索引層和邏輯層三個部分。數(shù)據(jù)層負(fù)責(zé)文件數(shù)據(jù)的存儲,提供k-v接口,Value長度一般限定為1M,大文件由邏輯層切分成多個片順序存儲。索引層包含文件索引、目錄索引和去重索引。文件索引保存文件的元信息(創(chuàng)建時間、修改時間、文件長度)、分片信息和業(yè)務(wù)自定義的blob字段。目錄索引提供按照目錄樹組織的索引結(jié)構(gòu),索引中只保存文件、目錄的元信息和在文件中的key。去重索引保存了分片的哈希值與數(shù)據(jù)層key的對應(yīng)關(guān)系,用于上傳時查找已經(jīng)存在的數(shù)據(jù)分片,避免重復(fù)上傳。邏輯層串聯(lián)文件上傳、下載、刪除、修改等所有接口的流程控制,提供原子操作。
TFS文件存儲引擎主要解決了索引數(shù)據(jù)的存儲問題,數(shù)據(jù)層的管理,以及業(yè)務(wù)文件存儲特性的需求。
在TFS1.0家族的強(qiáng)力支撐下,我們解決了在圖片時代,SNS場景的存儲問題,這時用戶的數(shù)據(jù)依然急劇增長,由PB級別,飛速發(fā)展到幾百P級別。用戶的SNS場景依然猛烈的發(fā)展,但用戶內(nèi)容卻慢慢的由圖片在向視頻轉(zhuǎn)變,隨著IT技術(shù)的發(fā)展,用戶的內(nèi)容質(zhì)量越來越高,視覺體驗越來越好,這都意味著***層的數(shù)據(jù)存儲爆發(fā)式的增長。而這些增長下,TFS1.0家族顯得越來越跟不上時代的發(fā)展,從而暴漏出了索引層成本高,功能不夠豐富,數(shù)據(jù)層的數(shù)據(jù)安全與成本之間的矛盾。在新時代新存儲矛盾的觸發(fā)下,TFS家族由1.0升級到了2.0版本,從而應(yīng)對降低存儲成本以及新存儲功能的需求。
3、新TFS時代
3.1.1 數(shù)據(jù)存儲引擎的升級
為了降低數(shù)據(jù)存儲成本,我們采取用計算換取空間的做法,與傳統(tǒng)3副本存儲方式相比, TFS新文件存儲引擎的副本數(shù)只有1.X份,在保證數(shù)據(jù)可靠性的前提下,TFS通過犧牲一部分訪問性能,換取更大的成本收益。采取的是RS編碼方式,在M份業(yè)務(wù)數(shù)據(jù)塊的基礎(chǔ)上編碼計算出X份校驗塊, 一共M+X個塊組成一個條帶落地存儲。
3.1.2 索引存儲引擎的升級
我們使用了多年的KV存儲引擎,也遇到了新的挑戰(zhàn),不支持范圍查詢接口。業(yè)務(wù)有相關(guān)需求時,需要通過大量數(shù)據(jù)組織邏輯,以構(gòu)建出適用的數(shù)據(jù)模型。所以TFS家族推出新的類LevelDB存儲引擎,豐富TFS家族中的組件,主要設(shè)計如下:
通過業(yè)務(wù)場景和底層平臺的深度配合,對外提供了豐富的數(shù)據(jù)處理接口。
3.1.3 業(yè)務(wù)形態(tài)的深度理解
在TFS家族核心組件全面升級的過程中,我們不光需要底層平臺的強(qiáng)力支持,更需要在對業(yè)務(wù)深度理解的前提下,做出精準(zhǔn)的存儲策略,打造出專業(yè)的定制存儲系統(tǒng)。
在基于TFS打造的專業(yè)圖片平臺,圖片平臺以穩(wěn)定可靠的圖片存儲及加速下載為基礎(chǔ),配套以強(qiáng)大的圖片處理、自動化的違禁圖審核功能,并針對業(yè)務(wù)模型做冷熱流量調(diào)度、存儲數(shù)據(jù)降冷等一系列成本體驗優(yōu)化,為圖片客戶提供了一套完整的解決方案。強(qiáng)大的圖片處理功能涵蓋了各類應(yīng)用場景,有圖片縮放、裁剪、旋轉(zhuǎn),圖片水印,格式轉(zhuǎn)換,信息獲取等,支持上傳時處理后落地存儲,也支持下載時實時生成。同時圖片豐富的表現(xiàn)力,也讓違禁圖十分活躍,圖片平臺配有上傳即可觸發(fā)的全自動審核流程,平臺具備整套審核及禁圖操作,業(yè)務(wù)無需參與即可輕松享有。
在文件存儲平臺上,在TFS家族中推出了一系列針對不同用戶場景使用的分支存儲系統(tǒng),包括適應(yīng)騰訊視頻等高頻存儲業(yè)務(wù)使用的多副本存儲引擎,適應(yīng)QQ離線傳文件等臨時存儲業(yè)務(wù)使用的即刪即用存儲引擎,等等。往往一個業(yè)務(wù)的文件不可能只適應(yīng)一個存儲系統(tǒng),大多數(shù)文件隨著時間的推移會逐漸變冷,通過對各個業(yè)務(wù)的深入理解,對用戶行為的深度理解,以及大量的數(shù)據(jù)分析,平臺實現(xiàn)了文件在各個存儲引擎之間的智能調(diào)度,大大節(jié)省了存儲成本。
3.1.4 自動的運營體系

架平的運營體系主要包括基礎(chǔ)配置CMDB、成本預(yù)算核算、報表&流程&測試、質(zhì)量監(jiān)控、現(xiàn)網(wǎng)操作這五大塊,這五大部分組合成一個完整的運營體,為部門業(yè)務(wù)安全可靠高效的運營保駕護(hù)航。
CMDB:基礎(chǔ)性的配置管理,包括了設(shè)備、機(jī)房、業(yè)務(wù)等基礎(chǔ)信息,主要提供設(shè)備資源提前報備、到貨驗收初始化、高危端口管理、設(shè)備轉(zhuǎn)移退役等功能;
成本預(yù)算核算:部門本身不直接對外營收,但卻承載了公司海量的存儲、CDN服務(wù),部門每年的運營成本占了公司總運營成本的相當(dāng)一部分,必然要有全面、嚴(yán)謹(jǐn)?shù)某杀竟芸睾怂悖缓蠓謹(jǐn)偟椒?wù)的各個業(yè)務(wù)部門;
報表&流程&測試:業(yè)務(wù)多報表多,需要有個報表系統(tǒng)來統(tǒng)一管理,現(xiàn)網(wǎng)變更的管理、突發(fā)事件產(chǎn)生后在哪里跟進(jìn)、驗證是否解決等,以及對現(xiàn)網(wǎng)質(zhì)量關(guān)鍵的保障一環(huán)就是模塊開發(fā)完成后發(fā)布到現(xiàn)網(wǎng)前,還需要先過自動化測試這一環(huán)節(jié),以便發(fā)現(xiàn)潛在的BUG;
質(zhì)量監(jiān)控:我們的眼睛,時刻盯著數(shù)十萬臺服務(wù)器、成百上千個業(yè)務(wù),一旦出現(xiàn)異常,最快秒級主動通知到負(fù)責(zé)人,降低對業(yè)務(wù)的影響時長;
現(xiàn)網(wǎng)操作:服務(wù)器達(dá)到數(shù)十萬臺、分布在各種不同運營商、甚至海外機(jī)房、aws等場景,我們有一套專用系統(tǒng)來支撐對現(xiàn)網(wǎng)安全、高效的操作。
4、結(jié)束語
正是有了新TFS家族,定制的KV引擎,文件存儲引擎,以及對業(yè)務(wù)數(shù)據(jù)的深度理解,多年來積累的現(xiàn)網(wǎng)運營經(jīng)驗,才確保了EB級的數(shù)據(jù),安全穩(wěn)定的運行。在這個過程中,我們積累了多年的海量數(shù)據(jù)運營經(jīng)驗,也會在接下來的系列文章中,依次呈現(xiàn),敬請期待。