Ceph是一種性能優越,可靠性和可擴展性良好的統一的分佈式雲存儲系統,提供對象存儲、塊存儲、文件存儲三種存儲服務。Ceph文件系統中不區分節點中心,在理論上能夠實現系統規模的無限擴展。Ceph文件系統使用了較爲簡單的數據地址管理方法,經過計算的方式直接獲得數據存放的位置。其客戶端程序只須要根據數據ID通過簡單的計算就能夠決定數據存放的位置。算法
基於副本冗餘的容錯機制是將原始數據複製成多份,每一份稱爲一個副本。將這些副本分別存放在集羣中的不一樣節點上,當集羣中有些節點出現故障時,只要其他健康節點中任一個節點擁有副本,用戶就能夠獲取該數據。當前衆多存儲系統(包括Ceph)都採用副本數爲3的副本冗餘容錯機制,這種機制能很好地保證數據可靠性,但也會極大下降存儲空間利用率。分佈式
在Ceph中,用戶能夠根據須要建立存儲池,並設置存儲池中數據的副本數目,每一個數據副本被分到不一樣的對象存儲設備(OSD)上,當存儲設備中有故障,能夠從其餘健康的設備上獲取數據。性能
在存儲系統中,糾刪碼技術主要是經過利用糾刪碼算法將原始的數據進行編碼獲得冗餘,並將數據和冗餘一併存儲起來,以達到容錯的目的。其基本思想是將k塊原始的數據元素經過必定的編碼計算,獲得m塊冗餘元素。對於這k+m塊的元素,當其中任意的m塊元素出錯(包括數據和冗餘出錯)時,都可以經過對應的重構算法恢復出原來的k塊數據。基於糾刪碼的方法與傳統的副本冗餘技術相比,具備冗餘度低、磁盤利用率高等優勢。編碼
數據塊大小指的是數據塊進行編碼計算時,數據分塊(原始數據塊Di或校驗數據塊Cj)的大小,在不一樣的存儲系統中數據塊大小不一樣,在RAID存儲系統中,常見的分塊大小是4KB~128KB,在分佈式存儲系統中數據塊較大,通常爲64MB大小。code
條帶是糾錯編碼存儲一次性讀入或寫入數據的大小,在系統碼中,一個條帶每每包含了k個原始數據塊和m個校驗塊。對象
編碼矩陣GM 定義了數據是如何編碼爲冗餘數據的,由於糾刪碼的編碼過程能夠經過一個編碼矩陣GM和分塊數據的乘法(點積)來表示。如下圖爲例,C0 ~ C5 是冗餘數據,全部的冗餘數據能夠表示爲GM × D{D0、D一、D二、D3} 的乘法,每個冗餘數據塊Ci 是矩陣的對應的一行和數據塊的乘積(黃色標示)。編碼矩陣中GM每個元素則是對應原始數據塊的乘法系數。編碼矩陣的列數對應着原始數據分塊個數(k),行數對應着編碼後全部數據塊個數(n)。blog
RS編碼實際上就是利用生成矩陣與數據列向量的乘積來計算獲得信息列向量的。其重構算法實際上也是利用未出錯信息所對應的殘餘生成矩陣的逆矩陣與未出錯的信息列向量相乘來恢復原始數據的。.可是在RS編碼重構原理的推導過程當中,有一個條件相當重要,那就是未出錯信息所對應的殘餘生成矩陣在GF(2w)域上必需要知足可逆的條件。更進一步來講,爲了知足RS編碼在任何狀況下均是可重構的,對於任意的ms個元素出錯時,均要可以經過重構算法恢復出數據,這就要求對於任意的n個元素(n的含義是指去掉m個出錯元素之後剩下的n個未出錯的元素),其對應的殘餘生成矩陣均要在GF(2w)域上知足可逆,這就對RS編碼的生成矩陣提出了很高的要求。在生成矩陣中, 要求任意n個行向量均必須在 GF(2w)域上知足線性無關(行向量線性無關是矩陣可逆的充要條件)。集羣
範德蒙矩陣有着良好的特性,在GF(2w)域上,對範德蒙矩陣進行初等變換,將其前n行變爲單位矩陣,便可保證生成矩陣可逆,基於這個生成矩陣的RS糾刪碼爲範德蒙RS糾刪碼。其編碼的生成矩陣爲:原理
柯西RS糾刪碼用柯西矩陣代替範德蒙矩陣,獲得更爲簡單的生成矩陣。研究者經過簡單改造,使解碼過程更爲簡單。柯西碼解碼不用求大矩陣的逆,而是把乘法除法運算分別轉化爲有限域上的加法和減法運算,可用異或實現。所以,柯西RS糾刪碼運算複雜度低於範德蒙RS糾刪碼。採用柯西矩陣進行 Erasure code 編碼過程描述以下:擴展
Ceph中採用的是副本冗餘與糾刪碼冗餘算法的綜合容錯機制。基於副本冗餘策略,用戶能夠根據須要建立存儲池,並設置存儲池中數據的副本數目,每一個數據副本被分到不一樣的對象存儲設備(OSD)上,當存儲設備中有故障,能夠從其餘健康的設備上獲取數據。基於糾刪碼冗餘策略,Ceph添加了幾個開源的糾刪碼庫,提供不一樣的糾刪碼算法,用戶可根據須要選擇糾刪碼算法類型,並建立相應的糾刪碼池。
存儲中數據可根據訪問熱度分爲三種:熱數據、溫數據和冷數據。熱數據一般須要在高性能、高度可用、高要求的環境下即時存取。溫數據處於近線或在線備份環境中,用戶須要快速訪問這些數據,但訪問的次數較少。冷數據一般訪問次數極少,一般用於歸檔備份。針對雲存儲中數據訪問熱度不一樣,提出一種基於數據熱度分層的容錯機制。
全部數據先按照副本策略存儲,本機制對存入系統的數據,實時統計該數據的被訪問頻率,設定熱數據、溫數據、冷數據閾值,高於熱數據閾值的判斷爲熱數據,低於冷數據閾值則斷定爲冷數據,在冷熱數據閾值之間的斷定爲溫數據。每3個月進行一次數據熱度劃分,數據被訪問頻率高於熱數據閾值時,判斷爲熱數據,存放在副本池裏,該存儲池採用副本容錯機制。數據訪問頻率低於冷數據閾值時,斷定爲冷數據,存放在範德蒙RS糾刪碼池裏,該存儲池採用範德蒙RS糾刪碼容錯機制。對於溫數據,存放在柯西糾刪碼池裏,該存儲池採用改進的柯西RS糾刪碼容錯機制。