目前在主流存儲中,使用的比較多的是機械硬盤和固態硬盤(SSD)。機械硬盤具有容量大,價格便宜,容錯性好,壽命較長等優點;缺點是讀寫性能相對固態硬盤有比較大的差距。固態硬盤的優點是讀寫性能較好,特別是隨機讀寫性能;缺點是價格比較昂貴,容量小,寫入壽命有限,一旦損壞數據難以恢復等。因此,有些情況下我們希望結合兩者優點,于是SSD緩存技術方案應運而生,SSD緩存的方案最終性能接近SSD的性能,使得我們可以用更少的成本得到較大的收益(高吞吐 / 低延遲)。
凡是位于速度相差較大的兩種硬件之間,用于協調兩者數據傳輸速度差異的結構,均可稱之為Cache,無論是CPU中的L1、L2、L3 Cache,還是RAID卡的Cache,無論是Facebook的Flashcache還是Intel的openCAS,其最終目的都是為了解決兩種硬件設備之間的性能差異,提升性能,節省成本等。
緩存在涉及帶有硬盤陣列的數據存儲系統時非常受歡迎。雖然HDD是順序工作負載的良好選擇,但它們對處理隨機模式有物理限制。緩存與硬盤陣列配對,優化了隨機請求的處理,并提高了總存儲性能。它們非常受歡迎,因為它們比全閃存解決方案更實惠。
說緩存之前先介紹幾個名詞,“冷數據”和“熱數據”,我們經常訪問的熱點數據稱為熱數據,熱數據存放在高速緩存(SSD)中,不經常訪問的數據稱為冷數據,存放在主存儲(HDD)中,業務請求熱數據會更快延遲更低。
臟數據&&刷臟:當業務進行更新,此時緩存中的數據和主存儲中數據就不一致了,此時這個記錄對應的緩存就叫臟數據。由緩存將數據寫到主存儲中的過程稱為刷臟。
對于傳統的全HDD架構來說,所有的請求都是直接從RAM流到HDD中,而HDD雖然價格便宜,但是對于延遲和隨機性能來說有天生的物理局限,不滿足目前主流存儲的需求。
SSD緩存架構,將容量較小的SSD設備和容量較大的HDD設備組成緩存架構,所有的請求都是從RAM中先寫到SSD中,再由緩存的機制流到HDD中,這樣對于業務來說,性能和延遲都有很好的改善,甚至接近SSD的性能。如下圖:對隨機性能和延遲進行了對比
當讀取請求到達存儲器時,系統會在硬盤上找到所需的數據塊并執行讀取操作。如果重復對這些數據塊的請求,系統會對SSD緩存進行臨時副本,下一次讀取操作將更快,因為它們是從緩存設備請求的,如圖:
(1).寫入策略
對于寫入的操作有兩種模式,Write Through和Write Back,簡稱WT和WB,WT模式會將數據進行鏡像,分別寫入緩存和主存儲中,性能慢 / 延遲高,但是有更好的數據安全性。WB模式所有的數據先寫入到緩存中,由于緩存設備速度快,寫入操作和狀態響應快速且延遲低。
(2).刷臟策略
WB模式寫入緩存之后,那么如何對數據持久化呢,這就涉及緩存中的核心之一刷臟算法,這里介紹兩個常見的刷臟算法,ACP(Active Cleaning Policy)積極的刷臟算法,時時刻刻都會進行刷臟,并且根據業務模型進行動態調控刷臟速率。第二種常見的是LRU算法,根據數據訪問的頻率給最近最少訪問的數據先進行刷臟
(3).淘汰策略
由于前面提到,SSD緩存比主存儲HDD小很多,這樣勢必會帶來一個問題,當緩存寫滿時怎么辦?這涉及緩存中另一個核心算法淘汰算法,優先選擇對緩存中的哪些數據進行刷臟從而保證緩存的性能,下面介紹幾個常見的淘汰算法。
FIFO(先入,先出)——首先進入緩存的塊首先消失,不考慮請求頻率。
LRU(最近使用的最少)——請求日期最古老的塊首先離開緩存。
LFU(最不常用的)——如果塊的請求比其他塊少,則首先離開緩存。
(4).命中率
衡量緩存還有一個核心點是命中率,從程序設計的角度來講,一個良好的計算機程序常常具有良好的“局部性”,也就是它們傾向于引用鄰近于最近引用過的數據項的數據,或者最近引用過數據項本身。這種傾向性被稱為局部性原理,是一個持久的概念,對硬件和軟件系統的設計和性能有著極大的影響。那么正因為程序有“局部性”原理,對于緩存來說這些經常被訪問的數據塊被作為熱點數據,訪問熱點數據的具有性能高延遲低的特點,是緩存技術的一個重要核心。所以,我們就需要有機制來防止熱點數據被沖刷掉或者緩存被寫滿之后導致性能慢的問題。
雖然緩存寫滿的之后還是能夠正常使用,但是性能和延遲都會大打折扣如下圖所示,那么是否可以通過一些機制來控制緩存的寫入?
下面以Intel開源緩存方案openCAS舉例,主要提供了兩種機制進行控制:
1、seq-cutoff機制
當檢測到連續的IO大小達到一個閾值的時候就不會寫緩存設備,直接寫入后端存儲設備,這樣一方面保證了熱數據一方面還防止緩存盤被寫滿。如下圖上層fio用1M順序寫,seq-cutoff配置成1024M之后發現所有請求的IO達到閾值1024M之后的請求都寫入到core device中(core device:sdd 、cache device:sde)
2、IO Class Configuration機制
seq-cutoff的機制可以避免cache被寫滿的場景,但是有一個局限,粒度太大。但凡連續寫的場景中有一個小IO那么該寫入cache device的IO就直接被寫入core device中,從而并不能提升整體的性能,從而需要一個更細力度的篩選。
IO Class Configuration:可以根據IO大小進行分類,配置是否要進行緩存。此配置功能和seq-cutoff類似,但是做到了更細粒度的劃分,可以靈活的根據業務場景進行選擇。
緩存技術允許您在處理混合工作負載時加快存儲性能。對于硬盤陣列本身運行不夠好的情況,這是一種簡單且經濟實惠的方法。在服務器任務和應用程序的多樣性和復雜性時代,緩存越來越有吸引力。但仍然重要的是要記住,這項技術對于業務場景有局限性,它不可能是解決所有存儲性能問題的通用解決方案。
服務電話: 400-678-1800 (周??周五 09:00-18:00)
商務合作: 0571-87770835
市場反饋: marketing@woqutech.com
地址: 杭州市濱江區濱安路1190號智匯中?A座1101室