What we talk about

  1. Brief Idea
  2. System Architecture
  3. Protocol

Master

分散式系統的塔台

Keep in memory

  • namespace of files, ex: /etc/passwd
  • mapping files to chunks
  • location of chunks(including each replica)

In charge of

  • 第一線接待 client 們
  • 確認每個 chunkserver 死活
  • 活著很好 死了要找替代的
  • 確認每個 chunk 有好好活著

Operation Log

  • 紀錄 client 做的操作
  • 透過模擬這些操作可以回到過去
  • 回到無痛無病的健康時期

Chunk servers

與 client 親密互動

存 chunk 們

與他們的 checksum

可以直接對 chunk 操作

  • 紀錄 chunk 的版本
  • 紀錄對 chunk 操作的 log

本質是 linux 機器

每個 chunk 只是 linux filesystem 裡一個檔案
對 chunk 的 cache 不用煩惱
ext4 本身很智慧

client 跟 GFS 互動

1. client 說:「我要寫東西到檔案 foo 的某個 chunk A 上」

問 master 那個檔案的那個 chunk 在哪裡

2. master 告訴 client:「這些 ... chunk server 上有」

發個 lease 給其中隨意一台 chunk server (稱為 Primary)
告訴 client 哪一台 server 是 Primary
(其他稱為 Secondary)
接下來 client 都是跟 Primary 互動

3. 把要寫的 data 想辦法送到每個 chunk server

client 不一定是送到 Primary
看網路環境

4. client 告訴 Primary :「要寫在某某offset」

Primary 把這個操作紀錄下來
更新 chunk 的版本號

5. Primary 告訴 Secondary:「要做這個操作」

照著這個操作的 serial number apply 到 chunk 上

6. 其他 chunk server 告訴 Primary :「做好了>///<」

7. Primary 回報給 client 說完成了

有可能會回傳錯誤
因為可能某個 Secondary chunk 機器壞掉之類的

Comments

  1. Data flow 與 control flow 分開,Data 可以從 Secondary 再流回 Primary
  2. By Assumption(3), Most case is append.

Record Append

Atomic

寫在某個檔案最後面

多後面呢?
offset 是 Master 給的

Snapshot

複製檔案/資料夾

先把那些 chunk 的 lease 回收

Copy On Write

Master 記 Reference Count 在 Chunk metadata 上
要改的時候再去叫 chunk server 複製