爲何要使用分佈式存儲?node
爲了簡化用戶端的使用,提供了一個分佈式緩存系統來提供對此分佈式存儲系統的訪問接口以及本地數據緩衝以下降網絡壓力。算法
分佈式存儲簡介數組
分佈式存儲系統,是將數據分散存儲在多臺獨立的設備上。傳統的網絡存儲系統採用集中的存儲服務器存放全部數據,存儲服務器成爲系統性能的瓶頸,也是可靠性和安全性的焦點,不能知足大規模存儲應用的須要。分佈式網絡存儲系統採用可擴展的系統結構,利用多臺存儲服務器分擔存儲負荷,利用位置服務器定位存儲信息,它不但提升了系統的可靠性、可用性和存取效率,還易於擴展。緩存
分佈式存儲常見的架構安全
中間控制節點架構(HDFS)服務器
分佈式存儲最先是由谷歌提出的,其目的是經過廉價的服務器來提供使用與大規模,高併發場景下的Web訪問問題。如圖3是谷歌分佈式存儲(HDFS)的簡化的模型。在該系統的整個架構中將服務器分爲兩種類型,一種名爲namenode,這種類型的節點負責管理管理數據(元數據),另一種名爲datanode,這種類型的服務器負責實際數據的管理。網絡
圖3 HDFS簡化架構圖示意圖架構
上圖分佈式存儲中,若是客戶端須要從某個文件讀取數據,首先從namenode獲取該文件的位置(具體在哪一個datanode),而後從該位置獲取具體的數據。在該架構中namenode一般是主備部署,而datanode則是由大量節點構成一個集羣。因爲元數據的訪問頻度和訪問量相對數據都要小不少,所以namenode一般不會成爲性能瓶頸,而datanode集羣能夠分散客戶端的請求。所以,經過這種分佈式存儲架構能夠經過橫向擴展datanode的數量來增長承載能力,也即實現了動態橫向擴展的能力。併發
徹底無中心架構---計算模式(Ceph)分佈式
如圖是Ceph存儲系統的架構,在該架構中與HDFS不一樣的地方在於該架構中沒有中心節點。客戶端是經過一個設備映射關係計算出來其寫入數據的位置,這樣客戶端能夠直接與存儲節點通訊,從而避免中心節點的性能瓶頸。
圖4 Ceph無中心架構
在Ceph存儲系統架構中核心組件有Mon服務、OSD服務和MDS服務等。對於塊存儲類型只須要Mon服務、OSD服務和客戶端的軟件便可。其中Mon服務用於維護存儲系統的硬件邏輯關係,主要是服務器和硬盤等在線信息。Mon服務經過集羣的方式保證其服務的可用性。OSD服務用於實現對磁盤的管理,實現真正的數據讀寫,一般一個磁盤對應一個OSD服務。
徹底無中心架構---一致性哈希(Swift)
與Ceph的經過計算方式得到數據位置的方式不一樣,另一種方式是經過一致性哈希的方式得到數據位置。一致性哈希的方式就是將設備作成一個哈希環,而後根據數據名稱計算出的哈希值映射到哈希環的某個位置,從而實現數據的定位。
圖5 一致性哈希原理
如圖5是一致性哈希的基本原理,爲了繪製簡單,本文以一個服務器上的一個磁盤爲例進行介紹。爲了保證數據分配的均勻性及出現設備故障時數據遷移的均勻性,一致性哈希將磁盤劃分爲比較多的虛擬分區,每一個虛擬分區是哈希環上的一個節點。整個環是一個從0到32位最大值的一個區間,而且首尾相接。當計算出數據(或者數據名稱)的哈希值後,必然落到哈希環的某個區間,而後以順時針,必然可以找到一個節點。那麼,這個節點就是存儲數據的位置。
Swift存儲的整個數據定位算法就是基於上述一致性哈希實現的。在Swift對象存儲中,經過帳戶名/容器名/對象名三個名稱組成一個位置的標識,經過該惟一標識能夠計算出一個整型數來。而在存儲設備方面,Swift構建一個虛擬分區表,表的大小在建立集羣是肯定(一般爲幾十萬),這個表其實就是一個數組。這樣,根據上面計算的整數值,以及這個數組,經過一致性哈希算法就能夠肯定該整數在數組的位置。而數組中的每項內容是數據3個副本(也能夠是其它副本數量)的設備信息(包含服務器和磁盤等信息)。也就是通過上述計算,能夠肯定一個數據存儲的具體位置。這樣,Swift就能夠將請求從新定向到該設備進行處理。
圖6 Swift數據定位示意圖
上述計算過程是在一個名爲Proxy的服務中進行的,該服務能夠集羣化部署。所以能夠分攤請求的負載,不會成爲性能瓶頸。
看完了上面3種最爲通用的分佈式存儲架構的介紹,你是否對分佈式存儲有了更進一步的瞭解。