程序員的智囊庫系列之3–分佈式文件系統(Distributed file systems)

程序員的智囊庫系列之3--分佈式文件系統(Distributed file systems)

時間:2014-11-16
做者:FingerLiu

這是程序員的智囊庫系列的第三篇文章。上一篇文章原本打算介紹幾個搭建網站的框架,但因爲這部分的內容較多,還須要再整理一段時間,因此先放出這部分的第三篇文章。這一部分咱們講介紹分佈式存儲相關的一些知識,以及當下(2013-10-29)主流的分佈式文件系統。因爲有些NoSQL數據庫也能夠用來作分佈式文件系統的替代物,因此這部分咱們還將介紹幾個NoSQL數據庫。主要講介紹如下幾種分佈式文件系統和NoSQL數據庫:
- nfs
- ceph
- TFS
- GlusterFS
- MooseFS
- PVFS2
- GPFS
- HDFS
- FastDFS
- MogileFS
- Lustre
- GoogleFS
- memcached
- Tokyo Tyrant
- Redis
- MongoDBhtml

背景

以前公司一直用nfs作文件服務器,nfs的好處就是配置簡單,使用方便。但缺點是當數據量不少,尤爲是小文件多的時候,其性能使人堪憂,每每會成爲整個系統的性能瓶頸。因此準備在未來考慮用性能更好的方法替代nfs,因而花大工夫整理調查,橫向對比了各分佈式文件系統。調查報告的詳細結果整理在這裏,本文是從中抽出幾個概要部分稍做講解,具體內容請參見調查報告原文我把分析報告原文放到了七牛上,但我感受它最近不太穩定,若是下載不了,請與我聯繫,或直接在下面評論裏留郵箱。node

注:原本調查報告分兩部分,理論分析報告和性能測試報告。本文的目的是介紹給你們更多的知識,擴展知識面,增長知識的廣度。而不是說直接告訴你,這個比那個好,你用這個,別用那個。尤爲是性能測試這種東西,別人的測試結果的參考價值並非很大,必須沉下心來,本身去一點點的測才能找到最適合本身的工具、參數。所以,本文只給出了理論分析報告,並無給出性能測試報告。linux

幾點基礎知識

存儲方案

  • DAS
  • SAN
  • NAS

數據存儲的方法

  • 塊存儲(block)
  • 文件存儲(file)
  • 對象存儲(object)

元數據(meta data)

元數據的概念:data about data
數據是指普通文件中的實際數據,而元數據指用來描述一個文件的特徵的系統數據,
諸如訪問權限、文件擁有者以及文件數據塊的分佈信息(inode...)等等。
在集羣文件系統中,分佈信息包括文件在磁盤上的位置以及磁盤在集羣中的位置。
用戶須要操做一個文件必須首先獲得它的元數據,才能定位到文件的位置而且獲得文件的內容或相關屬性。
元數據對文件系統的影響:文件系統對元數據的操做佔據了傳統文件系統總負荷的近一半。
高效的元數據管理方式對提升整個系統的性能相當重要。
A comparison of file system workloads. 2000 USENIX Annual Technical Conference程序員

單點依賴

當一臺服務器出現故障後,整個服務器羣癱瘓。
解決方案:
1 TFS 利用linux 高可用性(HA)機制,配置HA元數據服務集羣。但這樣只能配置主設備和從設備,事實上同一時刻仍是隻有一個服務器在服務。這樣作只能提升系統的穩定性,並不能解決採用集成式元數據服務模式的瓶頸問題(因爲系統須要同步,反而會下降性能)。
2 Ceph GPFS 分佈式元數據服務模型 將負載分散到多臺服務器解決了性能瓶頸問題,利用對等的服務器或冗餘元數據服務分區解決了單點故障問題。分佈式看似很是完善,然而它大大增長了設計實現上的複雜性,同時可能會引入了新的問題,即性能開銷和數據一致性問題。web

3 GlusterFS 無元數據服務模型
無元數據服務器設計的好處是沒有單點故障和性能瓶頸問題,可提升系統擴展性、性能、可靠性和穩定性。對於海量小文件應用,這種設計可以有效解決元數據的難點問題。它的負面影響是,數據一致問題更加複雜,文件目錄遍歷操做效率低下,缺少全局監控管理功能。同時也致使客戶端承擔了更多的職能,好比文件定位、名字空間緩存、邏輯卷視圖維護等等,這些都增長了客戶端的負載,佔用至關的CPU和內存。數據庫

HA高可用性

高可用性H.A.(High Availability)指的是經過儘可能縮短因平常維護操做(計劃)和突發的系統崩潰(非計劃)所致使的停機時間,以提升系統和應用的可用性。它與被認爲是不間斷操做的容錯技術有所不一樣。HA系統是目前企業防止核心計算機系統因故障停機的最有效手段。
實現方法:
1. heartbeat:比較經常使用
2. rhcs:redhat集羣套件--redhat cluster suite 圖形界面,實現方便,可有100多個節點
3. corosync/openais + paceker
2個節點:
採用主備模式:一臺激活,另外一臺備份,對外呈現一個虛擬ip地址。兩個節點之間採用心跳線,備份節點使用心跳線來探測活動節點是否處於活動狀態。
心跳線:雙絞線 或光纖跳線或 serial線
採用主主模式:兩個節點,在提供web服務時,左側爲激活狀態,右側爲備份狀態;在實現mail服務時, 一個爲激活狀態,一個爲備份狀態。緩存

FUSE

Filesystem in userspace
在用戶態實現的文件系統安全

爲何使用FUSE:服務器

首先要了解用戶態和內核態
爲了保證系統安全,在用戶態執行的代碼被硬件限制,不能進行某些操做,如修改其餘程序的存儲空間、修改配置文件、殺死其餘進程、重啓等。
而在內核態(核心態)執行的代碼,能夠不加限制地對系統存儲、外部設備進行操做。網絡

可是從用戶態切換到核心態須要很大的開銷。
因此FUSE有以下優勢:
可以大幅提升效率,簡化了爲操做系統提供新的文件系統的工做量,特別適用於各類虛擬文件系統和網絡文件系統。

開源軟件的版本(copyleft)問題

GPL GPL2 GPL3 LGPL AGPL

題外話

無目錄結構、扁平化存儲是海量存儲的將來發展方向
通常來說計算機內部對文件的操做和查找不是按目錄進行定位的
目錄結構徹底是爲了方便用戶瀏覽。
於是,一些不會與用戶直接打交道的數據,徹底能夠不用目錄結構存儲。設計新產品的時候能夠採用扁平化設計。

參考資料

關於存儲,分佈式存儲,分佈式文件系統的更多信息,能夠參見如下幾本資料:
1. 劉愛貴整理的《分佈式文件系統》。分佈式文件系統的大致認識。
2. 張冬寫的《大話存儲》和《大話存儲2》。這個系列的書講得很是通俗易懂,並且很詳細,例子也很生動,我認爲能夠做爲國內的權威了。
3. 《海量存儲》

分佈式文件系統的評價標準

部署

  • 部署複雜程度
  • 服務器配置要求
  • 文件系統接口
  • 是否支持FUSE
  • 是否須要配套的客戶端
  • 是否支持目錄結構
  • 可拓展性

性能

  • 小文件支持
  • 大文件支持
  • 文件大小對性能的影響
  • 平均傳輸速率

數據安全

  • 單點依賴
  • 冗餘保護
  • 故障恢復

實際應用

  • 適用產品級別
  • 是否成熟
  • 實際應用
  • 版本號

維護

  • 是否開源
  • license
  • 社區活躍程度
  • 文檔語言
  • 開發語言
  • 文檔完善程度

其餘

  • 數據遷移成本
  • 存儲機制
  • 元數據存儲方式
  • 其餘特色

如何才能選擇最好的分佈式文件系統呢?沒有最好的分佈式文件系統,只有最適合你的實際狀況的。不是說最近ceph很火,ceph就必定適合你,必定要在認真分析你的實際狀況後,經過理論參數作出初步篩選,而後經過性能測試來作最後的篩選,切不可魯莽選擇。
詳細的理論比對請參見理論分析報告的原文

若是您對我介紹的知識感興趣,歡迎收藏和推薦!謝謝您的支持!

相關文章
相關標籤/搜索