![分布式存儲系統(tǒng)的一些理解與實踐_第1頁](http://file2.renrendoc.com/fileroot_temp3/2021-10/18/085d90a3-d429-43dd-83cb-db6e96552526/085d90a3-d429-43dd-83cb-db6e965525261.gif)
![分布式存儲系統(tǒng)的一些理解與實踐_第2頁](http://file2.renrendoc.com/fileroot_temp3/2021-10/18/085d90a3-d429-43dd-83cb-db6e96552526/085d90a3-d429-43dd-83cb-db6e965525262.gif)
![分布式存儲系統(tǒng)的一些理解與實踐_第3頁](http://file2.renrendoc.com/fileroot_temp3/2021-10/18/085d90a3-d429-43dd-83cb-db6e96552526/085d90a3-d429-43dd-83cb-db6e965525263.gif)
![分布式存儲系統(tǒng)的一些理解與實踐_第4頁](http://file2.renrendoc.com/fileroot_temp3/2021-10/18/085d90a3-d429-43dd-83cb-db6e96552526/085d90a3-d429-43dd-83cb-db6e965525264.gif)
![分布式存儲系統(tǒng)的一些理解與實踐_第5頁](http://file2.renrendoc.com/fileroot_temp3/2021-10/18/085d90a3-d429-43dd-83cb-db6e96552526/085d90a3-d429-43dd-83cb-db6e965525265.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、分布式存儲系統(tǒng)的一些理解和實踐張建偉一、 分布式存儲系統(tǒng)介紹1. 簡介互聯(lián)網(wǎng)數(shù)據(jù)規(guī)模越來越大,并發(fā)請求越來越高,傳統(tǒng)的關(guān)系數(shù)據(jù)庫,在很多使用場景下并不能很好的滿足需求。分布式存儲系統(tǒng)應(yīng)運而生。它有良好的擴展性,弱化關(guān)系數(shù)據(jù)模型,甚至弱化一致性要求,以得到高并發(fā)和高性能。按功能分類,主要有以下幾種:² 分布式文件系統(tǒng)hdfs ceph glusterfs tfs ² 分布式對象存儲s3(dynamo) ceph bcs(mola)² 分布式表格存儲hbase cassandra oceanbase² 塊存儲ceph ebs(amazon)分布式存儲系統(tǒng),包
2、括分布式系統(tǒng)和單機存儲兩部分;不同的系統(tǒng),雖在功能支持、實現(xiàn)機制、實現(xiàn)語言等方面是有差異的,但其設(shè)計時,關(guān)注的關(guān)鍵問題是基本相同的。單機存儲的主流實現(xiàn)方式,有hash引擎、B+樹引擎和LSM樹(Log Structured Merge Tree)三種,不展開介紹。本文第二章節(jié),主要結(jié)合hbase、cassandra和ceph,講下分布式系統(tǒng)設(shè)計部分,需要關(guān)注的關(guān)鍵問題。2. 適用場景各分布式存儲系統(tǒng)功能定位不盡相同,但其適用和不適用的場景,在一定程度上是相同的,如下。1) 適用大數(shù)據(jù)量(大于100T,乃至幾十PB)key/value或者半結(jié)構(gòu)化數(shù)據(jù)高吞吐高性能高擴展2) 不適用Sql查詢復(fù)雜查
3、詢,如聯(lián)表查詢復(fù)雜事務(wù)二、 分布式存儲系統(tǒng)設(shè)計要點1. 數(shù)據(jù)分布分布式存儲,可以由成千甚至上萬臺機器組成,以實現(xiàn)海量數(shù)據(jù)存儲和高并發(fā)。那它最先要解決的就是數(shù)據(jù)分布問題,即哪些數(shù)據(jù)存儲在哪些機器(節(jié)點)上。常用的有hash類算法和用meta表映射兩種方式。一般完全分布式的設(shè)計(無master節(jié)點),會用hash類算法;而集中式的設(shè)計(有master節(jié)點)用meta表映射的方式。兩者各有優(yōu)缺點,后面講到具體問題時再做比較。1) 一致性hash將存儲節(jié)點和操作的key(key唯一標識存儲的object,有時也叫object name)都hash到02的32次方區(qū)間。映射到如下環(huán)中的某個位置。沿操作k
4、ey的位置順時針找到的第一個節(jié)點即為此key的primary存儲節(jié)點。如下圖所示:圖1 一致性hashCassandra借鑒了dynamo的實現(xiàn),用了一致性hash的方式。節(jié)點的hash值(也叫token),可以手動分配或者自動生成。Key的hash值即md5(key)。每個表可以在建表時指定副本數(shù),當副本數(shù)為3時,找primary存儲節(jié)點后,順時針方向的下2個存儲節(jié)點即為replica存儲節(jié)點。Hash類算法,優(yōu)點是無需master節(jié)點,一個缺點是,不支持key的順序掃描。2) Crush算法也是一種類hash算法,隨著ceph誕生,也是ceph的一大亮點。Crush算法比較復(fù)雜,這里簡化介
5、紹下。Ceph的每個Object最終都會映射到一組OSD中,由這組OSD保存這個Object,映射流程如下:Object PG OSD set· OSD先理解為機器節(jié)點吧· PG即Placement Groups,可以理解為存儲在同一組OSD上的object的集合Object先映射到PG(Placement Group),再由PG映射到OSD set。每個表空間有固定數(shù)量的pg,在建表時指定。每個Object通過計算hash值并對pg數(shù)量取模得到它所對應(yīng)的PG。PG再映射到一組OSD(OSD的個數(shù)由表的副本數(shù)決定,也是建表時指定),第一個OSD是Primary,剩下的都是R
6、eplicas。PG OSD set 的映射由幾個因素決定:· CRUSH hash算法:一種偽隨機算法。· OSD MAP:包含當前所有OSD的狀態(tài)、OSD的機器機架信息等。· CRUSH Rules:數(shù)據(jù)映射的策略。這些策略可以靈活的設(shè)置object存放的區(qū)域。比如可以指定table1中所有objects放置在機架1上,所有objects的第1個副本放置在機架1上的服務(wù)器A上,第2個副本分布在機架1上的服務(wù)器B上。 table2中所有的object分布在機架2、3、4上,所有Object的第1個副本分布在機架2的服務(wù)器上,第2個副本分布在機架3的服器上,第3個
7、副本分布在機架4的服務(wù)器上。具體實現(xiàn)不再展開。圖2 ceph crush算法偽代碼如下所示:locator = object_nameobj_hash = hash(locator)pg = obj_hash % num_pgosds_for_pg = crush(pg) # returns a list of osdsprimary = osds_for_pg0replicas = osds_for_pg1:Crush相比一致性hash更加靈活。3) 按range查表由master節(jié)點記錄和管理每個表range的粒度,以及每個range的數(shù)據(jù)存儲在哪些節(jié)點上。range是根據(jù)key的字節(jié)序確
8、定。Client在執(zhí)行key存取操作是,先到master,根據(jù)其所在range,查詢其存儲在哪些節(jié)點;再直接跟存儲節(jié)點交互,實現(xiàn)存取。Hbase是用這種方式實現(xiàn),支持key的順序掃描。如下圖所示,region即一段range的數(shù)據(jù)(存儲在mater server上),region sever即實際存儲節(jié)點。圖3 hbase region映射2. 數(shù)據(jù)可靠性數(shù)據(jù)可靠性,即數(shù)據(jù)不丟失,是存儲系統(tǒng)的第一職責。圖4 數(shù)據(jù)中心分布式一般采用普通服務(wù)器,要假設(shè)服務(wù)器和硬盤都是不可靠的。如何保證在有硬件損壞時數(shù)據(jù)不丟失,是任何分布式存儲系統(tǒng)都必須考慮的。已有做法有以下幾種。1) 多副本即數(shù)據(jù)保存N+1份(一
9、般是3份),每一份都存儲在不同的節(jié)點上。在數(shù)據(jù)損壞N份時,仍能修復(fù)數(shù)據(jù)。缺點是,需N倍的冗余存儲空間。² hbase、cassandra、ceph都很好的支持。2) 糾刪碼即將一條數(shù)據(jù)切分成n等份,通過對這n份數(shù)據(jù)編碼,得到m份相等大小的校驗數(shù)據(jù)塊兒。這n+m份數(shù)據(jù),各自存儲在不同的節(jié)點上,拿到n+m中的任意n份數(shù)據(jù),均可計算得到原始的數(shù)據(jù)。一般n取10,m取3。優(yōu)點是,只需m/n倍的冗余空間,缺點是讀寫效率較低,且耗費cpu。圖5 糾刪碼² Hbase:hdfs層為hbase提供支持。² Cassandra:社區(qū)版本不支持,社區(qū)還無添加此功能的路線圖,之前社區(qū)有
10、討論過此功能,后來不了了之。應(yīng)該是主要考慮到糾刪碼方式對現(xiàn)有系統(tǒng)的存儲結(jié)構(gòu)、一致性語義都有較大影響,且性能較低。² Ceph:支持。但在功能上有些缺失,比如不支持partial read,適合讀遠多于寫的場景,應(yīng)用較少。3) 跨級群自動備份一般為了更高的可靠性,數(shù)據(jù)會通過準實時備份機制,備份到另外一個IDC的存儲集群。² Hbase:社區(qū)版本已經(jīng)支持。² cassandra和ceph:都不支持,短期沒有路線圖,長遠來講,是需要添加的。4) 接入修復(fù)客戶端寫數(shù)據(jù)到存儲集群,一般先按一定規(guī)則找到一個接入節(jié)點,再由次接入節(jié)點做proxy將數(shù)據(jù)寫到實際存儲的節(jié)點。假設(shè)需要
11、寫入3副本,如果接入節(jié)點發(fā)現(xiàn),有的副本對應(yīng)的存儲節(jié)點此時不可用,或者寫超時,那么會將寫失敗的節(jié)點及未寫成功的數(shù)據(jù)存儲下來。之后,定時或者收到通知不可用節(jié)點變?yōu)榭捎脮r,嘗試寫入之前未寫成功的數(shù)據(jù)。² Hbase:hdfs層會保證寫入足夠的副本,因為hdfs的namenode記錄了每個block的meta數(shù)據(jù)(block存儲在哪些datanode),一個datanode寫失敗,換一個寫,直至寫成功??梢钥吹?,記錄meta這種方式很靈活² Cassandra:有hinthandoff機制,原理如上² Ceph:有pglog機制,原理如上5) 全局掃描修復(fù)用以修復(fù)磁盤損壞
12、、誤刪文件等原因引起的數(shù)據(jù)丟失。由master節(jié)點發(fā)起全局數(shù)據(jù),或者primary節(jié)點發(fā)起自己負責的range的數(shù)據(jù),的多個副本間的數(shù)據(jù)掃描。如果發(fā)現(xiàn)某個副本缺失,則進行修復(fù)。Hbase、cassandra、ceph都有類似機制,原理類似,機制不同,這里不一一展開講了。² Hbase:hdfs層的data node在發(fā)現(xiàn)盤損壞后,會收集剩下的所有block信息,并通知name node對比修復(fù)² Cassandra:基于Merkle tree的anti-entropy機制² Ceph:scrub和deep-scrub機制3. 可用性分布式存儲系統(tǒng),相比傳統(tǒng)關(guān)系數(shù)據(jù)
13、庫,有更好的可用性。在個別機器硬件或軟件故障,甚至整個機房斷電斷網(wǎng)等極端情況下,仍不影響在線讀寫。對于個別機器硬件或者軟件故障,一般數(shù)據(jù)保存多份副本或者糾刪碼方式就能解決。對于整個機房斷電,只能是多副本的跨idc存儲,一般分布式存儲系統(tǒng)都支持這種方式,只是目前實際應(yīng)用的很少。保證可用性,另外一個影響因素是,整個系統(tǒng)是否有單點故障。完全分布式的設(shè)計是沒有單點的。集中式的設(shè)計,有meta信息,需要meta server的角色,一般也會將meta server做成集群式,以避免單點問題。下面結(jié)合例子講下。1) 分布式or集中式² Hbase:meta server是集群方式,通過zk的選舉
14、算法選出一個主節(jié)點來提供服務(wù),主節(jié)點掛掉后,會重新選一個。所以hbase的meta server也不算是單點的。但其region server是單點的,即一個region server掛掉,在master沒有為其負責的region進行重分配前,這個region所負責的range,是無法提供在線讀寫的。之所以存在此單點問題,猜測因為hbase設(shè)計之初,是為網(wǎng)頁庫這類離線存儲設(shè)計的,而非在線服務(wù)。另外,region server的這種設(shè)計能較方便是實現(xiàn)強一致性和簡單事務(wù),后面會提到。現(xiàn)在貌似已有region server的stand by機制,即一臺region server掛掉,另一臺準備就緒的
15、能馬上接替并提供服務(wù)。Hbase架構(gòu)如下:圖6 hbase架構(gòu)² cassandra和ceph:是完全分布式的(ceph雖有monitor server,但仍可理解為完全分布式的,這里不展開了),無單點問題。4. 可擴展性存儲系統(tǒng)的可擴展性,即擴容的難易程度。可擴展性是分布式系統(tǒng)相比傳統(tǒng)關(guān)系數(shù)據(jù)庫,最大的優(yōu)勢。各分布式存儲系統(tǒng)都能很好的支持橫向擴展。由于實現(xiàn)方式的不同,擴容的難易程度還是有差異的。一般集中式的系統(tǒng)擴容更加容易,完全分布式的系統(tǒng)會更加麻煩些。下面結(jié)合例子講下。1) 擴容² Hbase:比較容易,擴容的大致過程為:增加一些region server,由maste
16、r server做一下balance,即重新確定region server與region的對應(yīng)關(guān)系(每個region負責一定范圍的key,對應(yīng)于hdfs上的一組文件),完全不需要拖數(shù)據(jù)。而hdfs本身擴容也較容易,因為有name node存在(相當于master server,對寫入hdfs的每個塊兒都記錄其存儲節(jié)點),可以將新寫入的文件寫入到新擴容的server,這樣不需要拖數(shù)據(jù);如果要考慮寫壓力均衡(即不把寫壓力集中在新加入的機器上,仍然寫所有機器),仍需要做數(shù)據(jù)遷移。² Cassandra和ceph:因為key定位是通過hash類算法,所以拖數(shù)據(jù)不可避免。拖的數(shù)據(jù)量即新加的no
17、de所負責的數(shù)據(jù)量。一致性hash和crush算法不同,導(dǎo)致拖數(shù)據(jù)的源節(jié)點不一樣,但總的來說大同小異。5. 數(shù)據(jù)一致性一致性分強一致性和最終一致性,解釋如下:強一致性:寫完一條數(shù)據(jù)key1,馬上讀key1,能讀到最新數(shù)據(jù)。最終一致性:寫完一條數(shù)據(jù)key1,馬上讀key1,可能讀到老數(shù)據(jù),但一段時間后,能夠讀到新數(shù)據(jù)。最終一致性相比強一致性,有更高的性能。一致性跟primary和replica在讀寫時的地位相關(guān),不同系統(tǒng)在實現(xiàn)上會有不同的取舍,下面具體說明。1) 單主、多主、主從² Hbase:region server是單點,可以理解問題單主方式,天然的強一致性。² Cas
18、sandra:最終一致性,通過客戶端一致性級別的設(shè)置也可實現(xiàn)強一致性。Cassandra多個副本節(jié)點的地位相同,可以理解為多主方式,并列提供讀寫,這種方式讀寫性能很高,除了犧牲了強一致性,還有造成寫沖突問題,cassandra通過column級別的時間戳解決此問題,但不徹底,時間戳相同時就沒有辦法了。² Ceph:的多個副本間有主從關(guān)系,一主多從,客戶端寫主節(jié)點,主節(jié)點負責寫從節(jié)點??蛻舳酥荒茏x主節(jié)點。以此實現(xiàn)強一致性。Ceph也支持配置為本地化(就近,不一定是主節(jié)點)讀方式,這種方式也犧牲了強一致性。Ceph的塊兒存儲和分布式文件系統(tǒng)功能,要求它必須支持強一致性。6. 性能前面已經(jīng)
19、提到,不同的一致性會對性能有影響。另外,還有兩點對對性能影響較大:1) 完全分布式or集中式集中式架構(gòu)需要有meta server。讀操作先查meta server,再向data node查詢真正的數(shù)據(jù);寫操作除更新data node也可能要更新meta server。完全分布式讀寫則少了與meta server交互的過程。所以延時更低。且集中式,在數(shù)據(jù)量巨大或者壓力很大時,meta server有可能成為性能瓶頸,目前有meta server分層、靜態(tài)子樹等解決方案。² Hbase:是集中式的,但客戶端維護meta server的緩存,一般讀寫時無需網(wǎng)絡(luò)查詢meta server,
20、所以從hbase這層看,集中式并不影響其性能。但hdfs層讀寫必須要name node參與,所以性能低些。Hbase+hdfs這種分層架構(gòu),有很多好處,但顯然性能會遜一籌。² Cassandra:是完全分布式的,客戶端可以連接任一臺node讀寫,這臺接入node通過一致性hash定位真正負責此次讀寫的node,再進行讀寫。效率要比hbase高些。² Ceph:是完全分布式的,客戶端通過monitor server得到節(jié)點信息,緩存在本地,再通過crush算法,直接定位到主節(jié)點實現(xiàn)讀寫。這個角度看,ceph的效果比cassandra更高些。2) 單機存儲引擎分布式存儲一般采用
21、LSMT引擎,將隨機寫轉(zhuǎn)化為順序?qū)憀og和memtable(內(nèi)存)方式,能極大提高寫性能。讀操作,還是通過索引來提高性能。分布式存儲的數(shù)據(jù)模型一般是schema-less的,即不需要預(yù)先定義每行包括哪些列以及每個列的類型,多行之間允許包括不同的列;一般只有主key索引;不需考慮數(shù)據(jù)完整性約束(比如外鍵約束)、列類型約束、NOT NULL約束等;所以較適合用LSMT引擎實現(xiàn),關(guān)系數(shù)據(jù)庫則不太適合。Schema-less是分布式存儲一般性能較高的原因之一。圖7 LSMT² Hbase、cassandra、ceph都是wal的方式。順序?qū)懲阩ournal log后,寫實際數(shù)據(jù)。寫數(shù)據(jù)時,h
22、base和cassandra是寫memtable(源自bigtable吧),更多的減少隨機寫硬盤。Ceph不是memtable的方式,直接寫文件系統(tǒng),并定時sync。Memtable的方式對小value更加友好,但需要引入的compaction,compaction帶來了更多的運維工作。Ceph由于其塊兒存儲功能,經(jīng)常會修改一個對象的某一小段,如果用memtable的方式,即使修改一小段,也要重寫整個對象,效率比較低。7. 易運維性主要是擴容、頂替(一臺機器損壞,用另外一臺機器代替之,可能涉及到遷移數(shù)據(jù))、升級、盤故障(數(shù)據(jù)修復(fù))等操作的快速性和簡單性。存儲機器一般是12*2T盤,現(xiàn)在極端一些有24*4T盤。單機存儲數(shù)據(jù)量是很大的。擴容或者頂替一臺機器,一般也要幾個小時甚至1天的時間。在這段時間內(nèi)存儲系統(tǒng)是處于副本缺失狀態(tài)的,萬一這段時間好的副本又出問題,后果可能很嚴重;所以,要盡量避免數(shù)據(jù)遷移或者縮短遷移時間。1) 擴容、頂替、升級² Hbase:不考慮hdfs的話,其擴容、頂替更容易,因為不涉及遷移數(shù)據(jù)。Hbase因單點問題,升級必然影響在線服務(wù),這一點是一直在努力優(yōu)化的,例如之前提到的region server standby機制,hdfs的name node的熱備機制。² Cassandr
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 部編人教版歷史七年級上冊第2課《第二次鴉片戰(zhàn)爭》聽課評課記錄
- 公司普通員工個人工作計劃
- 期股獎勵模式股權(quán)激勵協(xié)議書范本
- 無錫市短期房屋租賃合同范本
- 醫(yī)院藥品合作協(xié)議書范本
- 商品房的租賃合同范本
- 游戲平臺合作合同范本
- 建筑公司合作協(xié)議書范本
- 湘教版數(shù)學七年級下冊2.1.4《多項式的乘法》聽評課記錄2
- 預(yù)加固樁施工方案
- 廣東省廣州市黃埔區(qū)2024-2025學年八年級物理上學期教學質(zhì)量監(jiān)測試題
- 水產(chǎn)品冷凍加工原料處理與加工技術(shù)考核試卷
- 浙教版八年級下冊科學第二章 微粒的模型與符號整章思維導(dǎo)圖
- 全新保密協(xié)議模板公安下載(2024版)
- 財務(wù)管理學(第10版)課件 第1章 總論
- GB/T 4008-2024錳硅合金
- 《鼻咽癌的診治》課件
- DZ∕T 0447-2023 巖溶塌陷調(diào)查規(guī)范(1:50000)(正式版)
- 2024年天津市中考英語試題卷(含答案)
- 2024年個人信用報告(個人簡版)樣本(帶水印-可編輯)
- 精神疾病患者自殺風險評估與預(yù)防措施
評論
0/150
提交評論