分布式存儲系統(tǒng)的一些理解和實(shí)踐_第1頁
分布式存儲系統(tǒng)的一些理解和實(shí)踐_第2頁
分布式存儲系統(tǒng)的一些理解和實(shí)踐_第3頁
分布式存儲系統(tǒng)的一些理解和實(shí)踐_第4頁
分布式存儲系統(tǒng)的一些理解和實(shí)踐_第5頁
已閱讀5頁,還剩8頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

分布式存儲系統(tǒng)的一些理解和實(shí)踐張建偉一、分布式存儲系統(tǒng)介紹簡介至弱化全都性要求,以得到高并發(fā)和高性能。按功能分類,主要有以下幾種:分布式文件系統(tǒng)hdfscephglusterfstfs分布式對象存儲s3(dynamo)cephbcs(mola)分布式表格存儲hbasecassandraoceanbase塊存儲cephebs(amazon)分布式存儲系統(tǒng),包括分布式系統(tǒng)和單機(jī)存儲兩局部;不同的系統(tǒng),雖在功能支持、實(shí)現(xiàn)機(jī)制、實(shí)現(xiàn)語言等方面是有差異的,但其設(shè)計(jì)時(shí),關(guān)注的關(guān)鍵問題是根本一樣的。單機(jī)存儲的主流實(shí)現(xiàn)方式,有hash引擎、B+樹引擎和LSM樹(LogStructuredMergeTree)三種,不開放介紹。本文其次章節(jié),主要結(jié)合hbase、cassandraceph,講下分布式系統(tǒng)設(shè)計(jì)局部,需要關(guān)注的關(guān)鍵問題。適用場景各分布式存儲系統(tǒng)功能定位不盡一樣,但其適用和不適用的場景,在肯定程度上是一樣的,如下。適用大數(shù)據(jù)量〔100T,乃至幾十PB〕key/value或者半構(gòu)造化數(shù)據(jù)高吞吐高性能高擴(kuò)展不適用Sql查詢簡單查詢,如聯(lián)表查詢簡單事務(wù)二、分布式存儲系統(tǒng)設(shè)計(jì)要點(diǎn)數(shù)據(jù)分布解決的就是數(shù)據(jù)分布問題,即哪些數(shù)據(jù)存儲在哪些機(jī)器〔節(jié)點(diǎn)〕上。常用的有hash類算法和用meta表映射兩種方式。一般完全分布式的設(shè)計(jì)〔無master節(jié)點(diǎn),會用hash類算法;而集中式的設(shè)計(jì)〔有master節(jié)點(diǎn)〕用meta表映射的方式。兩者各有優(yōu)缺點(diǎn),后面講到具體問題時(shí)再做比較。hash將存儲節(jié)點(diǎn)和操作的key〔key唯一標(biāo)識存儲的objectobjectname〕hash0~2的32次方區(qū)間。映射到如下環(huán)中的某個(gè)位置。沿操作key的位置順時(shí)針找到的第一個(gè)節(jié)點(diǎn)即為此keyprimary存儲節(jié)點(diǎn)。如以下圖所示:1全都性hashCassandra借鑒了dynamo的實(shí)現(xiàn),用了全都性hash的方式。節(jié)點(diǎn)的hash值〔也叫Keyhashmd5(key)3primary2個(gè)存儲節(jié)點(diǎn)即為replica存儲節(jié)點(diǎn)。Hash類算法,優(yōu)點(diǎn)是無需master節(jié)點(diǎn),一個(gè)缺點(diǎn)是,不支持key的挨次掃描。Crush算法也是一種類hash也是一種類hash算法,隨著ceph誕生,也是ceph的一大亮點(diǎn)。Crush算法比較簡單,這里簡化介紹下。Ceph的每個(gè)Object最終都會映射到一組OSD中,由這組OSD保存這個(gè)Object,映射流程如下:Object→PG→OSDsetOSD先理解為機(jī)器節(jié)點(diǎn)吧PG即PlacementGroups,可以理解為存儲在同一組OSDobject的集合Object先映射到PG(PlacementGroup),再由PG映射到OSDset。每個(gè)表空間有固定數(shù)量的pg,在建表時(shí)指定。每個(gè)Object通過計(jì)算hash值并對pg數(shù)量取模得到它所對應(yīng)的PG。PG再映射到一組OSD〔OSD的個(gè)數(shù)由表的副本數(shù)打算,也是建表時(shí)指定〕,第一個(gè)OSD是Primary,剩下的都是Replicas。22cephcrush算法偽代碼如下所示:PG→OSDset的映射由幾個(gè)因素打算:CRUSHhash算法:一種偽隨機(jī)算法。OSDMAP:包含當(dāng)前全部OSD的狀態(tài)、OSD的機(jī)器機(jī)架信息等。CRUSHRules:數(shù)據(jù)映射的策略。這些策略可以敏捷的設(shè)置object存放的區(qū)域。比方可以指定table1中全部objects1objects1個(gè)副本放置在1上的效勞器A21上的效勞器Btable2中全部object2、3、4上,全部Object12的效勞器2334的效勞器上。具體實(shí)現(xiàn)不再開放。locatorlocator=object_nameobj_hash=hash(locator)pg=obj_hash%num_pgosds_for_pg=crush(pg) #returnsalistofosdsprimary=osds_for_pg[0]replicas=osds_for_pg[1:]Crush相比全都性hash更加敏捷。range查表masterrangerange的數(shù)據(jù)存儲在哪些節(jié)點(diǎn)上。range是依據(jù)keyClient在執(zhí)行keymasterang,查詢其存儲在哪些節(jié)點(diǎn);再直接跟存儲節(jié)點(diǎn)交互,實(shí)現(xiàn)存取。Hbase是用這種方式實(shí)現(xiàn),支持key的挨次掃描。region即一段range的數(shù)據(jù)〔存儲在materserver上regionsever節(jié)點(diǎn)。3hbaseregion映射數(shù)據(jù)牢靠性數(shù)據(jù)牢靠性,即數(shù)據(jù)不喪失,是存儲系統(tǒng)的第一職責(zé)。4數(shù)據(jù)中心數(shù)據(jù)不喪失,是任何分布式存儲系統(tǒng)都必需考慮的。已有做法有以下幾種。多副本即數(shù)據(jù)保存N+1份〔一般是3份N份時(shí),仍能修復(fù)數(shù)據(jù)。缺點(diǎn)是,需N倍的冗余存儲空間。hbase、cassandra、ceph都很好的支持。糾刪碼馬上一條數(shù)據(jù)切分成nnm份相等大小的校驗(yàn)數(shù)據(jù)塊兒。n+m份數(shù)據(jù),各自存儲在不同的節(jié)點(diǎn)上,拿到n+m中的任意n份數(shù)據(jù),均可計(jì)算得到原始的數(shù)據(jù)。一般n10,m3。優(yōu)點(diǎn)是,只需m/n倍的冗余空間,缺點(diǎn)是讀寫效率較低,且消耗cpu。5糾刪碼Hbase:hdfs層為hbase供給支持。Cassandra:社區(qū)版本不支持,社區(qū)還無添加此功能的路線圖,之前社區(qū)有爭論過此功都有較大影響,且性能較低。Ceph:支持。但在功能上有些缺失,比方不支持partialread,適合讀遠(yuǎn)多于寫的場景,應(yīng)用較少??缂壢鹤詣觽浞菀话銥榱烁叩睦慰啃?,數(shù)據(jù)會通過準(zhǔn)實(shí)時(shí)備份機(jī)制,備份到另外一個(gè)IDC的存儲集群。Hbase:社區(qū)版本已經(jīng)支持。cassandraceph:都不支持,短期沒有路線圖,長遠(yuǎn)來講,是需要添加的。接入修復(fù)客戶端寫數(shù)據(jù)到存儲集群,一般先按肯定規(guī)章找到一個(gè)接入節(jié)點(diǎn),再由次接入節(jié)點(diǎn)做proxy3定時(shí)或者收到通知不行用節(jié)點(diǎn)變?yōu)榭捎脮r(shí),嘗試寫入之前未寫成功的數(shù)據(jù)。Hbase:hdfshdfsnamenode記錄了每個(gè)block的meta數(shù)據(jù)block存儲在哪些datanod,一個(gè)datanode以看到,記錄meta這種方式很敏捷Cassandra:有hinthandoff機(jī)制,原理如上Ceph:有pglog機(jī)制,原理如上全局掃描修復(fù)用以修復(fù)磁盤損壞、誤刪文件等緣由引起的數(shù)據(jù)喪失。由master節(jié)點(diǎn)發(fā)起全局?jǐn)?shù)據(jù),或者primary節(jié)點(diǎn)發(fā)起自己負(fù)責(zé)的range的數(shù)據(jù),的多個(gè)副本間的數(shù)據(jù)掃描。假設(shè)覺察某個(gè)副本缺失,則進(jìn)展修復(fù)。Hbase、cassandra、ceph都有類似機(jī)制,原理類似,機(jī)制不同,這里不一一開放講了。Hbashdfs層的datanodeblocknode比照修復(fù)Cassandra:基于Merkletreeanti-entropy機(jī)制Ceph:scrubdeep-scrub機(jī)制可用性至整個(gè)機(jī)房斷電斷網(wǎng)等極端狀況下,仍不影響在線讀寫。個(gè)機(jī)房斷電,只能是多副本的跨idc存儲,一般分布式存儲系統(tǒng)都支持這種方式,只是目前實(shí)際應(yīng)用的很少。點(diǎn)的。集中式的設(shè)計(jì),有meta信息,需要metaserver的角色,一般也會將metaserver做成集群式,以避開單點(diǎn)問題。下面結(jié)合例子講下。1) or集中式Hbase:metaserver是集群方式,通過zk的選舉算法選出一個(gè)主節(jié)點(diǎn)來供給效勞,主節(jié)hbasemetaserverregionserver是單點(diǎn)的,即一個(gè)regionserver掛掉,在master沒有為其負(fù)責(zé)的region進(jìn)展重安排前,regionrange,是無法供給在線讀寫的。之所以存在此單點(diǎn)問題,猜測由于hbaseregionserver的這種設(shè)計(jì)能較便利是實(shí)現(xiàn)強(qiáng)全都性和簡潔事務(wù),后面會提到?,F(xiàn)在貌似已有regionserverstandby機(jī)制,即一臺regionserver掛掉,另一臺預(yù)備就緒的能馬上接替并供給效勞。Hbase架構(gòu)如下:6hbase架構(gòu)cassandraceph:是完全分布式的〔ceph雖有monitorserver,但仍可理解為完全分布式的,這里不開放了,無單點(diǎn)問題。可擴(kuò)展性面結(jié)合例子講下。1) 擴(kuò)容Hbase:比較簡潔,擴(kuò)容的大致過程為:增加一些regionserver,由masterserver做一下balanceregionserverregion的對應(yīng)關(guān)系〔region負(fù)責(zé)肯定范圍的ke,對應(yīng)于hdfs上的一組文件,完全不需要拖數(shù)據(jù)。而hdfs本身擴(kuò)容也較簡潔,由于有namenode〔相當(dāng)于masterservehdfs的每個(gè)塊兒都記錄其存儲節(jié)點(diǎn)可以將寫入的文件寫入到擴(kuò)容的server,這樣不需要拖數(shù)據(jù);假設(shè)要考慮寫壓力均衡〔即不把寫壓力集中在參加的機(jī)器上,仍舊寫全部機(jī)器,仍需要做數(shù)據(jù)遷移。Cassandraceph:由于keyhash類算法,所以拖數(shù)據(jù)不行避開。拖的數(shù)據(jù)node所負(fù)責(zé)的數(shù)據(jù)量。全都性hashcrush算法不同,導(dǎo)致拖數(shù)據(jù)的源節(jié)點(diǎn)不一樣,但總的來說大同小異。數(shù)據(jù)全都性全都性分強(qiáng)全都性和最終全都性,解釋如下:強(qiáng)全都性:寫完一條數(shù)據(jù)key1,馬上讀key1,能讀到最數(shù)據(jù)。最終全都性:寫完一條數(shù)據(jù)key1,馬上讀key1,可能讀到老數(shù)據(jù),但一段時(shí)間后,能夠讀到數(shù)據(jù)。最終全都性相比強(qiáng)全都性primary和replica在讀寫時(shí)的地位相關(guān),不同系統(tǒng)在實(shí)現(xiàn)上會有不同的取舍,下面具體說明。1) 單主、多主、主從Hbase:regionserver是單點(diǎn),可以理解問題單主方式,自然的強(qiáng)全都性。Cassandra:最終全都性,通過客戶端全都性級別的設(shè)置也可實(shí)現(xiàn)強(qiáng)全都性。Cassandra高,除了犧牲了強(qiáng)全都性,還有造成寫沖突問題,cassandra通過column級別的時(shí)間戳解決此問題,但不徹底,時(shí)間戳一樣時(shí)就沒有方法了。Ceph客戶端只能讀主節(jié)點(diǎn)。以此實(shí)現(xiàn)強(qiáng)全都性。Ceph也支持配置為本地化〔就近,不肯定是主節(jié)點(diǎn)〕讀方式,這種方式也犧牲了強(qiáng)全都性。Ceph的塊兒存儲和分布式文件系統(tǒng)功能,要求它必需支持強(qiáng)全都性。性能前面已經(jīng)提到,不同的全都性會對性能有影響。另外,還有兩點(diǎn)對對性能影響較大:or集中式集中式架構(gòu)需要有metaservemetaservedatanode寫操作除更datanode也可能要更metaservermetaserver交互的過程。所以延時(shí)更低。且集中式,在數(shù)據(jù)量巨大或者壓力很大時(shí),metaserver有可能成為性能瓶頸,目前有metaserver分層、靜態(tài)子樹等解決方案。Hbase:是集中式的,但客戶端維護(hù)metaserver的緩存,一般讀寫時(shí)無需網(wǎng)絡(luò)查詢metaserverhbasehdfs層讀寫必需要namenode參與,所以性能低些。Hbase+hdfs這種分層架構(gòu),有很多好處,但明顯性能會遜一籌。Cassandranodenode通過全都hash定位真正負(fù)責(zé)此次讀寫的node,再進(jìn)展讀寫。效率要比hbase高些。Ceph:是完全分布式的,客戶端通過monitorserver得到節(jié)點(diǎn)信息,緩存在本地,再通crush算法,直接定位到主節(jié)點(diǎn)實(shí)現(xiàn)讀寫。這個(gè)角度看,cephcassandra更高些。單機(jī)存儲引擎分布式存儲一般承受LSMTlog和

內(nèi)存方式,能極大提高寫性能。讀操作,還是通過索引來提高性能。分布式存儲的數(shù)據(jù)模型一般是schema-less括不同的列;一般只有主key索引;不需考慮數(shù)據(jù)完整性約束〔比方外鍵約束、列類NOTNULLLSMTSchema-less是分布式存儲一般性能較高的緣由之一。7LSMTHbase、cassandra、ceph都是wal的方式。挨次寫完journallog后,寫實(shí)際數(shù)據(jù)。寫數(shù)hbase和cassandra是寫memtabl〔源自bigtable吧Ceph不是memtablesyncMemtable的方式對小value更加友好,但需要引入的compaction,compaction帶來了更多的運(yùn)維工作。Ceph由于其塊兒存儲功能,常常會修改一個(gè)對象的某一小段,假設(shè)用memtable的方式,即使修改一小段,也要重寫整個(gè)對象,效率比較低。易運(yùn)維性〔盤故障〔數(shù)據(jù)修復(fù)〕等操作的快速性和簡潔性。12*2T24*4T盤。單機(jī)存儲數(shù)據(jù)量是很大的。擴(kuò)容或1或者縮短遷移時(shí)間。擴(kuò)容、頂替、升級Hbasehdfs的話,其擴(kuò)容、頂替更簡潔,由于不涉及遷移數(shù)據(jù)。Hbase因單點(diǎn)問題,升級必定影響在線效勞,這一點(diǎn)是始終在努力優(yōu)化的,例如之前提到的regionserverstandby機(jī)制,hdfsnamenode的熱備機(jī)制。Cassandragossip360有多達(dá)幾十個(gè)cassandra它,剛開頭集群建設(shè)一步到位,后續(xù)不擴(kuò)容,假設(shè)有機(jī)器損壞,直接修,而不是頂替。Cassandra的升級比較有優(yōu)勢,31/3的機(jī)器,而不

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論