轉(zhuǎn):http://blog.csdn.net/boyplayee/archive/2010/02/22/5318092.aspx
谷歌技術(shù)“三寶”之一的Google文件系統(tǒng)和Kosmos 文件系統(tǒng) 收藏
雖然針對大規(guī)模分布式存儲系統(tǒng),Google將推陳出新,推新的理由有很多,如"single-master design,…… but it was certainly unacceptable for latency-sensitive applications, such as video serving."。參考《Google File System II: Dawn of the Multiplying Master Nodes》和《GFS:Evolution on Fast-forward》。但是GFS畢竟為其服務(wù)了10年時間,連李開復(fù)博士也宣稱每個計算機(jī)學(xué)生都有必要學(xué)學(xué)這套系統(tǒng)。
本篇也一起談?wù)凨osmos文件系統(tǒng),傳聞Google的兩個共同創(chuàng)始人佩奇和布林有兩個大學(xué)同窗,是兩個印度人,名叫Anand Rajaraman和Venky Harinarayan,看到Google獲得巨大成功之后,就動手做了個一個新的搜索引擎CloudStore (原先一直叫Kosmos filesystem,現(xiàn)在搭上了云計算的順風(fēng)車改了頭銜)。在做這個搜索引擎的過程中,他們實現(xiàn)了一個類似GFS的文件系統(tǒng)KFS(很多理念都從GFS那里搬過來,比如constant monitoring, error detection, fault tolerance, and automatic recovery)。因為GFS的論文只是設(shè)計,而KFS是開源的,兩者結(jié)合看效果可能比較好。
首先,看過谷歌工程師寫地這篇《The Google File System》的能不能做下面這道證明題:考慮一個擁有1000個節(jié)點的GFS集群,定性(不定量)證明:在有800個節(jié)點失效的情況下,剩下的200個節(jié)點仍然能夠完成工作,即performance下降的情況下,scalability,reliability,availability等保持良好。
本文想闡釋谷歌文件系統(tǒng)的一些設(shè)計理念。
一 架構(gòu):
下圖為谷歌文件系統(tǒng)的結(jié)構(gòu)圖,一個GFS集群包含一個主服務(wù)器和多個塊服務(wù)器, 這是一個單一主服務(wù)器模型:
概括一下塊(chunk)的一些信息:塊尺寸是64MB;文件被分割成固定尺寸的塊,在每個塊創(chuàng)建的時候,服務(wù)器分配給它一個不變的、唯一的64位的塊句柄對它進(jìn)行標(biāo)識;每個塊都會復(fù)制到多個塊服務(wù)器上。
主服務(wù)器保存三種主要類型的metadata:文件和塊的命名空間,文件到塊的映射,以及每個塊副本的位置,它通過全局的信息精確確定塊的位置以及進(jìn)行復(fù)制決定。主服務(wù)器的主要工作有:主服務(wù)器在后臺周期掃貓自己的整個狀態(tài),用來在塊服務(wù)器間實現(xiàn)塊的垃圾收集的功能,用來實現(xiàn)塊服務(wù)器失效的時復(fù)制新副本的功能,用來實現(xiàn)負(fù)載均衡的塊移動的功能,以及用來實現(xiàn)統(tǒng)計硬盤使用情況的功能等。
塊服務(wù)器保存著塊,并根據(jù)指定的塊句柄和字節(jié)區(qū)間來讀寫塊數(shù)據(jù)。
客戶端不通過主服務(wù)器讀寫數(shù)據(jù)。反之,客戶端向主服務(wù)器詢問它應(yīng)該聯(lián)系的塊服務(wù)器。客戶端短期緩存這些信息,后續(xù)的操作直接跟塊服務(wù)器進(jìn)行。
讀取流程:首先,利用固定的塊尺寸,客戶端把文件名和程序指定的字節(jié)偏移轉(zhuǎn)換成文件的塊索引。然后,它把文件名和塊索引發(fā)送給主服務(wù)器。主服務(wù)器回答相應(yīng)的塊句柄和副本們的位置。客戶端用文件名和塊索引作為鍵值緩存這些信息。
此系統(tǒng)可靠性方面相關(guān)的一些設(shè)計,下面概要敘述一下,后面會有詳細(xì)描述:
1主服務(wù)器不持久化保存塊的位置信息。主服務(wù)器在自己啟動以及塊服務(wù)器加入集群的時候,詢問塊服務(wù)器它所包含的塊的信息,然后定期的心跳信息監(jiān)控塊服務(wù)器的狀態(tài)。
2 名稱空間和文件塊映射的metadata,會用log的方式保存在主服務(wù)器的硬盤上的操作日志內(nèi),并在遠(yuǎn)程的機(jī)器內(nèi)復(fù)制一個副本。使用log,可以更新主服務(wù)器的狀態(tài),而且不用擔(dān)心服務(wù)器崩潰帶來的數(shù)據(jù)不一致的風(fēng)險。
3. 主服務(wù)器通過重放operation log恢復(fù)其文件系統(tǒng)。operation log是metadata唯一的持久化存儲記錄,起到了定義同步操作順序的邏輯時間線的作用。文件和塊及其版本都是唯一和持久地由他們創(chuàng)建時的邏輯時間標(biāo)識的。進(jìn)行恢復(fù)僅需要最新的checkpoint和相應(yīng)的日志文件。日志增長到一個特定尺寸的時候,主服務(wù)器匯總的狀態(tài)為一個checkpoint。
4文件命名空間的修改(例如,文件創(chuàng)建)是原子性的。他們僅受主服務(wù)器的控制:命名空間鎖定保證了原子性和正確性;主服務(wù)器的操作日志定義了這些操作的全局總順序。在修改操作成功后,部件故障仍可以使數(shù)據(jù)受到破壞。GFS通過master和chunkserver間定期的handshake,借助校驗和來檢測對數(shù)據(jù)的破壞。一旦檢測到,就從一個有效的副本盡快重新存儲。只有在GFS檢測前,所有的副本都失效,這個塊才會丟失。
5…………….
二 系統(tǒng)交互
這一節(jié)討論客戶機(jī),服務(wù)器和塊服務(wù)器三者如何交互以實現(xiàn)數(shù)據(jù)操作,原子化的記錄追加及快照。
2.1 leases and mutation order
Mutations是一個會改變塊內(nèi)容或者元數(shù)據(jù)的操作,例如寫入或者記錄追加。每個變更執(zhí)行在塊的所有副本上。使用leases來保持多個副本間變更順序的一致性,leases機(jī)制的設(shè)計是為了最小化主服務(wù)器的管理負(fù)載。由于Master首先grants一個主塊(即副本中的一個塊lease),所以全局的mutation order就形成了:首先由主服務(wù)器選擇的lease生成順序決定,然后由lease中主塊分配的序列號決定。再用圖來說明寫入操作的控制流程:
1客戶機(jī)向主服務(wù)器詢問哪一個塊服務(wù)器保存了當(dāng)前的lease,以及其它副本的位置。如果沒有一個塊服務(wù)器有l(wèi)ease,主服務(wù)器就選擇一個副本給它一個lease(沒有被顯示出來)。
2主服務(wù)器回復(fù)主塊的標(biāo)識符以及其他副本的位置。客戶機(jī)為了后續(xù)的操作緩存這個數(shù)據(jù)。只有主塊不可用,或者主塊回復(fù)說它已經(jīng)不再擁有l(wèi)ease的時候,客戶機(jī)才需要重新跟主服務(wù)器聯(lián)絡(luò)。
3客戶機(jī)把數(shù)據(jù)推送到所有的副本上。客戶機(jī)可以用任意的順序推送。每個塊服務(wù)器會把這些數(shù)據(jù)保存在它的內(nèi)部LRU緩沖內(nèi),直到數(shù)據(jù)被使用或者過期。通過把數(shù)據(jù)流和控制流分離,我們可以基于網(wǎng)絡(luò)負(fù)載狀況對昂貴的數(shù)據(jù)流進(jìn)行規(guī)劃,以提高性能,而不用去管哪個塊服務(wù)器是主塊。
4所有的副本都被確認(rèn)已經(jīng)得到數(shù)據(jù)后,客戶機(jī)發(fā)送寫請求到主塊。這個請求標(biāo)識了早前推送到所有副本的數(shù)據(jù)。主塊為收到的所有操作分配連續(xù)的序列號,這些可能來自不同的客戶機(jī)。它依照序列號的順序把這些操作應(yīng)用到它自己的本地狀態(tài)中。
5主塊把寫請求傳遞到所有的二級副本。每個二級副本依照主塊分配的序列號的順序應(yīng)用這些操作。
6所有二級副本回復(fù)主塊說明他們已經(jīng)完成操作。
7主塊回復(fù)客戶機(jī)。任何副本產(chǎn)生的錯誤都會報告給客戶機(jī)。錯誤的情況下,主塊和一些二級副本可能成功的寫入了數(shù)據(jù)。(如果主塊寫入失敗,操作就不會被分配序列號,也不會被傳遞。)客戶端請求被確認(rèn)為失敗,已經(jīng)修改的區(qū)域保持不一致的狀態(tài)。我們的客戶機(jī)代碼通過重復(fù)失敗的操作來處理這樣的錯誤。在完全從頭開始寫入之前,可能會先從步驟3到步驟7進(jìn)行幾次嘗試。
2.2 數(shù)據(jù)流
數(shù)據(jù)流和控制流分開。控制流從客戶機(jī)到主塊然后再到所有二級副本的同時,數(shù)據(jù)順序推送到一個精心選擇的管道形式的塊服務(wù)器鏈。特點:用IP地址就可以計算出節(jié)點的遠(yuǎn)近;用在TCP連接上管道化數(shù)據(jù)傳輸來最小化延遲。
2.3 原子性的記錄追加
GFS提供了一個原子性的添加操作:record append。在傳統(tǒng)的寫操作中,client指定被寫數(shù)據(jù)的偏移位置,向同一個區(qū)間的并發(fā)的寫操作是不連續(xù)的:區(qū)間有可能包含來自多個client的數(shù)據(jù)碎片。在record append中, client只是指定數(shù)據(jù)。GFS在其選定的偏移出將數(shù)據(jù)至少原子性的加入文件一次,并將偏移返回給client。
在分布式的應(yīng)用中,不同機(jī)器上的許多client可能會同時向一個文件執(zhí)行添加操作,添加操作被頻繁使用。如果用傳統(tǒng)的write操作,可能需要額外的、復(fù)雜的、開銷較大的同步,例如通過分布式鎖管理。在我們的工作量中,這些文件通常以多個生產(chǎn)者單個消費者隊列的方式或包含從多個不同 client的綜合結(jié)果。
Record append和前面講的write操作的控制流差不多,只是在primary上多了一些邏輯判斷。首先,client將數(shù)據(jù)發(fā)送到文件最后一塊的所有副本上。然后向primary發(fā)送請求。Primary檢查添加操作是否會導(dǎo)致該塊超過最大的規(guī)模(64M)。如果這樣,它將該塊擴(kuò)充到最大規(guī)模,并告訴其它副本做同樣的事,同時通知client該操作需要在下一個塊上重新嘗試。如果記錄滿足最大規(guī)模的要求,primary就會將數(shù)據(jù)添加到它的副本上,并告訴其它的副本在同樣的偏移處寫數(shù)據(jù),最后primary向client報告寫操作成功。如果在任何一個副本上record append操作失敗,client將重新嘗試該操作。這時候,同一個塊的副本可能包含不同的數(shù)據(jù),因為有的可能復(fù)制了全部的數(shù)據(jù),有的可能只復(fù)制了部分。GFS不能保證所有的副本每個字節(jié)都是一樣的。它只保證每個數(shù)據(jù)作為一個原子單元被寫過至少一次。這個是這樣得出的:操作要是成功,數(shù)據(jù)必須在所有的副本上的同樣的偏移處被寫過。進(jìn)一步,從這以后,所有的副本至少和記錄一樣長,所以后續(xù)的記錄將被指定到更高的偏移處或者一個不同的塊上,即使另一個副本成了primary。根據(jù)一致性保證,成功的record append操作的區(qū)間是已定義的。而受到干擾的區(qū)間是不一致的。
2.4快照
快照操作幾乎在瞬間構(gòu)造一個文件和目錄樹的副本,同時將正在進(jìn)行的其他修改操作對它的影響減至最小。
我們使用copy-on-write技術(shù)來實現(xiàn)snapshot。當(dāng)master受到一個snapshot請求時,它首先要撤消將要snapshot的文件上塊上的lease。這使得任何一個向這些塊寫數(shù)據(jù)的操作都必須和master交互以找到擁有l(wèi)ease的副本。這就給master一個創(chuàng)建這個塊的副本的機(jī)會。
副本被撤銷或終止后,master在磁盤上登記執(zhí)行的操作,然后復(fù)制源文件或目錄樹的metadata以對它的內(nèi)存狀態(tài)實施登記的操作。這個新創(chuàng)建的snapshot文件和源文件(其metadata)指向相同的塊(chunk)。
Snapshot之后,客戶第一次向chunk c寫的時候,它發(fā)一個請求給master以找到擁有l(wèi)ease的副本。Master注意到chunk c的引用記數(shù)比1大,它延遲對用戶的響應(yīng),選擇一個chunk handle C’,然后要求每一有chunk c的副本的chunkserver創(chuàng)建一個塊C’。每個chunkserver在本地創(chuàng)建chunk C’避免了網(wǎng)絡(luò)開銷。從這以后和對別的塊的操作沒有什么區(qū)別。
3.Mast操作
MASTER執(zhí)行所有名字空間的操作,除此之外,他還在系統(tǒng)范圍管理數(shù)據(jù)塊的復(fù)制:決定數(shù)據(jù)塊的放置方案,產(chǎn)生新數(shù)據(jù)塊并將其備份,和其他系統(tǒng)范圍的操作協(xié)同來確保數(shù)據(jù)備份的完整性,在所有的數(shù)據(jù)塊服務(wù)器之間平衡負(fù)載并收回沒有使用的存儲空間。
3.1 名字空間管理和加鎖
與傳統(tǒng)文件系統(tǒng)不同的是,GFS沒有與每個目錄相關(guān)的能列出其所有文件的數(shù)據(jù)結(jié)構(gòu),它也不支持別名(unix中的硬連接或符號連接),不管是對文件或是目錄。GFS的名字空間邏輯上是從文件元數(shù)據(jù)到路徑名映射的一個查用表。
MASTER在執(zhí)行某個操作前都要獲得一系列鎖,例如,它要對/d1/d2…/dn/leaf執(zhí)行操作,則它必須獲得/d1,/d1/d2,…, /d1/d2/…/dn的讀鎖,/d1/d2…/dn/leaf的讀鎖或?qū)戞i(其中l(wèi)eaf可以使文件也可以是目錄)。MASTER操作的并行性和數(shù)據(jù)的一致性就是通過這些鎖來實現(xiàn)的。
3.2 備份存儲放置策略
一個GFS集群文件系統(tǒng)可能是多層分布的。一般情況下是成千上萬個文件塊服務(wù)器分布于不同的機(jī)架上,而這些文件塊服務(wù)器又被分布于不同機(jī)架上的客戶來訪問。因此,不同機(jī)架上的兩臺機(jī)器之間的通信可能通過一個或多個交換機(jī)。數(shù)據(jù)塊冗余配置策略要達(dá)到多個目的:最大的數(shù)據(jù)可靠性和可用性,最大的網(wǎng)絡(luò)帶寬利用率。因此,如果僅僅把數(shù)據(jù)的拷貝置于不同的機(jī)器上很難滿足這兩個要求,必須在不同的機(jī)架上進(jìn)行數(shù)據(jù)備份。這樣即使整個機(jī)架被毀或是掉線,也能確保數(shù)據(jù)的正常使用。這也使數(shù)據(jù)傳輸,尤其是讀數(shù)據(jù),可以充分利用帶寬,訪問到多個機(jī)架,而寫操作,則不得不涉及到更多的機(jī)架。
3.3 產(chǎn)生、重復(fù)制、重平衡數(shù)據(jù)塊
當(dāng)MASTER產(chǎn)生新的數(shù)據(jù)塊時,如何放置新數(shù)據(jù)塊,要考慮如下幾個因素:(1)盡量放置在磁盤利用率低的數(shù)據(jù)塊服務(wù)器上,這樣,慢慢地各服務(wù)器的磁盤利用率就會達(dá)到平衡。(2)盡量控制在一個服務(wù)器上的“新創(chuàng)建”的次數(shù)。(3)由于上一小節(jié)討論的原因,我們需要把數(shù)據(jù)塊放置于不同的機(jī)架上。
MASTER在可用的數(shù)據(jù)塊備份低于用戶設(shè)定的數(shù)目時需要進(jìn)行重復(fù)制。這種情況源于多種原因:服務(wù)器不可用,數(shù)據(jù)被破壞,磁盤被破壞,或者備份數(shù)目被修改。每個被需要重復(fù)制的數(shù)據(jù)塊的優(yōu)先級根據(jù)以下幾項確定:第一是現(xiàn)在的數(shù)目距目標(biāo)的距離,對于能阻塞用戶程序的數(shù)據(jù)塊,我們也提高它的優(yōu)先級。最后, MASTER按照產(chǎn)生數(shù)據(jù)塊的原則復(fù)制數(shù)據(jù)塊,并把它們放到不同的機(jī)架內(nèi)的服務(wù)器上。
MASTER周期性的平衡各服務(wù)器上的負(fù)載:它檢查chunk分布和負(fù)載平衡,通過這種方式來填充一個新的服務(wù)器而不是把其他的內(nèi)容統(tǒng)統(tǒng)放置到它上面帶來大量的寫數(shù)據(jù)。數(shù)據(jù)塊放置的原則與上面討論的相同,此外,MASTER還決定哪些數(shù)據(jù)塊要被移除,原則上它會清除那些空閑空間低于平均值的那些服務(wù)器。
3.4 垃圾收集
在一個文件被刪除之后,GFS并不立即收回磁盤空間,而是等到垃圾收集程序在文件和數(shù)據(jù)塊級的的檢查中收回。
當(dāng)一個文件被應(yīng)用程序刪除之后,MASTER會立即記錄下這些變化,但文件所占用的資源卻不會被立即收回,而是重新給文件命了一個隱藏的名字,并附上了刪除的時間戳。在MASTER定期檢查名字空間時,它刪除超過三天(可以設(shè)定)的隱藏的文件。在此之前,可以以一個新的名字來讀文件,還可以以前的名字恢復(fù)。當(dāng)隱藏的文件在名字空間中被刪除以后,它在內(nèi)存中的元數(shù)據(jù)即被擦除,這就有效地切斷了他和所有數(shù)據(jù)塊的聯(lián)系。
在一個相似的定期的名字空間檢查中,MASTER確認(rèn)孤兒數(shù)據(jù)塊(不屬于任何文件)并擦除它的元數(shù)據(jù),在和MASTER的心跳信息交換中,每個服務(wù)器報告他所擁有的數(shù)據(jù)塊,MASTER返回元數(shù)據(jù)不在內(nèi)存的數(shù)據(jù)塊,服務(wù)器即可以刪除這些數(shù)據(jù)塊。
3.5 過時數(shù)據(jù)的探測
在數(shù)據(jù)更新時如果服務(wù)器停機(jī)了,那么他所保存的數(shù)據(jù)備份就會過時。對每個數(shù)據(jù)塊,MASTER設(shè)置了一個版本號來區(qū)別更新過的數(shù)據(jù)塊和過時的數(shù)據(jù)塊。
當(dāng)MASTER授權(quán)一個新的lease時,他會增加數(shù)據(jù)塊的版本號并會通知更新數(shù)據(jù)備份。MASTER和備份都會記錄下當(dāng)前的版本號,如果一個備份當(dāng)時不可用,那么他的版本號不可能提高,當(dāng)ChunkServer重新啟動并向MASTER報告他的數(shù)據(jù)塊集時,MASTER就會發(fā)現(xiàn)過時的數(shù)據(jù)。
MASTER在定期的垃圾收集程序中清除過時的備份,在此以前,處于效率考慮,在各客戶及英大使,他會認(rèn)為根本不存在過時的數(shù)據(jù)。作為另一個安全措施, MASTER在給客戶及關(guān)于數(shù)據(jù)塊的應(yīng)答或是另外一個讀取數(shù)據(jù)的服務(wù)器數(shù)據(jù)是都會帶上版本信息,在操作前客戶機(jī)和服務(wù)器會驗證版本信息以確保得到的是最新的數(shù)據(jù)。
4、容錯和診斷
4.1 高可靠性
4.1.1 快速恢復(fù)
不管如何終止服務(wù),MASTER和數(shù)據(jù)塊服務(wù)器都會在幾秒鐘內(nèi)恢復(fù)狀態(tài)和運行。實際上,我們不對正常終止和不正常終止進(jìn)行區(qū)分,服務(wù)器進(jìn)程都會被切斷而終止。客戶機(jī)和其他的服務(wù)器會經(jīng)歷一個小小的中斷,然后它們的特定請求超時,重新連接重啟的服務(wù)器,重新請求。
4.1.2 數(shù)據(jù)塊備份
如上文所討論的,每個數(shù)據(jù)塊都會被備份到放到不同機(jī)架上的不同服務(wù)器上。對不同的名字空間,用戶可以設(shè)置不同的備份級別。在數(shù)據(jù)塊服務(wù)器掉線或是數(shù)據(jù)被破壞時,MASTER會按照需要來復(fù)制數(shù)據(jù)塊。
4.1.3 MASTER備份
為確保可靠性,MASTER的狀態(tài)、操作記錄和檢查點都在多臺機(jī)器上進(jìn)行了備份。一個操作只有在數(shù)據(jù)塊服務(wù)器硬盤上刷新并被記錄在MASTER和其備份的上之后才算是成功的。如果MASTER或是硬盤失敗,系統(tǒng)監(jiān)視器會發(fā)現(xiàn)并通過改變域名啟動它的一個備份機(jī),而客戶機(jī)則僅僅是使用規(guī)范的名稱來訪問,并不會發(fā)現(xiàn)MASTER的改變。
4.2 數(shù)據(jù)完整性
每個數(shù)據(jù)塊服務(wù)器都利用校驗和來檢驗存儲數(shù)據(jù)的完整性。原因:每個服務(wù)器隨時都有發(fā)生崩潰的可能性,并且在兩個服務(wù)器間比較數(shù)據(jù)塊也是不現(xiàn)實的,同時,在兩臺服務(wù)器間拷貝數(shù)據(jù)并不能保證數(shù)據(jù)的一致性。
每個Chunk按64kB的大小分成塊,每個塊有32位的校驗和,校驗和和日志存儲在一起,和用戶數(shù)據(jù)分開。
在讀數(shù)據(jù)時,服務(wù)器首先檢查與被讀內(nèi)容相關(guān)部分的校驗和,因此,服務(wù)器不會傳播錯誤的數(shù)據(jù)。如果所檢查的內(nèi)容和校驗和不符,服務(wù)器就會給數(shù)據(jù)請求者返回一個錯誤的信息,并把這個情況報告給MASTER。客戶機(jī)就會讀其他的服務(wù)器來獲取數(shù)據(jù),而MASTER則會從其他的拷貝來復(fù)制數(shù)據(jù),等到一個新的拷貝完成時,MASTER就會通知報告錯誤的服務(wù)器刪除出錯的數(shù)據(jù)塊。
附加寫數(shù)據(jù)時的校驗和計算優(yōu)化了,因為這是主要的寫操作。我們只是更新增加部分的校驗和,即使末尾部分的校驗和數(shù)據(jù)已被損壞而我們沒有檢查出來,新的校驗和與數(shù)據(jù)會不相符,這種沖突在下次使用時將會被檢查出來。
相反,如果是覆蓋現(xiàn)有數(shù)據(jù)的寫,在寫以前,我們必須檢查第一和最后一個數(shù)據(jù)塊,然后才能執(zhí)行寫操作,最后計算和記錄校驗和。如果我們在覆蓋以前不先檢查首位數(shù)據(jù)塊,計算出的校驗和則會因為沒被覆蓋的數(shù)據(jù)而產(chǎn)生錯誤。
在空閑時間,服務(wù)器會檢查不活躍的數(shù)據(jù)塊的校驗和,這樣可以檢查出不經(jīng)常讀的數(shù)據(jù)的錯誤。一旦錯誤被檢查出來,服務(wù)器會拷貝一個正確的數(shù)據(jù)塊來代替錯誤的。
4.3 診斷工具
廣泛而細(xì)致的診斷日志以微小的代價換取了在問題隔離、診斷、性能分析方面起到了重大的作用。GFS服務(wù)器用日志來記錄顯著的事件(例如服務(wù)器停機(jī)和啟動)和遠(yuǎn)程的應(yīng)答。遠(yuǎn)程日志記錄機(jī)器之間的請求和應(yīng)答,通過收集不同機(jī)器上的日志記錄,并對它們進(jìn)行分析恢復(fù),我們可以完整地重現(xiàn)活動的場景,并用此來進(jìn)行錯誤分析。
以下是Kosmos filesystem的一些特性:
自動存儲擴(kuò)充(添加新的chunckserver,系統(tǒng)自動感知)
有效性(復(fù)制機(jī)制保證文件有效性,一般文件會被以三種方式存儲,當(dāng)其中一個chunkserver出現(xiàn)錯誤的時候,不會影響 數(shù)據(jù)的讀取)
文件復(fù)制粒度:可以配置文件復(fù)制的粒度,最大可以被復(fù)制64份
還原復(fù)制:當(dāng)其中一個Chunckserver出現(xiàn)故障的時候,Metaserver會強(qiáng)制使用其他的chunckserver
負(fù)載平衡(系統(tǒng)周期地檢查chunkservers的磁盤利用,并重新平衡chunkservers的磁盤利用,HDFS現(xiàn)在還沒有支持)
數(shù)據(jù)完整性(當(dāng)要讀取數(shù)據(jù)時檢查數(shù)據(jù)的完整性,如果檢驗出錯使用另外的備份覆蓋當(dāng)前的數(shù)據(jù))
文件寫入:當(dāng)一個應(yīng)用程序創(chuàng)建了一個文件,這個文件名會被立刻寫入文件系統(tǒng),但為了性能,寫入的數(shù)據(jù)會被緩存在kfs客戶端.并且周期性的從緩存中把數(shù)據(jù)更新到chunkserver中。當(dāng)然,應(yīng)用程序也可以強(qiáng)制把數(shù)據(jù)更新到服務(wù)器上。一旦數(shù)據(jù)被更新到服務(wù)器,就可以被有效的讀取了。
契約(使用契約來保證Client緩存的數(shù)據(jù)和文件系統(tǒng)中的文件保持一致性)
支持FUSE(在linux系統(tǒng)下,可以通過Fuse 映射一個文件夾,從而可以很方便的讀取kfs的文件)
支持C++,Java,Python方式的調(diào)用
提供了豐富的工具程序,如kfsshell,cp2kfs等
提供了啟動和停止服務(wù)的腳本
本文來自CSDN博客,轉(zhuǎn)載請標(biāo)明出處:http://blog.csdn.net/boyplayee/archive/2010/02/22/5318092.aspx
posted on 2010-02-26 17:17
小王 閱讀(2422)
評論(0) 編輯 收藏 引用 所屬分類:
分布式系統(tǒng)