面對海量的數據,如何有效存儲,是每一個大型網站的架構師必需要解決的問題。分佈式存儲技術就是爲了解決這個問題而發展起來的技術,下面讓將會詳細介紹這個技術及應用。php
分佈式存儲概念:node
與目前常見的集中式存儲技術不一樣,分佈式存儲技術並非將數據存儲在某個或多個特定的節點上,而是經過網絡使用企業中的每臺機器上的磁盤空間,並將這些分散的存儲資源構成一個虛擬的存儲設備,數據分散的存儲在企業的各個角落。git
具體技術及應用:github
海量的數據按照結構化程度來分,能夠大體分爲結構化數據,非結構化數據,半結構化數據。 web
普通存儲方案:Rsync、DAS(IDE/SATA/SAS/SCSI等塊)、NAS(NFS、CIFS、SAMBA等文件系統)、SAN(FibreChannel, iSCSI, FoE存儲網絡塊),Openfiler、FreeNas(ZFS快照複製)
因爲生產環境中每每因爲對存儲數據量很大,而SAN存儲價格又比較昂貴,
所以大多會選擇分佈式存儲來解決一下問題:算法
1.海量數據存儲問題
2.數據高可用問題(冗餘備份)問題
3.較高的讀寫性能和負載均衡問題
4.支持多平臺多語言問題
5.高併發問題數據庫
經常使用的分佈式文件系統:網絡
常見的分佈式文件系統有FastDFS,GFS、HDFS、Ceph 、GridFS 、mogileFS、TFS等。各自適用於不一樣的領域。它們都不是系統級的分佈式文件系統,而是應用級的分佈式文件存儲服務。
架構
FastDFS概述
=======================併發
FastDFS是阿里巴巴開源的一套輕量級,天生就是分佈式設計的文件系統,FastDFS的源代碼由C語言開發,目前可運行在Linux,FreeBSD,Unix等類操做系統上,FastDFS解決了大數據量文件存儲(這裏常常有人說成大數據,我本人是不贊同的)和讀寫分離,備份容錯,負載均衡,動態擴容等問題,這也就是原做者所描述的高性能和高擴展性的文件系統。適合存儲4KB~500MB之間的小文件,如圖片網站、短視頻網站、文檔、app下載站等。
主要用戶
- 京東(http://www.jd.com/),主要商品圖片存儲,能夠看出來這是fastdfs典型路徑
http://img12.360buyimg.com/n9/g15/M08/0B/19/rBEhWVMdbUMIAAAAAAEo7QHfEvoAAJwzAC7VvkAASkF751.jpg
- UC(http://www.uc.cn/),主要提供網盤服務
- 支付寶(https://www.alipay.com/),
- Lockbur高清壁紙分享網站(http://www.lockbur.com/),主要提供小圖片存儲服務
GFS(Google File System)
=======================
Google公司爲了知足本公司需求而開發的基於Linux的專有分佈式文件系統。。儘管Google公佈了該系統的一些技術細節,但Google並無將該系統的軟件部分做爲開源軟件發佈。
下面分佈式文件系統都是類 GFS的產品。
HDFS(Hadoop Distributed File System)
=======================
Hadoop 實現了一個分佈式文件系統,主要用於大數據計算存儲,簡稱HDFS。 Hadoop是Apache Lucene創始人Doug Cutting開發的使用普遍的文本搜索庫。它起源於Apache Nutch,後者是一個開源的網絡搜索引擎,自己也是Luene項目的一部分。Aapche Hadoop架構是MapReduce算法的一種開源應用,是Google開創其帝國的重要基石。
=======================
是加州大學聖克魯茲分校的Sage weil攻讀博士時開發的分佈式文件系統。
Ceph
可以在維護 POSIX 兼容性的同時加入了複製和容錯功能。
Sage weil並使用Ceph完成了他的論文。說 ceph 性能最高,C++編寫的代碼,支持Fuse,而且沒有單點故障依賴, 因而下載安裝, 因爲 ceph 使用 btrfs 文件系統, 而btrfs 文件系統須要 Linux 2.6.34 以上的內核才支持。
GridFS文件系統
=======================
MongoDB是一種知名的NoSql數據庫,GridFS是MongoDB的一個內置功能,它提供一組文件操做的API以利用MongoDB存儲文件,GridFS的基本原理是將文件保存在兩個Collection中,一個保存文件索引,一個保存文件內容,文件內容按必定大小分紅若干塊,每一塊存在一個Document中,這種方法不只提供了文件存儲,還提供了對文件相關的一些附加屬性(好比MD5值,文件名等等)的存儲。文件在GridFS中會按4MB爲單位進行分塊存儲。
MogileFS
=======================
由memcahed的開發公司danga一款perl開發的產品,目前國內使用mogielFS的有圖片託管網站yupoo等。
MogileFS是一套高效的文件自動備份組件,由Six Apart開發,普遍應用在包括LiveJournal等web2.0站點上。
MogileFS由3個部分組成:
第1個部分是server端,包括mogilefsd和mogstored兩個程序。前者便是 mogilefsd的tracker,它將一些全局信息保存在數據庫裏,例如站點domain,class,host等。後者便是存儲節點(store node),它實際上是個HTTP Daemon,默認偵聽在7500端口,接受客戶端的文件備份請求。在安裝完後,要運行mogadm工具將全部的store node註冊到mogilefsd的數據庫裏,mogilefsd會對這些節點進行管理和監控。
第2個部分是utils(工具集),主要是MogileFS的一些管理工具,例如mogadm等。
第3個部分是客戶端API,目前只有Perl API(MogileFS.pm)、PHP,用這個模塊能夠編寫客戶端程序,實現文件的備份管理功能。
TFS
-------------------------------------
TFS(Taobao !FileSystem)是一個高可擴展、高可用、高性能、面向互聯網服務的分佈式文件系統,主要針對海量的非結構化數據,它構築在普通的Linux機器 集羣上,可爲外部提供高可靠和高併發的存儲訪問。TFS爲淘寶提供海量小文件存儲,一般文件大小不超過1M,知足了淘寶對小文件存儲的需求,被普遍地應用 在淘寶各項應用中。它採用了HA架構和平滑擴容,保證了整個文件系統的可用性和擴展性。同時扁平化的數據組織結構,可將文件名映射到文件的物理地址,簡化 了文件的訪問流程,必定程度上爲TFS提供了良好的讀寫性能。