天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

NoSQL 在騰訊應(yīng)用實(shí)踐

  吳悅,騰訊大講堂特約講師,騰訊T4技術(shù)專家。先后參與騰訊分布式文件系統(tǒng)(TFS),K-V存儲(chǔ),SQL集群,接入網(wǎng)關(guān)(TGW)的設(shè)計(jì)與研發(fā)。見證了騰訊NoSQL從07年誕生,08、09批量應(yīng)用,10年至今應(yīng)用于騰訊開放平臺(tái)讓更多的第三方開發(fā)者使用;關(guān)注于構(gòu)建具有低成本、高性能、高可用,可擴(kuò)展,易運(yùn)營特點(diǎn)的互聯(lián)網(wǎng)海量后臺(tái)服務(wù)。目前任騰訊架構(gòu)平臺(tái)部平臺(tái)開發(fā)中心技術(shù)總監(jiān)。

  此文已發(fā)表在《程序員》雜志。

  一、前言

  NoSQL的歷史很長(zhǎng),最早可以追朔到Berkeley DB等嵌入式數(shù)據(jù)庫的年代。互聯(lián)網(wǎng)行業(yè)的高速發(fā)展對(duì)大數(shù)據(jù)的需求,為NoSQL的發(fā)展起到了推波助瀾的作用。互聯(lián)網(wǎng)時(shí)代的NoSQL,源起于Google為解決大數(shù)據(jù)的存儲(chǔ)與計(jì)算而提出的GFS + Bigtable + Map Reduce。隨后Hadoop(Hdfs+Hbase+MapReduce)、 Hypertable、Memcached,Tokyo cabiNET,Redis, Dynamo,Cassandra等等NoSQL產(chǎn)品雨后春筍般的推出,使得NoSQL技術(shù)廣泛應(yīng)用互聯(lián)網(wǎng)各個(gè)領(lǐng)域。

  在騰訊過去的幾年中,互聯(lián)網(wǎng)社交平臺(tái)取得令人矚目的發(fā)展。包括平臺(tái)用戶基數(shù)、在線、應(yīng)用數(shù)都取得突飛猛進(jìn)的增長(zhǎng);另外隨著開放的加劇,還有越來越多的第三方選擇社交平臺(tái)開發(fā)應(yīng)用。這些外部條件的變化對(duì)技術(shù)平臺(tái)的而言,也帶來了新挑戰(zhàn):除需要為用戶提供更強(qiáng)的海量服務(wù)外,同時(shí)還需要提供開放的軟件基礎(chǔ)架構(gòu)來幫助第三方開發(fā)海量服務(wù)。

  在解決這些問題的實(shí)踐中,總結(jié)了很多經(jīng)驗(yàn)。其中關(guān)鍵一點(diǎn)則是通過NoSQL技術(shù)來構(gòu)建海量服務(wù)的數(shù)據(jù)層,并通過分析和總結(jié)出不同的業(yè)務(wù)場(chǎng)景和技術(shù)特點(diǎn),為各種場(chǎng)景提供更合適的數(shù)據(jù)層解決方案。具體而言:

  • 相冊(cè)、日志等UGC類應(yīng)用,主要是自我產(chǎn)生數(shù)據(jù),他人以瀏覽為主,其技術(shù)特點(diǎn)是讀取量巨大,修改量低于讀取量一個(gè)量級(jí),數(shù)據(jù)量從幾百T至P級(jí)不等。提供SAS、SATA級(jí)的TDB、TFS解決方案。
  • 農(nóng)牧場(chǎng)等Social Game類應(yīng)用,核心數(shù)據(jù)是用戶背包數(shù)據(jù),互動(dòng)性很強(qiáng),其技術(shù)特點(diǎn)是巨大讀取量與修改量,數(shù)據(jù)量在百G級(jí)別。提供MEM級(jí)的TMEM解決方案。
  • 信息中心的Feeds類應(yīng)用,其技術(shù)特點(diǎn)是巨大的修改量與讀取量,數(shù)據(jù)量也在幾十T到幾百T不等。提供SSD級(jí)的TSSD解決方案。

  二、【2006~2008】因QQ相冊(cè)而研發(fā)TFS、TDB

  回顧NoSQL在騰訊的發(fā)展歷程,需要從2006年騰訊分布式文件系統(tǒng)TFS的研發(fā)開始談起,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ī)模下已難以為繼。通過分析,老架構(gòu)主要有下面三個(gè)問題:

  • 采用FC-SAN等高端企業(yè)級(jí)存儲(chǔ)硬件,這些硬件主要是針對(duì)電信、銀行等高ARPU值的行業(yè)客戶而生,價(jià)格通常比較貴,對(duì)盛行免費(fèi)的互聯(lián)網(wǎng)企業(yè)來說,成本壓力大。
  • 使用通用的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ù)來滿足系統(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ā)展。大致在2007年的時(shí)候,QQ相冊(cè)采用TFS的新架構(gòu)趨于穩(wěn)定,同時(shí)業(yè)務(wù)發(fā)展需要,對(duì)用戶上傳也放開了限制,用戶上傳瀏覽的活躍度上升的一個(gè)新的量級(jí),用戶目錄、文件索引等元數(shù)據(jù)規(guī)模突破千億。在使用MySQL應(yīng)對(duì)如此大規(guī)模的元數(shù)據(jù)的場(chǎng)景下,暴露出一些問題:

  • 索引低效:在QQ相冊(cè)的場(chǎng)景,上千億的記錄,使用MySQL的B樹索引索引的存儲(chǔ)量消耗都在數(shù)TB到數(shù)十TB。 海量索引在無法全內(nèi)存的情況會(huì)帶來IO的多次訪問,一方面增加了單次訪問的時(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ù)正常訪問相互交織在一起,從而影響到在線業(yè)務(wù)訪問。
  • 系統(tǒng)控制:MySQL更多針對(duì)是各種數(shù)據(jù)通用場(chǎng)景所做的設(shè)計(jì)與開發(fā),實(shí)現(xiàn)較復(fù)雜。在使用中遇到性能問題,異常故障時(shí)難以定位原因,對(duì)業(yè)務(wù)系統(tǒng)來說,已經(jīng)是無法打破的天花板。

  針對(duì)上面的問題結(jié)合業(yè)務(wù)需求,2007年底研發(fā)出TDB用以替代MySQL,TDB是一個(gè)典型的K-V存儲(chǔ)系統(tǒng)。其特點(diǎn)是:接口簡(jiǎn)單,性能高效,具備優(yōu)秀的擴(kuò)展能力。

  數(shù)據(jù)層面,索引設(shè)計(jì)使用HASH,通過KEY可直接定位磁盤物理偏移,避免B樹設(shè)計(jì)導(dǎo)致的二次定位磁盤性能開銷,解決索引低效的問題。同時(shí)采用16MB大磁盤塊的設(shè)計(jì),使得TDB的數(shù)據(jù)遷移速度可達(dá)網(wǎng)卡性能上限,解決遷移性能問題。另外系統(tǒng)可控性更強(qiáng),一方面因?yàn)槭菍S脠?chǎng)景,所以可以簡(jiǎn)化設(shè)計(jì),方便定位問題與優(yōu)化更新;另一方面打通了存儲(chǔ)系統(tǒng)到磁盤IO的控制路徑,避免MySQL的系統(tǒng)天花板。

  接入層面,為業(yè)務(wù)提供透明的訪問代理,從而實(shí)現(xiàn)無縫的水平擴(kuò)展。由于接口簡(jiǎn)單,并且是PAAS,業(yè)務(wù)使用非常方便,從2007年底開始,在Qzone、朋友、群空間等社區(qū)應(yīng)用中逐步取得了廣泛應(yīng)用

  三、【2009】Social Game催生的TMEM

  2009年有一款叫農(nóng)場(chǎng)的游戲大家應(yīng)該不會(huì)陌生,農(nóng)場(chǎng)的火爆帶動(dòng)了一批Social Game應(yīng)用的興起。其典型特點(diǎn)(1)好友間互動(dòng)性很強(qiáng),用戶背包數(shù)據(jù)會(huì)被頻繁的修改與讀取;(2)交叉訪問,無明顯熱點(diǎn)數(shù)據(jù);舉個(gè)例子來說,對(duì)于傳統(tǒng)的應(yīng)用來說,用戶間交互相對(duì)較弱,活躍用戶數(shù)據(jù)就是熱點(diǎn)數(shù)據(jù);而對(duì)于Social Game而言,用戶交互性強(qiáng),通過交叉訪問,活躍用戶也會(huì)頻繁訪問與修改非活躍用戶數(shù)據(jù)。(3)放大效果明顯;比如用戶每次登陸,通常會(huì)遍歷好友的農(nóng)場(chǎng),會(huì)遍歷菜地偷菜,捉蟲,一次偷菜、捉蟲會(huì)導(dǎo)致多個(gè)用戶的多個(gè)背包數(shù)據(jù)修改。這些行為一方面導(dǎo)致整個(gè)系統(tǒng)中無明顯熱點(diǎn)數(shù)據(jù),用戶傳統(tǒng)的讀緩存+寫落地的方式則難以很好的滿足這些業(yè)務(wù)的需求;另一方面龐大的用戶基數(shù)之上的火爆應(yīng)用,往往單款應(yīng)用就會(huì)有每秒數(shù)百萬次的訪問量,這種海量訪問不光對(duì)存儲(chǔ)層面,同時(shí)對(duì)網(wǎng)絡(luò)通訊層面提出更高的性能要求。

  針對(duì)以上新興面臨的問題,很明顯TDB并不能很好的解決,所以09年圍繞著網(wǎng)絡(luò)通信,內(nèi)存持久化兩個(gè)方面,做了大量的設(shè)計(jì)與論證。2009年底左右推出新的服務(wù)TMEM。

  核心有兩點(diǎn):

  TMEM的出現(xiàn)很好的滿足了業(yè)務(wù)海量訪問的需求。不過畢竟內(nèi)存介質(zhì)的成本比較高,所以TMEM在小數(shù)據(jù)量的場(chǎng)景下,性價(jià)比比較高。但針對(duì)于中大數(shù)據(jù)規(guī)模的海量訪問的場(chǎng)景,使用TMEM的成本偏高,而使用SAS介質(zhì)的TDB,則IO性能又不能很好的滿足。比如社區(qū)中各類應(yīng)用產(chǎn)生的Feeds,數(shù)據(jù)量數(shù)十TB至數(shù)百TB,每天訪問量數(shù)十億至數(shù)百億,應(yīng)對(duì)該場(chǎng)景傳統(tǒng)的做法必須得是前端內(nèi)存緩存加上后端落地存儲(chǔ)。分級(jí)存儲(chǔ)導(dǎo)致的內(nèi)存數(shù)據(jù)保護(hù),各級(jí)間數(shù)據(jù)一致性,另外最為關(guān)鍵的一點(diǎn),與Social Game類似,F(xiàn)eeds也是典型交叉訪問,熱點(diǎn)不是非常明顯,等等這些都是數(shù)據(jù)層亟需解決的難題。

  四、【2010】順SSD之勢(shì)的TSSD

  在2010年的時(shí)候,引入了SSD存儲(chǔ)介質(zhì),開始構(gòu)建TSSD K-V存儲(chǔ)系統(tǒng)。SSD的特點(diǎn):有著很好的隨機(jī)讀取性能,往往單盤可達(dá)數(shù)萬IOPS,遠(yuǎn)高于SAS、SATA的數(shù)百隨機(jī)IOPS。容量方面也接近SAS盤的容量,可達(dá)數(shù)百GB。但SSD也有弊端:(1)壽命有限,隨機(jī)寫入的壽命相對(duì)于順序?qū)懭霝?/10左右;(2)隨機(jī)寫入場(chǎng)景,性能易受干擾,毛刺率較高;具體而言:受限于物理機(jī)制,SSD的存儲(chǔ)單元只能先擦除才能寫入,并且擦除次數(shù)有限,針對(duì)NAND芯片,在3000~5000次左右。其中擦除單元是512KB,寫入單元是4KB。隨機(jī)寫入的場(chǎng)景,會(huì)帶來寫入放大。

  因此應(yīng)用SSD存儲(chǔ)介質(zhì),必須優(yōu)化隨機(jī)寫入性能。TSSD通過構(gòu)建地址映射,增加隨機(jī)寫入內(nèi)存緩沖區(qū),實(shí)現(xiàn)隨機(jī)轉(zhuǎn)順序的寫入;通過定期的垃圾回收機(jī)制,回收垃圾數(shù)據(jù)。

  TSSD系統(tǒng)中,單機(jī)可以支持容量數(shù)TB,性能隨機(jī)數(shù)萬次IOPS。這樣基于TSSD使用簡(jiǎn)單的架構(gòu),更少的機(jī)器便可支持到容量數(shù)十至數(shù)百TB,性能數(shù)十萬IOPS的Feeds類應(yīng)用

  五、NoSQL小結(jié)

  至此,業(yè)已構(gòu)建出基于內(nèi)存、SSD、SAS、SATA各類存儲(chǔ)介質(zhì)的存儲(chǔ)系統(tǒng),在上面也已提到各類存儲(chǔ)系統(tǒng)所對(duì)應(yīng)的使用場(chǎng)景。實(shí)際應(yīng)用中,各種業(yè)務(wù)場(chǎng)景千變?nèi)f化,有沒有統(tǒng)一的方法來判別和選擇合適的存儲(chǔ)系統(tǒng)呢?大致在1987年,Jim Gray發(fā)表了這個(gè)"五分鐘法則"的觀點(diǎn),簡(jiǎn)而言之,如果一條記錄頻繁被訪問,就應(yīng)該放到內(nèi)存里,否則的話就應(yīng)該待在硬盤上按需要再訪問。這個(gè)臨界點(diǎn)就是五分鐘。這個(gè)看似經(jīng)驗(yàn)公式,隱含的是硬件性能和成本兩個(gè)方面的因素。大約在1997年的時(shí)候,Jim Gray再次回顧了該法則,并引入了SSD,驗(yàn)證了該法則依然正確。這里不在贅述該法則。

  很多情況下需要一種直接根據(jù)業(yè)務(wù)的訪問模型,因此使用IO訪問密度,即每GB的存儲(chǔ)的IO訪問次數(shù),會(huì)更為直觀。那看看目前常用的幾種存儲(chǔ)介質(zhì):

  SATA:希捷2TB/7200轉(zhuǎn)/SATA(ST32000644NS)

  SAS:希捷300GB/15000轉(zhuǎn)/SAS(ST3300657SS)

  SSD:Intel 160GB X25-M G2 34nm

  DRAM:三星8GB DDR3 1333 REG ECC

  (中關(guān)村在線報(bào)價(jià),人民幣美元匯率:6.3157,2012/4/16)

  根據(jù)業(yè)務(wù)IO訪問密度,選擇合適的存儲(chǔ)介質(zhì),就是根據(jù)存儲(chǔ)介質(zhì)的IO訪問密度特性與價(jià)格來選擇性價(jià)比最高的存儲(chǔ)介質(zhì),即找到每種存儲(chǔ)介質(zhì)之間IO訪問密度的臨界點(diǎn)。

  臨界點(diǎn)G(X,Y).IO per sec per GB = X.IO per sec per GB * Y.price per GB / X. price per GB,X與Y分別表示對(duì)比的兩種存儲(chǔ)介質(zhì),且Y.IO per sec per GB 大于 X.IO per sec per GB。根據(jù)上面的公式,可以得到表格如下:

  怎么理解上面的公式呢?舉計(jì)算SATA與SAS之間的臨界點(diǎn)為例,G(SATA,SAS).IO per sec per GB = SATA.IO per sec per GB* SAS.price per GB/SATA.price per GB = 1/20 * 0.71/0.23 = 0.15 per sec per GB。假設(shè)現(xiàn)在有1GB的數(shù)據(jù),訪問密度是X,X小于2/3,那么使用SAS介質(zhì)則需要0.71$,如果選擇SATA介質(zhì),則需要X/(1/20) * 0.23 $。當(dāng)X為0.15時(shí),選擇SATA與SAS的成本是一樣的,當(dāng)大于0.15時(shí),則使用SATA的成本相對(duì)于SAS則高;否則則低。SAS比SSD,SSD比DRAM也是類似。

  實(shí)際上對(duì)于一款存儲(chǔ)介質(zhì)而言,IO訪問特性與單位每GB的成本是決定了其存在與生命力的關(guān)鍵因素。通常來講,其IO訪問特性一般來講不會(huì)有革命性的變化,而單位每GB的成本卻是可以控制的,所以廠商總是會(huì)圍繞容量來不斷的深入優(yōu)化。

  六、開放的挑戰(zhàn)

  2010年底開始,隨著開放的加劇,越來越多的第三方選擇社交平臺(tái)開發(fā)應(yīng)用。這些外部條件的變化對(duì)技術(shù)平臺(tái)的而言,也帶來了新挑戰(zhàn):除需要為用戶提供更強(qiáng)的海量服務(wù)外,同時(shí)還需要提供開放的軟件基礎(chǔ)架構(gòu)來幫助第三方開發(fā)海量服務(wù)。現(xiàn)有已成熟的NoSQL的架構(gòu)能否被外部第三方接受,其關(guān)鍵的一點(diǎn)是接口的友好性和兼容性。采用的標(biāo)準(zhǔn)化的接口,會(huì)大大降低外部開發(fā)者的使用門檻。因此,在2011年推出了CMEM 的NoSQL云存儲(chǔ)服務(wù),開發(fā)者可直接使用memcached接口,并即將支持redis接口。同時(shí)也提供了SQL云存儲(chǔ)服務(wù),開發(fā)者可用MySQL客戶端直接訪問。后續(xù)推出CFS文件系統(tǒng)云存儲(chǔ)服務(wù),開發(fā)者可使用posix接口訪問到TFS。

  回顧TFS、TDB、TMEM、TSSD、CMEM、CDB、CFS等一系列存儲(chǔ)系統(tǒng)過去近6個(gè)年頭的演進(jìn)發(fā)展。有兩點(diǎn)經(jīng)驗(yàn)可供分享:

  1、建議NoSQL開發(fā)者盡量選擇構(gòu)建PAAS服務(wù)。一方面對(duì)業(yè)務(wù)開發(fā)者而言,不需關(guān)心日常運(yùn)維,使用更為方便,易于接受;另一方面更容易形成用戶需求提出、實(shí)現(xiàn)與發(fā)布的閉環(huán),從而方便小步快跑,快速迭代出完善的服務(wù)。

  2、建議中小業(yè)務(wù)開發(fā)者盡量使用云服務(wù)。通常一個(gè)NoSQL服務(wù)所面臨的挑戰(zhàn)有兩個(gè)方面:一方面是大家所直觀感受的產(chǎn)品本身;另一方面是服務(wù)背后的運(yùn)營體系。類似與鐵路系統(tǒng)、消防系統(tǒng),用戶所直觀感受到的火車、鐵路,消防栓、消防車只是整個(gè)服務(wù)其中一個(gè)部分,是冰山海平面之上的部分;用戶所感受不到的鐵路規(guī)劃、調(diào)度系統(tǒng)、消防規(guī)劃、消防演練,報(bào)警系統(tǒng)等后臺(tái)運(yùn)營體系通常是冰山海平面以下的部分,往往需要有大量的人力和財(cái)力投入,可能是中小公司難以投入的。而在沒有穩(wěn)固的后臺(tái)運(yùn)營體系支撐下,類似動(dòng)車事故、火災(zāi)等生產(chǎn)系統(tǒng)故障難以避免,并最終為業(yè)務(wù)帶來不可估量的損失。

  從過去幾年來看,硬件在變,存儲(chǔ)介質(zhì)的性能與容量在不斷提升,并不斷會(huì)有新存儲(chǔ)介質(zhì)的產(chǎn)生;業(yè)務(wù)在變,不斷有新興的產(chǎn)品和新的業(yè)務(wù)體驗(yàn),并對(duì)后臺(tái)系統(tǒng)提出新的挑戰(zhàn)和需求;唯一不變的就是需要擁抱變化,為業(yè)務(wù)提供更貼切與更優(yōu)化的存儲(chǔ)服務(wù)。想了解更多關(guān)于騰訊TFS、TDB、TMEM、TSSD、CMEM、CDB、CFS等一系列存儲(chǔ)系統(tǒng)過去近6個(gè)年頭的演進(jìn)發(fā)展,大家可以到騰訊大講堂網(wǎng)站(djt.qq.com)翻閱架構(gòu)平臺(tái)部的分享文章,謝謝。

it知識(shí)庫NoSQL 在騰訊應(yīng)用實(shí)踐,轉(zhuǎn)載需保留來源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 亚洲 日本 中文字幕 制服 | 亚洲在线2018最新无码 | 欧美性情video sexo视频 | 精品国产在线亚洲欧美 | 99热久久精品国产一区二区 | 嫩草www视频在线观看高清 | 亚洲国产剧情中文视频在线 | 欧美xxxxxbb| 神马电影dy888午夜我不卡 | PORN白嫩内射合集 | 亚洲色噜噜狠狠网站 | 蜜桃传媒在线播放 | 国产剧果冻传媒星空在线观看 | 热の中文 AV天堂 | 国产色情短视频在线网站 | 欧美香蕉大胸在线视频观看 | 国产成人高清在线观看播放 | 99久久爱re热6在线播放 | 国产亚洲精品a在线观看app | 三级貂蝉艳史 在线观看 | 男女夜晚在爽视频免费观看 | 被吊起玩弄的女性奴 | 亚洲一区在线观看无码欧美 | 影音先锋电影资源av | 中文无码不卡的岛国片国产片 | 搞av.com| 国偷自产AV一区二区三区健身房 | 老司机福利在视频在ae8 | 亚洲黄视频在线观看 | 精品国产5g影院天天爽 | 久久操热在线视频精品 | jizz中国女人 | 无码任你躁久久久久久久 | 夜色爽爽爽久久精品日韩 | 伊人yinren6综合网色狠狠 | 九九99热久久精品在线6 | 捆绑白丝粉色JK震动捧喷白浆 | 天美传媒色情原创精品 | 色姣姣狠狠撩综合网 | 2020国产欧洲精品视频 | 学校捏奶揉下面污文h |