谷歌的分布式文件系統簡稱為什麼
1. 什麼是Google
Google File System,簡稱GFS,是一個可擴展的分布式文件系統,用於大型的、分布式的、對大量數據進行訪問的應用。它運行於廉價的普通硬體上,並提供容錯功能。它可以給大量的用戶提供總體性能較高的服務。
GFS設計概覽
⑴設計想定
master並不為chunkserver所擁有的塊的副本的保存一個不變的記錄。它在啟動時通過簡單的查詢來獲得這些信息。Master可以保持這些信息的更新,因為它控制所有塊的放置並通過HeartBeat消息來監控chunkserver的狀態。
這樣做的好處:因為chunkserver可能加入或離開集群、改變路徑名、崩潰、重啟等,一個集群中有成百個server,這些事件經常發生,這種方法就排除了master與chunkserver之間的同步問題。
另一個原因是:只有chunkserver才能確定它自己到底有哪些塊,由於錯誤,chunkserver中的一些塊可能會很自然的消失,這樣在master中就沒有必要為此保存一個不變的記錄。
C、操作日誌:
操作日誌包含了對metadata所作的修改的歷史記錄。它作為邏輯時間線定義了並發操作的執行順序。文件、塊以及它們的版本號都由它們被創建時的邏輯時間而唯一地、永久地被標識。
操作日誌是如此的重要,我們必須要將它可靠地保存起來,並且只有在metadata的改變固定下來之後才將變化呈現給用戶。所以我們將操作日誌復制到數個遠程的機器上,並且只有在將相應的日誌記錄寫到本地和遠程的磁碟上之後才回答用戶的請求。
Master可以用操作日誌來恢復它的文件系統的狀態。為了將啟動時間減至最小,日誌就必須要比較小。每當日誌的長度增長到超過一定的規模後,master就要檢查它的狀態,它可以從本地磁碟裝入最近的檢查點來恢復狀態。
創 建一個檢查點比較費時,master的內部狀態是以一種在創建一個檢查點時並不耽誤即將到來的修改操作的方式來組織的。Master切換到一個新的日誌文件並在一個單獨的線程中創建檢查點。這個新的檢查點記錄了切換前所有的修改。在一個有數十萬文件的集群中用一分鍾左右就能完成。創建完後,將它寫入本地和 遠程的磁碟。
⑹數據完整性
名字空間的修改必須是原子性的,它們只能有master處理:名字空間鎖保證了操作的原子性和正確性,而master的操作日誌在全局范圍內定義了這些操作的順序。
文件區間的狀態在修改之後依賴於修改的類型,不論操作成功還是失敗,也不論是不是並發操作。如果不論從哪個副本上讀,所有的客戶都看到同樣的數據,那麼文件 的
這個區域就是一致的。如果文件的區域是一致的並且用戶可以看到修改操作所寫的數據,那麼它就是已定義的。如果修改是在沒有並發寫操作的影響下完成的,那麼受影響的區域是已定義的,所有的client都能看到寫的內容。成功的並發寫操作是未定義但卻是一致的。失敗的修改將使區間處於不一致的狀態。
Write操作在應用程序指定的偏移處寫入數據,而record append操作使得數據(記錄)即使在有並發修改操作的情況下也至少原子性的被加到GFS指定的偏移處,偏移地址被返回給用戶。
在一系列成功的修改操作後,最後的修改操作保證文件區域是已定義的。GFS通過對所有的副本執行同樣順序的修改操作並且使用塊版本號檢測過時的副本(由於chunkserver退出而導致丟失修改)來做到這一點。
因為用戶緩存了會位置信息,所以在更新緩存之前有可能從一個過時的副本中讀取數據。但這有緩存的截止時間和文件的重新打開而受到限制。
在修改操作成功後,部件故障仍可以是數據受到破壞。GFS通過master和chunkserver間定期的handshake,藉助校驗和來檢測對數據的破壞。一旦檢測到,就從一個有效的副本盡快重新存儲。只有在GFS檢測前,所有的副本都失效,這個塊才會丟失。
GFS系統交互
⑴租約(lease)和修改順序
⑵數據流
我們的目標是充分利用每個機器的網路帶寬,避免網路瓶頸和延遲
為了有效的利用網路,我們將數據流和控制流分離。數據是以流水線的方式在選定的chunkerserver鏈上線性的傳遞的。每個機器的整個對外帶寬都被用作傳遞數據。為避免瓶頸,每個機器在收到數據後,將它收到數據盡快傳遞給離它最近的機器。
⑶原子性的record Append
GFS 提供了一個原子性的添加操作:record append。在傳統的寫操作中,client指定被寫數據的偏移位置,向同一個區間的並發的寫操作是不連續的:區間有可能包含來自多個client的數 據碎片。在record append中, client只是指定數據。GFS在其選定的偏移出將數據至少原子性的加入文件一次,並將偏移返回給client。
在分布式的應用中,不同機 器上的許多client可能會同時向一個文件執行添加操作,添加操作被頻繁使用。如果用傳統的write操作,可能需要額外的、復雜的、開銷較大的同步, 例如通過分布式鎖管理。在我們的工作量中,這些文件通常以多個生產者單個消費者隊列的方式或包含從多個不同 client的綜合結果。
Record append和前面講的write操作的控制流差不多,只是在primary上多了一些邏輯判斷。首先,client將數據發送到文件最後一塊的所有副本 上。然後向primary發送請求。Primary檢查添加操作是否會導致該塊超過最大的規模(64M)。如果這樣,它將該塊擴充到最大規模,並告訴其它 副本做同樣的事,同時通知client該操作需要在下一個塊上重新嘗試。如果記錄滿足最大規模的要求,primary就會將數據添加到它的副本上,並告訴 其它的副本在在同樣的偏移處寫數據,最後primary向client報告寫操作成功。如果在任何一個副本上record append操作失敗,client將重新嘗試該操作。這時候,同一個塊的副本可能包含不同的數據,因為有的可能復制了全部的數據,有的可能只復制了部 分。GFS不能保證所有的副本每個位元組都是一樣的。它只保證每個數據作為一個原子單元被寫過至少一次。這個是這樣得出的:操作要是成功,數據必須在所有的 副本上的同樣的偏移處被寫過。進一步,從這以後,所有的副本至少和記錄一樣長,所以後續的記錄將被指定到更高的偏移處或者一個不同的塊上,即使另一個副本 成了primary。根據一致性保證,成功的record append操作的區間是已定義的。而受到干擾的區間是不一致的。
⑷快照(snapshot)
快照操作幾乎在瞬間構造一個文件和目錄樹的副本,同時將正在進行的其他修改操作對它的影響減至最小。
我 們使用-on-write技術來實現snapshot。當master受到一個snapshot請求時,它首先將要snapshot的文件上塊上 的lease收回。這使得任何一個向這些塊寫數據的操作都必須和master交互以找到擁有lease的副本。這就給master一個創建這個塊的副本的機 會.
副本被撤銷或終止後,master在磁碟上登記執行的操作,然後復制源文件或目錄樹的metadata以對它的內存狀態實施登記的操作。這個新創建的snapshot文件和源文件(其metadata)指向相同的塊(chunk)。
Snapshot 之後,客戶第一次向chunk c寫的時候,它發一個請求給master以找到擁有lease的副本。Master注意到chunk c的引用記數比1大,它延遲對用戶的響應,選擇一個chunk handle C』,然後要求每一有chunk c的副本的chunkserver創建一個塊C』。每個chunkserver在本地創建chunk C』避免了網路開銷。從這以後和對別的塊的操作沒有什麼區別。
GFS容錯和診斷
高可靠性
①快速恢復
不管如何終止服務,MASTER和數據塊伺服器都會在幾秒鍾內恢復狀態和運行。實際上,我們不對正常終止和不正常終止進行區分,伺服器進程都會被切斷而終止。客戶機和其他的伺服器會經歷一個小小的中斷,然後它們的特定請求超時,重新連接重啟的伺服器,重新請求。
②數據塊備份
每個數據塊都會被備份到放到不同機架上的不同伺服器上。對不同的名字空間,用戶可以設置不同的備份級別。在數據塊伺服器掉線或是數據被破壞時,MASTER會按照需要來復制數據塊。
③MASTER備份
為 確保可靠性,MASTER的狀態、操作記錄和檢查點都在多台機器上進行了備份。一個操作只有在數據塊伺服器硬碟上刷新並被記錄在MASTER和其備份的上 之後才算是成功的。如果MASTER或是硬碟失敗,系統監視器會發現並通過改變域名啟動它的一個備份機,而客戶機則僅僅是使用規范的名稱來訪問,並不會發 現MASTER的改變。
數據完整性
每個數據塊伺服器都利用校驗和來檢驗存儲數據的完整性。原因:每個伺服器隨時都有發生崩潰的可能性,並且在兩個伺服器間比較數據塊也是不現實的,同時,在兩台伺服器間拷貝數據並不能保證數據的一致性。
每個Chunk按64kB的大小分成塊,每個塊有32位的校驗和,校驗和和日誌存儲在一起,和用戶數據分開。
在 讀數據時,伺服器首先檢查與被讀內容相關部分的校驗和,因此,伺服器不會傳播錯誤的數據。如果所檢查的內容和校驗和不符,伺服器就會給數據請求者返回一個 錯誤的信息,並把這個情況報告給MASTER。客戶機就會讀其他的伺服器來獲取數據,而MASTER則會從其他的拷貝來復制數據,等到一個新的拷貝完成 時,MASTER就會通知報告錯誤的伺服器刪除出錯的數據塊。
附加寫數據時的校驗和計算優化了,因為這是主要的寫操作。我們只是更新增加部分的校驗和,即使末尾部分的校驗和數據已被損壞而我們沒有檢查出來,新的校驗和與數據會不相符,這種沖突在下次使用時將會被檢查出來。
相反,如果是覆蓋現有數據的寫,在寫以前,我們必須檢查第一和最後一個數據塊,然後才能執行寫操作,最後計算和記錄校驗和。如果我們在覆蓋以前不先檢查首位數據塊,計算出的校驗和則會因為沒被覆蓋的數據而產生錯誤。
在空閑時間,伺服器會檢查不活躍的數據塊的校驗和,這樣可以檢查出不經常讀的數據的錯誤。一旦錯誤被檢查出來,伺服器會拷貝一個正確的數據塊來代替錯誤的。
診斷工具
廣 泛而細致的診斷日誌以微小的代價換取了在問題隔離、診斷、性能分析方面起到了重大的作用。GFS伺服器用日誌來記錄顯著的事件(例如伺服器停機和啟動)和 遠程的應答。遠程日誌記錄機器之間的請求和應答,通過收集不同機器上的日誌記錄,並對它們進行分析恢復,我們可以完整地重現活動的場景,並用此來進行錯誤 分析。
測量
測試環境
一台主控機,兩台主控機備份,16台數據塊伺服器,16台客戶機。
每台機器:2塊PⅢ1.4G處理器,2G內存,2塊80G5400rpm的硬碟,1塊100Mbps全雙工網卡
19台伺服器連接到一個HP2524交換機上,16台客戶機連接到另外一台交換機上,兩台交換機通過1G的鏈路相連。