經典分佈式論文閱讀:Frangipani

本文是Frangipani論文的閱讀筆記,Frangipani是一個創建在Petal之上的分佈式文件系統,採用分佈式鎖來保證一致性。其中Petal是一個增量擴展、高可用能夠自動管理的分佈式虛擬磁盤。緩存

總覽

Frangipani最爲顯著的特性爲——一組機器使用一個公共存儲,使用鎖進行同步訪問。要求的其餘特性包括:安全

  1. 全部用戶看到文件的一致視圖
  2. 更多的服務器能夠很方便地添加到集羣中來擴展容量和帶寬而不須要改變已有服務器的配置甚至打斷它們運行
  3. 管理員能夠添加用戶而不須要擔憂數據如何被管理
  4. 能夠在不打斷系統運行的狀況下進行全局一致備份
  5. 能夠在不須要運維介入的狀況下從機器故障、網絡故障以及磁盤故障中恢復

系統結構

組件

用戶程序使用系統調用(文件系統)訪問Frangipani文件系統,任何修改緩存在內核緩衝區中,直到調用fsync或者sync才被寫入,顯然Frangipani文件系統模塊須要運行在操做系統內核中。全部的文件系統讀寫Petal上相同的數據結構,可是在虛擬磁盤上獨立保存各自的redo日誌。Petal提供了巨大、可擴展、容錯的虛擬硬盤,而鎖服務實現了多讀單寫鎖。服務器

安全性和客戶端/服務器配置

Frangipani運行在可信環境中,並無設計安全措施。若是須要在不可信環境使用Frangipani,能夠將包含Petal的Frangipani服務器部署在可信環境,而後將不包含Petal的客戶端和Frangipani服務器鏈接。網絡

磁盤佈局

Petal爲Frangipani提供了一個巨大的虛擬磁盤空間,地址空間大小爲2^{64},虛擬磁盤使用方式以下:數據結構

  • 第一個區域(1TB)保存共享的配置參數和內部信息;
  • 第二個區域(1TB)保存日誌,每一個服務器擁有私有的日誌,目前劃分了256個空間,所以最多支持256個Frangipani服務器;
  • 第三個區域(3TB)保存位圖,追蹤剩餘區域中的空閒塊;
  • 第四個區域(1TB)保存i節點,每一個i節點大小爲512B;
  • 第五個區域(128TB)保存小數據塊,每一個數據塊爲4KB;
  • 剩餘區域保存大數據塊,每一個數據塊爲1TB。

比64KB小的文件只保存在小數據塊中,更大的文件保存在16個小數據塊加上1個大數據塊中,文件大小不能超過16個小數據塊加上1個大數據塊的容量。運維

日誌和恢復

Frangipani保存元數據的REDO日誌來簡化故障恢復和提高性能,用戶數據不會記錄。當Frangipani奔潰以後,系統檢測到故障,使用日誌進行恢復。爲了保證日誌和恢復正常工做須要保證:分佈式

  1. 不一樣服務器在同一數據上的操做必須是序列化的;
  2. 只會恢復那些擁有鎖狀態的日誌;
  3. 對於一個服務器,只有一個恢復進程在工做。

同步和緩存一致性

Frangipani使用了多讀取/單寫入鎖來保證同步性。讀取鎖容許服務器從磁盤讀取數據並緩存,在釋放讀取鎖以前須要讓緩存失效。寫入鎖容許服務器讀寫數據並緩存,可是在釋放以前須要將緩存中的髒數據寫入磁盤。做者將磁盤上的結構分割成能夠加鎖的分塊,包括每一個日誌,位圖、文件、目錄以及符號連接。避免死鎖主要靠順序加鎖和解鎖,服務器首先須要知道全部須要得到的鎖,而後進行排序,按照順序獲取和解鎖。佈局

鎖服務

鎖服務提供了多讀取/單寫入鎖,客戶端會一直持有鎖,直到別的有衝突的客戶端請求。鎖服務使用租期來處理故障,每一個客戶端會請求一個租期,每一個鎖會和租期對應,客戶端須要在過時以前刷新租期,若是客戶端租期過時,那麼就認爲已經崩潰了。性能

做者前後嘗試了三種鎖服務方案:大數據

  • 中心化的服務:缺點是難以容錯
  • 保存在Petal:缺點是性能比較差
  • 容錯可擴展存儲:和Petal服務器綁定

增長和移除服務器

增長服務器很是簡單,只須要告知使用哪一個Petal虛擬磁盤,以及如何找到鎖服務。新服務器會聯繫鎖服務得到租期,肯定日誌保存位置,而後開始處理操做。移除服務器就更加簡單了,直接關閉便可。

備份

Petal可以在任什麼時候間建立一份虛擬磁盤的拷貝。若是想要實現文件系統層面的備份,能夠阻塞文件系統調用後進行備份。

參考文獻

  1. Thekkath, Chandramohan A., Timothy Mann, and Edward K. Lee. "Frangipani: A scalable distributed file system." SOSP. Vol. 97. 1997.
相關文章
相關標籤/搜索