最近弄Ceph集群考慮要不要加入分層存儲 因此花了點時間研究了下
1,首先肯定要弄清Ceph分層存儲的結構 ,結構圖大概就是下圖所示
緩存層(A cache tier)為Ceph客戶端提供更好的I/O性能,而數據存儲在存儲層(a backing storage tier)。用相對快速/昂貴的設備(比如SSD)創建pool作為緩存層(A cache tier),用糾刪碼池或者相對慢速/便宜的設備創建pool作為經濟的存儲池。Ceph(The Ceph objecter)負責對象存放的位置,分層代理(the tiering agent)確定什么時候把數據對象從緩存層(the cache)存儲到存儲層(the backing storage tier)。因此對Ceph客戶端而言緩存層(the cache tier)和存儲層(the backing storage tier)是完全透明的。
2,了解了結構圖和基本概念 看到一個關鍵詞 分層代理
所謂分層代理其實就是分層存儲數據遷移方案,緩存分層代理負責在緩存層與存儲層間的數據的自動遷移,然而管理員有權利配置數據如何遷移 有兩種數據遷移模式 在下面附上自己見解
回寫模式 :如果管理員配置緩存層為回寫模式,CEPH客戶端把數據寫入緩存層,並且收到緩存層的ACK,寫入緩存層的數據隨后遷移到存儲層,然后從緩存層清除,讀取的話如果客戶端要讀取的數據在存儲層,代理會把數據先遷移到緩存層,后再發往客戶端,客戶端與緩存層進行IO 大概流程如下所示
只讀模式:客戶端寫數據到存儲層,讀數據的時候,ceph從存儲層拷貝需要的數據到緩存層,根據定義好的規則,舊數據從緩存層刪除 配上自己大概流程圖
仔細分析兩種模式 可以得知 第一種模式客戶端只與緩存層進行交互 第二種模式客戶端寫入時直接與存儲層進行交互
為什么進行這種設計,肯定是有不同的應用場景,第一種回寫模式主要用於經常變動的數據,第二種只讀模式主要用於不經常變動的數據,因為數據是從緩存層讀取的,因此數據可能是過時的數據,換一句話說數據是弱一致的,因為客戶端寫入的時候是不經過緩存層的,緩存層並不能保證數據是最新的 而第一種模式可以保證這一點
3,分層存儲的目的和缺點
無疑分層存儲的目的在於更好的利用磁盤資源,可以將SSD作為緩沖層,HDD作為后端存儲,這樣熱數據可以在SSD上被快讀的讀取,大量的冷數據在HDD上存儲
個人認為有以下缺點(本人水平為在校研究生 不足之處請指正但請勿噴):
1:使用分層存儲可能會引起性能的下降,因為數據要經常移出或讀進緩沖,這會增加讀取時間,緩沖 的有效應用場景應該是針對大文件,經常讀而少寫的數據。而且緩存需要足夠大。(我們的應用場景是需要經常性頻繁的讀寫小文件,因此覺得這可能不適用)
2:添加緩存層容易引起機制復雜性
3:進行性能測試時會顯示出比較差的性能(確定真正的熱數據需要昂貴的代價)
因為項目的原因自己有閱讀深信服的技術白皮書 看了CEPH的分層存儲方案 在這里對深信服的存儲技術是怎么做的做一個介紹
1,整體結構
2,首次文件讀操作
3,二次文件讀操作
4,文件塊首次寫預緩存
5,文件塊二次寫更新緩存
看完深信服的存儲方案,自己學習到了很多,無疑它的存儲方案更加適用 貼上上述技術純屬分享 如有違權 請聯系我我會及時刪除 以上內容為自己心得 轉載請注明出處