GFS分布式
GFS是什么?
1.1 簡單介紹
這個問題說大也大,說小也小。GFS是Google File System的縮寫,字面意義上就是Google的文件系統,技術層面上來講,GFS是Google在2003年前后創建的可擴展分布式文件系統 ,用來滿足 Google 不斷擴展的數據處理需求。GFS 為大型網絡和連接的節點提供容錯、可靠性、可擴展性、可用性和性能。GFS 由多個由低成本商品硬件組件構建的存儲系統組成。它經過優化以適應 Google 的不同數據使用和存儲需求,例如其搜索引擎會生成大量必須存儲的數據。在我看來這個系統最大的亮點有兩個,一個是使用集群的概念,將硬件設施連接起來共同進行文件存儲任務;另外一個是充分利用了現成服務器的優勢,同時最大限度地減少了硬件弱點。
為什么要用GFS?
大量數據的存儲會面臨很多的難點:
大數據下需要良好的表現就需要分片和容錯。在具體操作過程中,涉及到容錯一般使用副本來解決,然而副本的使用會面臨不一致問題。如果有一致性的要求,就會導致表現降低。
所謂的一致性,就是在集群中表現的像與一臺機器或一個副本進行交互那樣
因為GFS不但是一個理論成熟的框架結構,更是一種通過長期實際使用證明了其優秀性能的分布式架構。GFS是一種松散一致性模型,這是其具有優越的性能主要原因之一。
松散一致性模型關鍵:
依靠添加而不是重寫
檢查點
自我驗證(校驗和)
自我認證記錄
GFS基本結構——GFS master、GFS chunkServer、client
GFS master(主服務器)、GFS chunkServer(數據塊服務器)、client(客戶端)三者可簡單理解為圖書館關系。client相當于圖書館,GFS master相當于圖書館管理員,GFS chunkServer相當于圖書館中的書柜。我們通過圖書館client為了借到書chunk(書即是我們存儲的一個個數據塊chunk),首先要通過圖書管理員GFS master獲得目標書籍chunk的書柜chunkServer的地址,然后找到書柜chunkServer取得其中的一本書chunk。因此GFS master圖書管理員不清楚書里的內容,只負責記錄書的位置,借出和歸還,因此只記錄少量的位置數據。我們通過GFS master獲得書chunk的位置,然后拿著這個位置就能找到目標chunk,chunk即是海量數據分割后的一個個小塊,其中記錄大量數據。
要點:
Master通過lease(租約)和Primary Replica(主副本)本來構建交互的流程。
Master是做出決策、創建新的塊和賦值,并協調各種系統范圍的活動,以保證塊完全復制,平衡所有chunkserver的負載,同時還負責垃圾回收。
Master的操作通過鎖來保證命名空間范圍內的序列化
主副本是從眾多chunkserver中選出的唯一特殊副本,該副本的特殊性在于其維護了一個定時的租約列表。
租約指的是一組由用戶發來的有順序的指令集合
主副本之外的副本都需要通過主副本中的這個列表來執行指令,以保證每個副本執行的最終結果相同。
Master失效怎么辦
有副本master,擁有master狀態的完整副本;GFS論文中設計需要人工干預才能切換到其中一種主故障后的副本。
如何保障副本記錄的正確性
使用原子記錄至少追加一次的方法。
為什么不使用完全追加?
如果在其中一個寫入失敗時客戶端重新嘗試寫入,這將導致數據在未失敗的副本上多次附加。不同的設計可能會檢測到重復的客戶端請求,例如,原始故障之間的主要故障請求和客戶端的重試。
應用程序如何知道哪些部分組成填充,哪些是重復記錄?
為了檢測填充,應用程序可以放置一個可預測的幻數在有效記錄的開頭,或包含一個校驗和,該校驗和可能僅當記錄有效時才有效。該應用程序可以檢測通過在記錄中包含唯一 ID 來復制。然后,如果它讀取與先前記錄具有相同 ID 的記錄,它知道它們是彼此的重復。GFS 為應用程序提供了一個庫處理這些情況。
什么是校驗和?
校驗和算法將一個字節塊作為輸入并返回一個單個數字,它是所有輸入字節的函數。例如,一個簡單校驗和可能是輸入中所有字節的總和(mod一些大數字)。GFS 存儲每個塊的校驗和以及塊。當一個chunkserver在它的磁盤上寫一chunk時,它首先計算新塊的校驗和,并將校驗和保存在磁盤上以及塊。當一個chunkserver從磁盤讀取一個chunk時,它還讀取先前保存的校驗和,從磁盤讀取的塊,并檢查兩個校驗和是否匹配。如果數據已被磁盤損壞,校驗和不匹配,并且chunkserver 會知道返回錯誤。另外,一些 GFS應用程序存儲自己的校驗和,而不是應用程序定義的記錄,在 GFS 文件中,以區分正確的記錄和填充。
GFS 以正確性換取性能在多大程度上可以接受
這是分布式系統中反復出現的主題。強一致性通常出現在需要復雜且需要交互的協議機器之間。經過利用特定應用程序類可以容忍的放松方式一致性,可以設計出具有良好性能和足夠的一致性。例如,GFS 針對 MapReduce 進行了優化對大文件需要高讀取性能的應用程序可以在文件中有漏洞,記錄顯示多次,并且不一致的讀取。
Google 是否仍使用 GFS?
有傳言說 GFS 已經被一個叫做Colossus,總體目標相同,但在 master 方面有所改進性能和容錯性。
?
總結
- 上一篇: 概率期望题目记录
- 下一篇: python课程表代码_Python课程