跳到主要内容

The Google File System

Patterns

  • 檔案都很大,以GB為單位 (現在說不定更大)
  • 檔案的修改,大部分是appending,少部分是overwriting
  • 寫完以後通常就是read only,而且通常是 sequential的讀

Design Assumptions

  • commodity的機器相連,所以hardware failure是家常便飯
  • 大部分是 large streaming reads和少數的random read
  • 比起latencythroughput更重要

Architecture

image info

Single Master

為了簡潔,是 single master的架構,master負責處理metadata,包括chunk在哪些chunk server、chunk migration、chunk的garbage collection、chunk的replication等。

Chunkserver

Chunkserver負責儲存chunk,master會定時的跟chunkserver,進行heartbeat並且確認chunkserer上chunk狀態。

Client

Client要讀寫chunk之前,會先跟masterchunkserver的metadata,之後跟chunkserver直接進行讀寫,減低master的loading。

Consistency Model

Leases and Mutation Order

每當client要做mutation的時候,master挑其中一個replicaprimary,並且grant一個leasePrimary會決定mutation的順序,其他replica會根據這個order來實際更改chunk。 如果一個mutation會超過lease的生存時間,primary會在heartbeat的通訊過程中,跟master要求延長expiration time

Data Flow

Client只會往某個replica寫資料,因為IP已經被設計為跟距離有關,所以會根據IP挑一個近的replica來寫,然後此replica在把data複製給另外一個replica,直到滿足replica count。

Master Operations

Namespace Management and Locking

GFS用folder路徑當每個檔案的prefix,並且每個路徑或檔案都有read lock和write lock,然後根據要做的操作決定要取得read lock或write lock。舉例來說,如果要新增一個檔案到/home/users/developer,那就要取得/home/home/users/home/users/developer的read lock。

同上,如果要修改/home/users/developer/a.md,就要額外取得/home/users/developer/a.md的write lock。

這樣做的好處是,client可以同時在一個folder讀寫不同檔案,而不會block彼此。

Creation, Re-replication, Rebalancing

Creation的時候,master會根據目前chunkserver的空間使用率來決定新的chunk要往哪邊存,目標是長期下來,每個chunkserver的硬碟使用率都差不多。

Re-replication發生在某台或複數台chunkserver down的時候,當master發現某個chunk無法滿足指定的replica factor的時候,就會根據空間使用量來指定新的chunkserver。因為master是靠定時工作來跟chunkservers sync狀況,re-replication不會馬上發生,而如果同時有很多個chunk需要複製,會根據優先權來決定哪個chunk先處理(低於 replica factor越多的chunk有越高的priority)。

chunkserver來來去去,可能導致某些chunkserver的硬碟使用量高,某些chunkserver的硬碟使用量低,master會定時的做rebalancing,讓chunkserver的硬碟使用量相近。

garbage collection

當使用者刪除檔案,相關的檔案不會馬上被刪除,而是會被改名然後放置一段時間(configurable)。在時間經過以後,首先是master刪除此檔案metadata裡面的紀錄,包括chunk的metadata。

chunkservermaster有定時的溝通,當發現這個檔案的chunks已經不在metadata,chunkserver就刪除本機的chunk。

Stale Detection

當檔案被mutate(appendoverwrite),相關的chunk 它的version會被增加。在做mutation的時候,某個chunkserver可能出問題沒有處理到,因此它保持的是舊的chunk,這些stale的chunk同樣會在定時的跟master溝通之間被發現,然後更新或刪除。