偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

分布式存儲(chǔ)的元數(shù)據(jù)設(shè)計(jì)

存儲(chǔ) 存儲(chǔ)軟件 分布式
GridFS基于MongoDB,相當(dāng)于一個(gè)文件存儲(chǔ)系統(tǒng),是一種分塊存儲(chǔ)形式,每塊大小為255KB。數(shù)據(jù)存放在兩個(gè)表里,一個(gè)表是chunks,加上元信息后單條記錄在256KB以內(nèi);另一個(gè)表是files,存儲(chǔ)文件元信息。

[[247858]]

常規(guī)的存儲(chǔ)設(shè)計(jì)方法主要有以下幾類(lèi)。

  • 無(wú)中心的存儲(chǔ)設(shè)計(jì),如GlusterFS。
  • 有中心的存儲(chǔ)設(shè)計(jì),如Hadoop。
  • 基于數(shù)據(jù)庫(kù)的存儲(chǔ)設(shè)計(jì),如GridFS和HBase。
  • 繞過(guò)元數(shù)據(jù)的存儲(chǔ)設(shè)計(jì),如FastDFS。

下面我們逐一講述。

無(wú)中心的存儲(chǔ)設(shè)計(jì):GlusterFS

目前,GlusterFS在互聯(lián)網(wǎng)行業(yè)中用的較少,在大型計(jì)算機(jī)中用的較多。它在設(shè)計(jì)上具有以下幾個(gè)特點(diǎn)。

  • 兼容POSIX文件系統(tǒng):?jiǎn)螜C(jī)上的應(yīng)用程序無(wú)需修改就可以放到GlusterFS運(yùn)行。
  • 沒(méi)有中心節(jié)點(diǎn):不存在單點(diǎn)故障和性能瓶頸。
  • 擴(kuò)展能力:因?yàn)闆](méi)有中心節(jié)點(diǎn),所以GlusterFS的擴(kuò)展能力無(wú)限,擴(kuò)展多少臺(tái)服務(wù)器都沒(méi)有問(wèn)題。

我們不討論P(yáng)OSIX兼容的優(yōu)劣,集中通過(guò)GlusterFS來(lái)討論無(wú)中心節(jié)點(diǎn)設(shè)計(jì)中普遍遇到的一些難點(diǎn)。

1. 壞盤(pán)修復(fù)。無(wú)中心暗示著可通過(guò)key推算這個(gè)key的存儲(chǔ)位置。但是,磁盤(pán)壞了(單盤(pán)故障)怎么辦呢?直接的處理方式是去掉壞盤(pán),換上新盤(pán),將這些數(shù)據(jù)拷貝過(guò)來(lái)。這樣的處理方式在小型系統(tǒng)上非常適用。但是一個(gè)4T的Sata盤(pán),即使在千兆網(wǎng)下寫(xiě)入速度也只能達(dá)到100MB/s,修復(fù)時(shí)間會(huì)是11小時(shí)??紤]到一般的存儲(chǔ)滿指的是全部存儲(chǔ)量的80%,那么修復(fù)時(shí)間將達(dá)到八到九個(gè)小時(shí),所以不適合用于大型系統(tǒng)。大型系統(tǒng)磁盤(pán)多,每天會(huì)壞很多塊磁盤(pán)。如果磁盤(pán)是同一批購(gòu)買(mǎi)的,由于對(duì)稱(chēng)設(shè)計(jì),讀寫(xiě)的特性很相似,那么在壞盤(pán)修復(fù)的八九個(gè)小時(shí)里,其他磁盤(pán)同時(shí)壞的概率非常高。這時(shí),整個(gè)系統(tǒng)的可靠性會(huì)比較低,只能達(dá)到6個(gè)9或7個(gè)9。如果想達(dá)到更高的可靠性,只能通過(guò)瘋狂增加副本數(shù)這種會(huì)讓成本大量提高的方法來(lái)解決。

GlusterFS本身不用這種修復(fù)設(shè)計(jì),它的修復(fù)方式是在讀磁盤(pán)時(shí)發(fā)現(xiàn)有壞塊就觸發(fā)修復(fù),但這種設(shè)計(jì)的修復(fù)時(shí)間會(huì)更長(zhǎng)。該如何回避掉這個(gè)問(wèn)題呢?最簡(jiǎn)單的方法是將磁盤(pán)分成多個(gè)區(qū),確保每個(gè)區(qū)盡量小。例如,將4T盤(pán)分成50個(gè)區(qū),每個(gè)區(qū)只有80GB,并且記錄各個(gè)區(qū)的一些元信息。在我們從key推算存儲(chǔ)位置時(shí),先計(jì)算出這個(gè) key 所在區(qū)的編號(hào),再通過(guò)剛才的元信息獲得這個(gè)區(qū)對(duì)應(yīng)的機(jī)器、磁盤(pán)和目錄。這樣帶來(lái)的好處是,在磁盤(pán)壞了的時(shí)候,不用等換盤(pán)就可以開(kāi)始修復(fù),并且不一定要修復(fù)到同一塊磁盤(pán)上,可以修復(fù)到有空間的多塊磁盤(pán)上,從而得到一種并發(fā)的修復(fù)能力。如果將4T盤(pán)分成50個(gè)區(qū)(每個(gè)區(qū)80G),那么修復(fù)時(shí)間就可以從8到9個(gè)小時(shí)縮減到13分鐘左右。

2. 擴(kuò)容。如前所述,在無(wú)中心節(jié)點(diǎn)的設(shè)計(jì)中,從key可以推算它存儲(chǔ)的位置,并且我們要求key是均勻Hash的。這時(shí),如果集群規(guī)模從一百臺(tái)擴(kuò)容到二百臺(tái),會(huì)出現(xiàn)什么問(wèn)題呢?Hash是均勻的,意味著新加的一百臺(tái)機(jī)器的存儲(chǔ)負(fù)載要和以前的一致,有一半的數(shù)據(jù)要進(jìn)行遷移。但集群很大時(shí),數(shù)據(jù)遷移過(guò)程中所花的時(shí)間通常會(huì)很長(zhǎng),這時(shí)會(huì)出現(xiàn)網(wǎng)絡(luò)擁塞。同時(shí)數(shù)據(jù)遷移過(guò)程中的讀寫(xiě)邏輯會(huì)變得非常復(fù)雜。解決方法是多加一些測(cè)試,改善代碼質(zhì)量,不要出BUG。還有一種方法是,保持容量固定,盡量不要擴(kuò)容,但這與互聯(lián)網(wǎng)的風(fēng)格(從很小的模型做起,慢慢將它擴(kuò)大化)不相符。

3. 不支持異構(gòu)存儲(chǔ)。提供云存儲(chǔ)服務(wù)的公司必然會(huì)面臨一個(gè)問(wèn)題,有很多客戶存儲(chǔ)的文件非常小,而另外很多客戶存儲(chǔ)的文件非常大。小文件通常伴隨著很高的IOPS需求,比較簡(jiǎn)單的做法是將Sata盤(pán)(100 IOPS)換成SAS盤(pán)(300 IOPS)或者SSD盤(pán)(10000 IOPS以上)來(lái)得到更高的IOPS。但是對(duì)于無(wú)中心存儲(chǔ),由于key是Hash的,所以根本不知道小文件會(huì)存在哪里,這時(shí)能提高IOPS的唯一辦法是加強(qiáng)所有機(jī)器的能力。例如,每臺(tái)機(jī)器中將10塊Sata盤(pán)、2塊SAS盤(pán)和1塊SSD盤(pán)作為一個(gè)整體加入緩存系統(tǒng),提升系統(tǒng)的IOPS,但整體的成本和復(fù)雜性都會(huì)增加很多。另外一種方式是拼命擴(kuò)大集群規(guī)模,這樣整體的IOPS能力自然會(huì)比較高。

類(lèi)似的異構(gòu)需求還包括某些客戶數(shù)據(jù)只想存兩份,而其他客戶數(shù)據(jù)則想多存幾份,這在無(wú)中心存儲(chǔ)中都很難解決。

4. 數(shù)據(jù)不一致的問(wèn)題。比如要覆蓋一個(gè)key,基于hash意味著要?jiǎng)h除一個(gè)文件,再重新上傳一個(gè)文件,新上傳的文件和之前的一個(gè)文件會(huì)在同一塊磁盤(pán)的同一個(gè)目錄下使用同樣的文件名。如果覆蓋時(shí)出現(xiàn)意外,只覆蓋了三個(gè)副本中的兩個(gè)或者一個(gè),那么就很容易讀到錯(cuò)誤的數(shù)據(jù),讓用戶感覺(jué)到覆蓋沒(méi)有發(fā)生,但原始數(shù)據(jù)已經(jīng)丟失了。這是最難容忍的一個(gè)問(wèn)題。解決方案是在寫(xiě)入文件時(shí),先寫(xiě)一個(gè)臨時(shí)文件,最后再重命名修改。但由于是在分布式架構(gòu)中,且跨機(jī)器操作,會(huì)導(dǎo)致邏輯的復(fù)雜性增加很多。

簡(jiǎn)單總結(jié)一下,以GlusterFS為代表的無(wú)中心設(shè)計(jì)帶來(lái)的一些問(wèn)題如下圖所示。

分布式存儲(chǔ)的元數(shù)據(jù)設(shè)計(jì)

 

有中心的存儲(chǔ)設(shè)計(jì):Hadoop

Hadoop的設(shè)計(jì)目標(biāo)是存大文件、做offline分析、可伸縮性好。Hadoop的元數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)(NameNode節(jié)點(diǎn))屬于主從式存儲(chǔ)模式,盡量將數(shù)據(jù)加載到內(nèi)存,能提高對(duì)數(shù)據(jù)的訪問(wèn)性能。另外,放棄高可用,可進(jìn)一步提高元數(shù)據(jù)的響應(yīng)性能(NameNode的變更不是同步更新到從機(jī),而是通過(guò)定期合并的方式來(lái)更新)。

Hadoop具有以下幾方面優(yōu)點(diǎn)。

1. 為大文件服務(wù)。例如在塊大小為64MB時(shí),10PB文件只需要存儲(chǔ)1.6億條數(shù)據(jù),如果每條200Byte,那么需要32GB左右的內(nèi)存。而元信息的QPS也不用太高,如果每次QPS能提供一個(gè)文件塊的讀寫(xiě),那么1000QPS就能達(dá)到512Gb/s的讀寫(xiě)速度,滿足絕大部分?jǐn)?shù)據(jù)中心的需求。

2. 為offline業(yè)務(wù)服務(wù),高可用服務(wù)可以部分犧牲。

3. 為可伸縮性服務(wù),可以伸縮存儲(chǔ)節(jié)點(diǎn),元信息節(jié)點(diǎn)無(wú)需伸縮。

然而有如此設(shè)計(jì)優(yōu)點(diǎn)的Hadoop為什么不適合在公有云領(lǐng)域提供服務(wù)呢?

1. 元信息容量太小。在公有云平臺(tái)上,1.6億是個(gè)非常小的數(shù)字,單個(gè)熱門(mén)互聯(lián)網(wǎng)應(yīng)用的數(shù)據(jù)都不止這些。1.6億條數(shù)據(jù)占用32GB內(nèi)存,100億條數(shù)據(jù)需要2000GB內(nèi)存,這時(shí)Hadoop就完全扛不住了。

2. 元信息節(jié)點(diǎn)無(wú)法伸縮。元信息限制在單臺(tái)服務(wù)器,1000QPS甚至是優(yōu)化后的15000QPS的單機(jī)容量遠(yuǎn)不能達(dá)到公有云的需求。

3. 高可用不完美。就是前面所提到的NameNode問(wèn)題,在業(yè)務(wù)量太大時(shí),Hadoop支撐不住。

因此,做有中心的云存儲(chǔ)時(shí),通常的做法是完全拋棄掉原先的單中心節(jié)點(diǎn)設(shè)計(jì),引入一些其他的設(shè)計(jì)。

分布式存儲(chǔ)的元數(shù)據(jù)設(shè)計(jì)

 

常見(jiàn)的是WRN算法,為數(shù)據(jù)準(zhǔn)備多個(gè)樣本,寫(xiě)入W份才成功,成功讀取R份才算成功,W+R大于N(其中N為總副本數(shù))。這樣就解決了之前提到的高可用問(wèn)題,任何一個(gè)副本宕機(jī),整個(gè)系統(tǒng)的讀寫(xiě)都完全不受影響。

在這個(gè)系統(tǒng)里,利用這種技術(shù)有以下幾個(gè)問(wèn)題需要注意:

W,R,N選多少合適

第一種選擇2,2,3,一共三副本,寫(xiě)入兩份成功,讀取時(shí)成功讀取兩份算成功。但是其中一臺(tái)機(jī)器下線的話,會(huì)出現(xiàn)數(shù)據(jù)讀不出來(lái)的情況,導(dǎo)致數(shù)據(jù)不可用。

第二種選擇4,4,6或者6,6,9,能夠容忍單機(jī)故障。但機(jī)器越多,平均響應(yīng)時(shí)間越長(zhǎng)。

失敗的寫(xiě)入會(huì)污染數(shù)據(jù)

比如4,4,6的場(chǎng)景,如果寫(xiě)入只成功了3份,那么這次寫(xiě)入是失敗的。但如果寫(xiě)入是覆蓋原來(lái)的元數(shù)據(jù),就意味著現(xiàn)在有三份正確的數(shù)據(jù),有三份錯(cuò)誤的數(shù)據(jù),無(wú)法判斷哪份數(shù)據(jù)正確,哪份數(shù)據(jù)錯(cuò)誤?;乇艿姆椒ㄊ菍?xiě)入數(shù)據(jù)帶版本(不覆蓋,只是追加),即往數(shù)據(jù)庫(kù)里面插入新數(shù)據(jù)。有些云存儲(chǔ)的使用方法是對(duì)一個(gè)文件進(jìn)行反復(fù)的修改,比如用M3U8文件直播。隨著直播進(jìn)程的開(kāi)始不停地更改文件,大概5秒鐘一次,持續(xù)一個(gè)小時(shí)文件會(huì)被修改720次。這時(shí)候從數(shù)據(jù)庫(kù)讀取文件信息時(shí),就不再是讀1條記錄,而是每臺(tái)讀取720條記錄,很容易導(dǎo)致數(shù)據(jù)庫(kù)出現(xiàn)性能瓶頸。

下面,我們簡(jiǎn)單總結(jié)一下以Hadoop為代表的有中心的存儲(chǔ)設(shè)計(jì)存在的問(wèn)題。

分布式存儲(chǔ)的元數(shù)據(jù)設(shè)計(jì)

 

基于數(shù)據(jù)庫(kù)的分布式存儲(chǔ)設(shè)計(jì):GridFS、HBase

GridFS

GridFS基于MongoDB,相當(dāng)于一個(gè)文件存儲(chǔ)系統(tǒng),是一種分塊存儲(chǔ)形式,每塊大小為255KB。數(shù)據(jù)存放在兩個(gè)表里,一個(gè)表是chunks,加上元信息后單條記錄在256KB以內(nèi);另一個(gè)表是files,存儲(chǔ)文件元信息。

GridFS的優(yōu)點(diǎn)如下所述。

1.可以一次性滿足數(shù)據(jù)庫(kù)和文件都需要持久化這兩個(gè)需求。絕大部分應(yīng)用的數(shù)據(jù)庫(kù)數(shù)據(jù)需要持久化,用戶上傳的圖片也要做持久化,GridFS用一套設(shè)施就能滿足,可以降低整個(gè)運(yùn)維成本和機(jī)器采購(gòu)成本。

2.擁有MongoDB的全部?jī)?yōu)點(diǎn):在線存儲(chǔ)、高可用、可伸縮、跨機(jī)房備份;

3.支持Range GET,刪除時(shí)可以釋放空間(需要用MongoDB的定期維護(hù)來(lái)釋放空間)。

GridFS的缺點(diǎn)如下所述。

1.oplog耗盡。oplog是MongoDB上一個(gè)固定大小的表,用于記錄MongoDB上的每一步操作,MongoDB的ReplicaSet的同步依賴于oplog。一般情況下oplog在5GB~50GB附近,足夠支撐24小時(shí)的數(shù)據(jù)庫(kù)修改操作。但如果用于GridFS,幾個(gè)大文件的寫(xiě)入就會(huì)導(dǎo)致oplog迅速耗盡,很容易引發(fā)secondary機(jī)器沒(méi)有跟上,需要手工修復(fù),大家都知道,MongoDB的修復(fù)非常費(fèi)時(shí)費(fèi)力。簡(jiǎn)單來(lái)說(shuō),就是防沖擊能力差,跟數(shù)據(jù)庫(kù)的設(shè)計(jì)思路有關(guān),畢竟不是為文件存儲(chǔ)設(shè)計(jì)的。除了手工修復(fù)的問(wèn)題,沖擊還會(huì)造成主從數(shù)據(jù)庫(kù)差異拉大,對(duì)于讀寫(xiě)分離,或者雙寫(xiě)后再返回等使用場(chǎng)景帶來(lái)不小的挑戰(zhàn)。

2.濫用內(nèi)存。MongoDB使用MMAP將磁盤(pán)文件映射到內(nèi)存。對(duì)于GridFS來(lái)說(shuō),大部分場(chǎng)景都是文件只需讀寫(xiě)一次,對(duì)這種場(chǎng)景沒(méi)法做優(yōu)化,內(nèi)存浪費(fèi)巨大,會(huì)擠出那些需要正常使用內(nèi)存的數(shù)據(jù)(比如索引)。這也是設(shè)計(jì)阻抗失配帶來(lái)的問(wèn)題。

3.伸縮性問(wèn)題。需要伸縮性就必須引入MongoDB Sharding,需要用files_id作Sharding,如果不修改程序,files_id遞增,所有的寫(xiě)入都會(huì)壓入最后一組節(jié)點(diǎn),而不是均勻分散。在這種情況下,需要改寫(xiě)驅(qū)動(dòng),引入一個(gè)新的files_id生成方法。另外,MongoDB Sharding在高容量壓力下的運(yùn)維很痛苦。MongoDB Sharding需要分裂,分裂的時(shí)候響應(yīng)很差,會(huì)導(dǎo)致整個(gè)服務(wù)陷入不可用的狀態(tài)。

對(duì)GridFS的總結(jié)如下。

分布式存儲(chǔ)的元數(shù)據(jù)設(shè)計(jì)

 

HBase

前面提到Hadoop因?yàn)镹ameNode容量問(wèn)題,所以不適合用來(lái)做小文件存儲(chǔ),那么HBase是否合適呢?

HBase有以下優(yōu)點(diǎn)。

1.伸縮性、高可用都在底層解決了。

2.容量很大,幾乎沒(méi)有上限。

但缺點(diǎn)才是最關(guān)鍵的,HBase有以下缺點(diǎn)。

1.微妙的可用性問(wèn)題。首先是Hadoop NameNode的高可用問(wèn)題。其次,HBase的數(shù)據(jù)放在Region上,Region會(huì)有分裂的問(wèn)題,分裂和合并的過(guò)程中Region不可用,不管用戶這時(shí)是想讀數(shù)據(jù)還是寫(xiě)數(shù)據(jù),都會(huì)失敗。雖然可以用預(yù)分裂回避這個(gè)問(wèn)題,但這就要求預(yù)先知道整體規(guī)模,并且key的分布是近均勻的。在多用戶場(chǎng)景下,key均勻分布很難做到,除非舍棄掉key必須按順序這個(gè)需求。

2.大文件支持。HBase對(duì)10MB以上的大文件支持不好。改良方案是將數(shù)據(jù)拼接成大文件,然后HBase只存儲(chǔ)文件名、offset和size。這個(gè)改良方案比較實(shí)用,但在空間回收上需要補(bǔ)很多開(kāi)發(fā)的工作。

應(yīng)對(duì)方案是HBase存元數(shù)據(jù),Hadoop存數(shù)據(jù)。但是,Hadoop是為offline設(shè)計(jì)的,對(duì)NameNode的高可用考慮不充分。HBase的Region分拆和合并會(huì)造成短暫的不可用,如果可以,最好做預(yù)拆,但預(yù)拆也有問(wèn)題。如果對(duì)可用性要求低,那么這種方案可用。

繞過(guò)問(wèn)題的存儲(chǔ)設(shè)計(jì):FastDFS

Hadoop的問(wèn)題是NameNode壓力過(guò)高,那么FastDFS的思路是給NameNode減壓。減壓方法是將NameNode的信息編碼到key中。對(duì)于范例URL:group1/M00/00/00/rBAXr1AJGF_3rCZAAAAEc45MdM850_big.txt來(lái)說(shuō),NameNode只需要做一件事,將group1翻譯成具體的機(jī)器名字,不用關(guān)心key的位置,只要關(guān)心組的信息所在的位置,而這個(gè)組的信息就放在key里面,就繞過(guò)了之前的問(wèn)題。

FastDFS的優(yōu)點(diǎn)如下。

1.結(jié)構(gòu)簡(jiǎn)單,元數(shù)據(jù)節(jié)點(diǎn)壓力低;

2.擴(kuò)容簡(jiǎn)單,擴(kuò)容后無(wú)需重新平衡。

FastDFS的缺點(diǎn)如下。

1.不能自定義key,這對(duì)多租戶是致命的打擊,自己使用也會(huì)降低靈活性。

2.修復(fù)速度:磁盤(pán)鏡像分布,修復(fù)速度取決于磁盤(pán)寫(xiě)入速度,比如4TB的盤(pán),100MB/s的寫(xiě)入速度,至少需要11個(gè)小時(shí)。

3.大文件沖擊問(wèn)題沒(méi)有解決。首先,文件大小有限制(不能超過(guò)磁盤(pán)大?。?;其次,大文件沒(méi)有分片,導(dǎo)致大文件的讀寫(xiě)都由單塊盤(pán)承擔(dān),所以對(duì)磁盤(pán)的網(wǎng)絡(luò)沖擊很大。

總結(jié)

幾種存儲(chǔ)設(shè)計(jì)可以總結(jié)如下。

分布式存儲(chǔ)的元數(shù)據(jù)設(shè)計(jì)

責(zé)任編輯:武曉燕 來(lái)源: 今日頭條
相關(guān)推薦

2015-05-13 09:34:46

分布式存儲(chǔ)元數(shù)據(jù)設(shè)計(jì)公有云

2018-03-12 08:17:27

分布式存儲(chǔ)

2018-05-31 08:57:59

分布式塊存儲(chǔ)元數(shù)據(jù)

2018-10-16 14:26:22

分布式塊存儲(chǔ)引擎

2018-01-02 20:00:28

數(shù)據(jù)庫(kù)MySQL分布式存儲(chǔ)

2015-10-19 11:41:30

分布式存儲(chǔ)HDFSGFS

2017-10-27 08:40:44

分布式存儲(chǔ)剪枝系統(tǒng)

2017-12-18 10:47:04

分布式存儲(chǔ)數(shù)據(jù)

2024-08-12 16:20:27

2015-05-12 13:03:54

開(kāi)源分布式存儲(chǔ)HDFS

2019-10-16 10:34:33

數(shù)據(jù)庫(kù)大數(shù)據(jù)腳本語(yǔ)言

2023-10-08 10:49:16

搜索系統(tǒng)分布式系統(tǒng)

2010-04-08 10:29:54

TwitterGizzard數(shù)據(jù)存儲(chǔ)

2022-07-18 10:29:33

數(shù)據(jù)分布式系統(tǒng)

2018-02-22 08:42:04

分布式存儲(chǔ)安全

2021-10-22 05:42:38

分布式存儲(chǔ)三副本系統(tǒng)

2015-07-02 13:26:35

分布式存儲(chǔ)云存儲(chǔ)云平臺(tái)

2023-11-07 12:00:05

分布式系統(tǒng)數(shù)據(jù)訪問(wèn)

2021-02-19 19:21:47

分布式存儲(chǔ)存儲(chǔ)新基建

2017-01-10 16:18:26

分布式存儲(chǔ)建設(shè)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)