論文位址:https://pdos.csail.mit.edu/6.824/papers/thekkath-frangipani.pdf
一、概述
理想的分布式檔案系統應該是可以提供一緻性的檔案通路、存儲可以按需擴容、性能可以橫向擴充、最小化人工維護成本。Frangipani就是這樣的一個分布式檔案系統。
Frangipani提供以下幾個特性:
- 所有使用者都具有檔案相同的一緻性視圖
- 運作時增加伺服器,伺服器數量變更不會打亂運作的服務
- 管理者增加新使用者不需要擔心存儲的配置設定
- 一緻行備份、線上備份、允許使用者快速通路誤删除的檔案
- 高容錯性
二、系統架構
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiclRnblN2XjlGcjAzNfRHLGZkRGZkRfJ3bs92YsYTMfVmepNHL6VkaORzaE9EMFpHW4Z0MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnLxkjM4QTO1ADMwETOwAjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
上層的frangipani server通過petal通路檔案,并且petal使用lock service保證file的一緻性。
此圖frangipani server沒有畫出來,它可能跟petal在一台機器,也可能沒有。同時lock service是獨立與其它系統的,但是也可以和其它系統一起運作。
使用者将修改的資料暫存到本地直到下一次系統同步被調用,他們的redo log會被存到petal的不同位置,使用者崩潰恢複。
三、磁盤布局
frangipani利用petal大且稀疏的磁盤空間簡化了它的資料結構。
四、日志與恢複
日志
- frangipani采用WAL的方式,在寫資料以前先寫日志
- log在petal有特定的位置儲存
- 每個日志有LSN,并且有version number用于recovery
- log是儲存在一個環型的存儲空間上,當環滿了,會擦除前面25%的部分
- 每個日志目前最大是128KB
崩潰恢複
當一台frangipani崩潰後,崩潰的server的client或者lock service會檢測到。recovery demon會被給予lock和log,recovery demon按序執行未完的日志,隻要在petal是可用的情況下,可容忍無限的frangipani server崩潰。
確定logging和recovery work的細節
- 通過lock protocal確定對相同資料的請求是串行的,在擷取write lock之前確定之前的髒資料被寫到petal
- 為了防止某些block被重複寫,是以在block中加入version number(log中也有),是以當将要寫入的log的version number小于block中的時,則不寫入此log
- lock service確定隻有一台server在執行recovery
- log會有crc校驗
五、緩存一緻
frangipani通過多讀/單寫的鎖來實作同步。當lock service檢測到有沖突的lock時,目前的holder會被要求釋放lock。
當write lock被釋放時,髒資料會被寫到磁盤。read lock被釋放時,會清空自己的緩存。