本文是Frangipani論文的閱讀筆記,Frangipani是一個創建在Petal之上的分佈式文件系統,採用分佈式鎖來保證一致性。其中Petal是一個增量擴展、高可用能夠自動管理的分佈式虛擬磁盤。緩存
Frangipani最爲顯著的特性爲——一組機器使用一個公共存儲,使用鎖進行同步訪問。要求的其餘特性包括:安全
用戶程序使用系統調用(文件系統)訪問Frangipani文件系統,任何修改緩存在內核緩衝區中,直到調用fsync
或者sync
才被寫入,顯然Frangipani文件系統模塊須要運行在操做系統內核中。全部的文件系統讀寫Petal上相同的數據結構,可是在虛擬磁盤上獨立保存各自的redo日誌。Petal提供了巨大、可擴展、容錯的虛擬硬盤,而鎖服務實現了多讀單寫鎖。服務器
Frangipani運行在可信環境中,並無設計安全措施。若是須要在不可信環境使用Frangipani,能夠將包含Petal的Frangipani服務器部署在可信環境,而後將不包含Petal的客戶端和Frangipani服務器鏈接。網絡
Petal爲Frangipani提供了一個巨大的虛擬磁盤空間,地址空間大小爲,虛擬磁盤使用方式以下:數據結構
比64KB小的文件只保存在小數據塊中,更大的文件保存在16個小數據塊加上1個大數據塊中,文件大小不能超過16個小數據塊加上1個大數據塊的容量。運維
Frangipani保存元數據的REDO日誌來簡化故障恢復和提高性能,用戶數據不會記錄。當Frangipani奔潰以後,系統檢測到故障,使用日誌進行恢復。爲了保證日誌和恢復正常工做須要保證:分佈式
Frangipani使用了多讀取/單寫入鎖來保證同步性。讀取鎖容許服務器從磁盤讀取數據並緩存,在釋放讀取鎖以前須要讓緩存失效。寫入鎖容許服務器讀寫數據並緩存,可是在釋放以前須要將緩存中的髒數據寫入磁盤。做者將磁盤上的結構分割成能夠加鎖的分塊,包括每一個日誌,位圖、文件、目錄以及符號連接。避免死鎖主要靠順序加鎖和解鎖,服務器首先須要知道全部須要得到的鎖,而後進行排序,按照順序獲取和解鎖。佈局
鎖服務提供了多讀取/單寫入鎖,客戶端會一直持有鎖,直到別的有衝突的客戶端請求。鎖服務使用租期來處理故障,每一個客戶端會請求一個租期,每一個鎖會和租期對應,客戶端須要在過時以前刷新租期,若是客戶端租期過時,那麼就認爲已經崩潰了。性能
做者前後嘗試了三種鎖服務方案:大數據
增長服務器很是簡單,只須要告知使用哪一個Petal虛擬磁盤,以及如何找到鎖服務。新服務器會聯繫鎖服務得到租期,肯定日誌保存位置,而後開始處理操做。移除服務器就更加簡單了,直接關閉便可。
Petal可以在任什麼時候間建立一份虛擬磁盤的拷貝。若是想要實現文件系統層面的備份,能夠阻塞文件系統調用後進行備份。