
二、【2006~2008】因QQ相冊(cè)而研發(fā)TFS、TDB
回顧NoSQL在騰訊的發(fā)展歷程,需要從2006年騰訊分布式文件系統(tǒng)TFS 的研發(fā)開(kāi)始談起,TFS目的是在公司內(nèi)部構(gòu)建統(tǒng)一的存儲(chǔ)平臺(tái),為各個(gè)BU提供文件系統(tǒng)服務(wù)。第一期的重點(diǎn)是要能夠支持到QQ相冊(cè)的快速發(fā)展。當(dāng)時(shí)QQ相冊(cè)使用傳統(tǒng)企業(yè)級(jí)存儲(chǔ)硬件+標(biāo)準(zhǔn)linux文件系統(tǒng)的老架構(gòu),在數(shù)百億的圖片數(shù),每天近10億長(zhǎng)尾下載的規(guī)模下已難以為繼。通過(guò)分析,老架構(gòu)主要有下面三個(gè)問(wèn)題:
采用FC-SAN等高端企業(yè)級(jí)存儲(chǔ)硬件,這些硬件主要是針對(duì)電信、銀行等高ARPU值的行業(yè)客戶而生,價(jià)格通常比較貴,對(duì)盛行免費(fèi)的互聯(lián)網(wǎng)企業(yè)來(lái)說(shuō),成本壓力大。
使用通用的linux文件系統(tǒng),對(duì)相冊(cè)海量小文件的場(chǎng)景,空間利用和IO性能都不能很好的滿足要求。
元數(shù)據(jù)與對(duì)象數(shù)據(jù)耦合,擴(kuò)展性和可維護(hù)性較差,單機(jī)故障以及擴(kuò)容都是異常繁瑣的運(yùn)維操作。
TFS采用廉價(jià)的存儲(chǔ)設(shè)備,在軟件層面使用類似軟raid的技術(shù)來(lái)滿足系統(tǒng)基于不可靠硬件的可靠性要求。將對(duì)象數(shù)據(jù)與元數(shù)據(jù)分離:對(duì)象數(shù)據(jù)存儲(chǔ)采用自研的CHUNK文件系統(tǒng),inode節(jié)點(diǎn)更小,空間分配采用了基于append + delete更為緊湊的管理方式,使得單機(jī)最大可以支持?jǐn)?shù)10億的圖片文件;元數(shù)據(jù)使用MYSQL存儲(chǔ)。系統(tǒng)架構(gòu)如下:

上面的架構(gòu)很好的滿足了數(shù)百億級(jí)別規(guī)模下的QQ相冊(cè)業(yè)務(wù)發(fā)展。大致在07的時(shí)候,QQ相冊(cè)采用TFS的新架構(gòu)趨于穩(wěn)定,同時(shí)業(yè)務(wù)發(fā)展需要,對(duì)用戶上傳也放開(kāi)了限制,用戶上傳瀏覽的活躍度上升的一個(gè)新的量級(jí),用戶目錄、文件索引等元數(shù)據(jù)規(guī)模突破千億。在使用MYSQL應(yīng)對(duì)如此大規(guī)模的元數(shù)據(jù)的場(chǎng)景下,暴露出一些問(wèn)題:
索引低效:在QQ相冊(cè)的場(chǎng)景,上千億的記錄,使用MYSQL的B樹(shù)索引索引的存儲(chǔ)量消耗都在數(shù)TB到數(shù)十TB. 海量索引在無(wú)法全內(nèi)存的情況會(huì)帶來(lái)IO的多次訪問(wèn),一方面增加了單次訪問(wèn)的時(shí)延,另一方面降低了磁盤的IO利用率。
數(shù)據(jù)搬遷:每天數(shù)億的圖片上傳導(dǎo)致系統(tǒng)擴(kuò)容,IDC分布策略,導(dǎo)致數(shù)據(jù)搬遷是常態(tài)。使用MYSQL,使用select逐條記錄方式搬遷,不同的記錄分散在不同的磁盤偏移,一方面搬遷速度較慢,另一方面由遷移導(dǎo)致的磁盤隨機(jī)IO與業(yè)務(wù)正常訪問(wèn)相互交織在一起,從而影響到在線業(yè)務(wù)訪問(wèn)。
CIO頻道人物視窗
CIO頻道方案案例庫(kù)
大數(shù)據(jù)建設(shè)方案案例庫(kù)
電子政務(wù)建設(shè)方案案例庫(kù)
互聯(lián)集成系統(tǒng)構(gòu)建方案案例庫(kù)
商務(wù)智能建設(shè)方案案例庫(kù)
系統(tǒng)集成類軟件信息研發(fā)企業(yè)名錄