FlashRAID技術白皮書

1 概述

FlashRAID是面向NVMe SSD設計的一套軟件定義存儲系統,在設計之初考慮了新型存儲介質的特性以及存在的問題。在系統設計過程當中,充分利用了新型介質的特性,而且經過技術革新解決了高性能存儲介質的數據保護、性能聚合、資源管理、性能導出以及易於維護管理等方面的問題。FlashRAID在物理資源管理、邏輯資源管理、加強數據保護、性能聚合、數據導出以及存儲管理平臺方面進行了技術創新,相關技術申請了發明專利。本技術白皮書對這些創新技術進行一一說明。算法


wKiom1kD7f3gQEDcAACC45JnKg8294.jpg


2 物理資源管理技術

2.1 底層資源池化技術

傳統存儲系統一般採用RAID技術對物理資源進行管理,在RAID技術之上再採用存儲虛擬化技術將資源重組構成邏輯卷。這種存儲虛擬化的方式一般被稱之爲卷級虛擬化技術。因爲傳統RAID在物理盤上的數據分佈固定,致使數據恢復時間過長,存儲管理複雜等問題。爲了解決單盤容量急劇增長,異構存儲管理,NVMe SSD新型存儲介質等引入的新問題,FlashRAID採用了底層虛擬化技術,該技術也被稱之爲「底層資源池化技術」。經過該技術直接將物理資源進行池化管理,不一樣特性的介質採用不一樣的池化策略構成獨立的資源池。FlashRAID所採用的底層資源虛擬化技術架構以下圖所示:後端


wKioL1kD7heiP8x0AADPZadufpU425.jpg


物理盤資源經過必定的方式被池化處理,每一個可被管理的最小物理資源粒度被稱之爲CHUNKCHUNK資源經過分配器以動態或者靜態的方式分配給Storage Objects。每一個Storage Object被稱之爲Container。多個Container能夠動態組成邏輯卷LUN。在存儲虛擬化過程當中,資源分配器算法決定了數據在物理資源中的分佈,針對不一樣的存儲介質能夠採用不一樣的資源分配算法,而且池化粒度CHUNK的大小也由介質的類型來決定。瀏覽器

 

與傳統的卷級虛擬化技術相比,底層虛擬化技術去除了傳統RAID層,經過虛擬化的方式直接對物理資源進行管理,能夠更加靈活的實現數據保護等功能,但與此同時也會引入不少新的問題,例如分配器在資源分配時須要考慮數據保護等問題。緩存

 

2.2 數據保護與物理資源管理分離

傳統RAID數據保護架構比較簡單,若干磁盤構成磁盤組,在磁盤組內部經過條帶的方式進行數據保護。這種結構最大的好處是規則化數據分佈,經過訪問邏輯地址能夠計算定位數據所在位置。傳統RAID最大問題在於靈活性差,沒法解決快速數據恢復等問題。NVMe SSD的故障模型和HDD相比存在較大差別,若是採用傳統RAID架構實現數據保護,沒法很好解決SSD的新問題,而且很難適應大容量存儲盤的發展趨勢。網絡

 

爲此,FlashRAID提出了數據保護域與物理資源管理域相分離的概念與方法,打破盤組所引入的問題,經過資源池化的方式更加高效的實現數據保護功能。傳統存儲軟件架構與FlashRAID軟件架構對好比下圖所示:架構


wKiom1kD7jSDY0JMAADqiZLGpOI886.jpg


FlashRAID中,經過資源池化的手段對物理資源進行管理。存儲資源池自己不具有數據保護的能力,該資源池被稱之爲「物理資源管理域」。在存儲池之上是存儲對象層,每一個存儲對象被稱之爲ContainerContainerCHUNK構成,每一個Container是一個數據保護單位。所以,存儲對象層也被稱之爲「數據保護域」。因爲Container是一個邏輯對象,與具體存儲盤無關,所以,FlashRAID能夠很靈活的在存儲池之上實現多種不一樣方式的數據保護。與傳統RAID相比,FlashRAID數據保護再也不依賴於物理盤,經過虛擬化的方式將物理資源與數據保護進行了完全的分離。併發

 

2.3 存儲對象管理技術

存儲對象ContainerFlashRAID數據保護的基本單元,也是構成邏輯卷的基本單元。一個邏輯卷由若干個Container動態或者靜態構成。Container內部結構以下圖所示:分佈式


wKioL1kD7k6yFX31AABQBDWO89w265.jpg


一個Container由若干CHUNK構成,這些CHUNK位於不一樣的存儲盤。具體分佈規則由存儲池的資源分配器來決定。Container中的每一個CHUNK被格式化成兩個區域,一個被稱之爲Container Header;另外一個被稱之爲Data RegionContainer Header用於存儲Container的元數據信息。元數據信息在全部CHUNK中進行冗餘存儲,以此來提升Container元數據的健壯性。在最壞狀況下,只要一個CHUNK中的元數據殘留,就能夠恢復整個Containeride

2.4 帶權重僞隨機分配算法

爲了實現數據在全部SSD中均衡分佈,而且爲了達到全局磨損均衡的目的,資源分配器採用帶權重的僞隨機分配算法。該算法將物理域與分配域分離,每一個SSD根據當前的屬性參數生成一個權重,該權重在分配域中生成分配單元。不一樣權重會生成不一樣數量的分配單元。從而不一樣SSD會獲得不一樣機率的分配機會。帶權重僞隨機分配算法示意以下:函數


wKiom1kD7mmQE3LcAACJfXjo3o0622.jpg


例如當一個新盤加入到資源池以後,因爲新盤具備較多的存儲空間,而且壽命更爲年輕,所以須要對該盤進行懲罰式分配。該新盤會在分配域中生成較多的分配單元,以很高的機率進行分配使用。

2.5 可變條帶技術

爲了減小數據遷移所引入的SSD寫放大問題,在Container資源沒法徹底分配成功時,FlashRAID採用了可變條帶技術對資源進行分配。以下圖所示,當一個Container預期須要分配5CHUNK時,因爲某種緣由沒法分配成功,所以能夠從(4+1)模式退化成(3+1)模式。


wKiom1kD7oOgvA_1AABnNE3biv0412.jpg


可變條帶技術的使用使得資源分配更加靈活,在資源緊張的時候或者存儲盤發生故障時,一樣能夠保證資源分配成功。從而在減少寫放大的同時,能夠進一步保證數據可靠性。

2.6 可靠元數據管理

元數據管理直接影響到FlashRAID的數據可靠性。在FlashRAID中元數據分紅兩大部分,一部分爲系統元數據;另外一部分爲映射元數據。系統元數據用於保存存儲池信息以及邏輯卷信息;映射元數據用於存儲Container中的CHUNK信息。全部元數據都會採用備份冗餘的方式進行持久化存儲。一個存儲盤中的元數據與數據的分佈以下圖所示:


wKioL1kD7qCiQ1yOAABaA7Se2nI024.jpg


元數據信息在多盤之間進行冗餘備份,從而保證存儲盤發生故障的狀況下,元數據信息還能夠從殘留信息中完整恢復。另外,在一個存儲盤中,系統元數據信息採用多副本的方式進行持久化保存,從而存儲介質在局部發生故障的狀況下,元數據信息能夠無損恢復。

2.7 全局磨損均衡

SSD內部經過FTL固件實現NAND Flash級別的全局磨損均衡,從而可使得整個SSD使用壽命最大化。在系統級別,多個SSD同時使用的狀況下,一樣能夠採用全局磨損均衡算法,使得在系統級別SSD使用壽命的最大化。FlashRAID會根據SSD單盤的使用壽命進行全局磨損均衡化,從而能夠盡最大可能的保證一個存儲池中全部盤使用均衡。


wKiom1kD7sKy94xHAABFQtz28Vo071.jpg


全局磨損均衡分爲動態磨損均衡與靜態磨損均衡。動態磨損均衡在分配器進行資源分配過程當中進行均衡決策;靜態磨損均衡對長期不使用盤中的數據進行遷移,從而達到全局磨損均衡的目的。

2.8 逆磨損均衡

SSD構建RAID的一個潛在風險是盤同時發生故障。每一個SSD盤的使用壽命是固定明確的,當全部SSD被均衡的寫入數據時,頗有可能會出如今極短的一個時間窗口內,多塊SSD盤同時發生故障,從而致使數據丟失。這也是傳統RAID存在的一個弊端,在FlashRAID中經過逆磨損均衡的方式解決該問題。


wKioL1kD7t6wYPTCAABCiADcK9s321.jpg


當一個存儲池中的SSD具有相同使用壽命,而且都處於老年狀態時,逆磨損均衡算法會對其中的一塊存儲盤進行分配懲罰,破壞磨損均衡的狀態,從而使得被懲罰的盤首先無效掉。避免出現多盤同時故障的狀況,盡最大可能保證數據可靠性。

3 邏輯資源管理技術

3.1 資源精簡配置技術

資源精簡配置技術能夠簡化存儲資源的管理。當應用須要較大存儲容量時,經過精簡配置技術能夠分配大容量卷,不須要考慮實際物理資源是否知足應用需求。當物理資源不夠時,經過存儲池擴容的方式增長資源,而不須要改變應用。精簡資源配置的邏輯示意圖以下所示:


wKioL1kD7wOiQOQfAABUpjKrKaw373.jpg


精簡資源配置技術簡化了存儲管理,爲了防止物理存儲池被寫爆,在FlashRAID中對存儲池資源使用狀況進行了監測,一旦物理資源使用超過了設定閾值,系統會採用多種報警方式提示系統管理員添加物理資源。

3.2 冷熱數據分層技術

NVMe SSD具備高速存儲性能的特徵,HDD具備價格低廉的特徵,不一樣存儲介質具備不一樣的優點。FlashRAID經過冷熱數據分層的方式充分利用不一樣介質的優點,將熱數據存儲在高速測試上;將冷數據存儲到價格相對低廉的介質上。從而能夠很好的平衡存儲系統的性能與價格。


wKiom1kD7yCAh-YFAAB7J6VBJ0U511.jpg


FlashRAID經過冷熱數據預測的方式影響數據在不一樣介質中分佈。不一樣介質構成不一樣存儲池,一個具有冷熱數據分層功能的卷會跨越多個存儲池,熱數據存儲在性能池中;冷數據存儲在容量池中。與數據緩存系統有所不一樣,分層系統中的性能池具有數據持久化存儲的能力,即數據一旦存儲到性能池以後,能夠保證數據不丟失。所以,分層存儲採用寫回策略,大大提高了數據寫入的性能。

4 加強數據保護技術

4.1 條帶編碼技術

FlashRAID支持RAID5RAID6等經典條帶化數據冗餘算法,而且採用Anvin算法實現軟件快速編解碼。對於RAID6算法,一個條帶內兩個校驗塊分別稱之爲PQP採用異或方式生成;Q採用Reed-Solomon編碼生成,採用有限域運算實現:

wKiom1kD7zrjIkDXAAAegAn5ekQ588.jpg

wKioL1kD70bBgrDEAAATi3xo4fE315.jpg

Intel處理器提供了SSEAVX等運算加速指令,所以條帶編解碼經過Intel的加速指令集來實現。FlashRAID中的條帶編解碼以Container爲單位。在Container內部,校驗數據塊按照必定規則分佈,所以,能夠經過LBA計算的方式定位每一個條帶中的校驗數據塊位置。


wKiom1kD71yi9q2uAABpYpp8cuo496.jpg


4.2 快速數據恢復

傳統RAID架構決定了數據恢復性能不會超過單盤性能。當單盤容量變得愈來愈大,存儲規模愈來愈大時,採用傳統RAID架構將會致使數據恢復性能沒法線性擴展,從而會影響數據存儲可靠性。FlashRAID具有數據快速恢復的能力,不管是對於磁盤仍是SSD,數據恢復性能與盤數量相關,而且能夠隨着盤的數量線性增長。


wKioL1kD73SjjdeGAABW2kOiUjY682.jpg


快速數據恢復得益於底層虛擬化技術的應用。假設一個存儲池中的SSD被移除以後,存儲池中的部分Container會受到影響,而後啓動數據恢復操做。新恢復的數據會被重構寫入存儲池中的全部SSD中,不存在傳統RAID中的寫入瓶頸問題。所以,存儲池中盤越多,參與數據恢復的盤就越多,數據恢復性能就越高。快速數據恢復技術的使用,能夠保證在極短的時間內恢復因爲硬件故障等緣由致使的丟失數據,從而能夠將數據風險窗口降到最低,保證數據存儲的可靠性。

4.3 優先級調度數據重構

傳統RAID採用整盤數據重構的方式恢復丟失數據,這種方式沒有考慮存儲數據的風險度。在FlashRAID中,會根據Container中數據所面臨的丟失風險度來進行動態調度,從而保證風險度最高的數據以最高優先級完成數據恢復操做。這種方法被稱之爲「優先級調度數據重構」,示意圖以下所示:


wKioL1kD74vBKCp5AADCronLSgA231.jpg


當一個存儲池中兩個存儲盤發生局部故障時,會影響到對象層中Container數據的完整性。因爲資源分配的離散性,致使有些Container會出現兩個數據塊同時發生故障的狀況;有些Container只存在一個故障數據塊。顯然,對於兩個故障數據塊的Container,其數據丟失風險度更高,所以,須要優先恢復該Container中的數據。優先級調度充分利用了SSD介質高隨機訪問的性能,對數據風險度進行了區分,盡最大可能的保證了數據可靠性。

4.4 數據感知重構技術

傳統RAID對故障磁盤進行整盤重構,沒法感知盤上的數據。即便一個磁盤組中不存在任何有效數據,傳統RAID也會對故障盤進行整盤重構,這種操做引入了大量無效IO操做。FlashRAID將物理資源管理域與數據保護域分離,所以能夠採用數據感知的方式對丟失數據進行恢復。


wKiom1kD76GAh59yAAB5fgeUOJw393.jpg


當存儲池中數據盤發生故障時,會對若干存儲對象層中的Container形成影響,數據重構操做只針對被影響的Container進行。若是一個存儲盤的故障不對任何Container形成影響,那麼將不會啓動數據恢復操做。採用這種數據感知重構技術,能夠在寫入數據量較少狀況下,快速恢復數據,同時也避免不少無效IO的操做,減小SSD寫放大。

 

5 性能聚合技術

5.1 多核併發處理技術

NVMe SSD具備極高的IO性能,當存儲盤再也不是IO性能瓶頸時,CPU逐漸成爲影響IO性能的關鍵因素。多核化是處理器技術發展方向,如何藉助多核處理器的能力,分佈式處理IO是高性能介質在系統級應用的一個關鍵。FlashRAID從軟件架構設計開始考慮了多核併發IO處理問題,經過任務的合理劃分,多核併發、協同的處理IO請求,達到性能的最大化。FlashRAID多核併發處理模型以下圖所示:


wKiom1kD78DTHHUbAACB7_JKKiE172.jpg


應用處理軟件在訪問邏輯卷時,將LBA經過HASH算法規則定位到具體的IO處理線程,IO處理線程以必定的規則獨立處理IO請求。因爲多核處理器的協同工做,當處理器數量增多時,IO處理性能會線性增長。

5.2 無鎖生產者消費者技術

在傳統軟件設計中,一般會採用鎖機制來處理多個線程之間的同步。在多核處理器平臺上,大量採用鎖機制將會極大的影響系統總體性能。一方面鎖之間的競爭會影響CPU自己的性能,使得處理器自己的執行效率下降,緩存被不斷刷新;另外一方面大量的鎖競爭會致使處理器之間沒法併發運行。所以,傳統存儲軟件設計方法會致使系統總體性能下降,同時CPU利用率極高,沒法充分利用CPU多核化帶來的價值。

 

FlashRAID採用了無鎖設計方法,創造了無鎖生產者消費者算法,在整個數據鏈路上不存在任何競爭鎖,線程之間請求的傳遞經過無鎖生產者、消費者機制來實現。採用這種技術以後,在多核處理器平臺上,可使得系統性能隨處理器數量線性變化。當處理器越多,系統性能越高。


wKiom1kD792ie7kpAABQRrLuizk654.jpg


這種性能可擴展的特性能夠充分的迎合處理器技術的發展方向。藉助Intel處理器技術的發展,FlashRAID的性能將會線性擴展。

5.3 無鎖流控技術

傳統流控技術經過信號量等機制來實現,這種流控機制在高性能存儲系統存在性能問題。信號量機制本質上是鎖同步機制,在數據通路上大量的鎖訪問會致使處理器運行效率的下降,不少指令週期都浪費在鎖同步處理上。爲了可以解決該問題,FlashRAID引入了無鎖流控機制,在去除同步鎖的基礎上實現了線程之間的IO流控。


wKioL1kD7_Tj7oG_AABX8ophAuo022.jpg


在沒有流控機制支持的系統中,會存在IO延遲太高問題。例如在文件系統應用中,大量的IO首先聚合在Page Cache中,當聚合到必定程度時,文件系統會將緩存的數據一次性寫入底層存儲系統中,若是此時沒有流控機制的支持,一方面,系統將會耗盡大量內存處理IO;另外一方面單個IO的延遲將會變得極高。FlashRAID的無鎖流控技術能夠保證IO的延遲,同時也能夠保證系統中處理IO的數量,不至於耗盡過多的內存資源。

5.4 帶寬QoS技術

傳統存儲系統很難保證業務IO帶寬,當系統發生磁盤故障時,業務IO性能將會急劇下降。其主要緣由在於數據重構操做佔用了業務IO帶寬。在FlashRAID中採用帶寬自動均衡控制技術,保證業務的性能質量。帶寬自動均衡控制技術會根據業務當前的流量來決定數據重構所佔用的帶寬。若是業務流量很高,那麼數據重構帶寬將會自動下降;反之,數據重構操做會佔用帶寬,全速恢復數據。


wKiom1kD8BLBexu7AABRaqxAHaM363.jpg


帶寬QoS技術引入以後,能夠保證FlashRAID業務性能平穩,在系統發生故障的狀況下,業務性能也不會下降不少,而且能夠盡最大可能在極短的時間內完成數據恢復。

6 數據導出技術

6.1 SCSI導出協議

SCSI導出協議是存儲系統經常使用的導出接口協議,經常使用協議有IscsiFC等。FlashRAID採用企業級SCSI導出協議棧SCST實現邏輯卷高效導出。SCST的軟件結構以下所示:


wKiom1kD8CqAuTG7AAB7av1ajkc344.jpg


針對高性能存儲介質,FlashRAID採用優化以後的iSER導出協議直接將邏輯卷對外導出。傳統SCST的實現中存在大量鎖競爭等問題,FlashRAIDSCST進行了改造,而且進行了有效集成,使得FlashRAID邏輯卷能夠採用iSCSIiSERFC的方式高效導出。

6.2 NVMe over Fabric

NVMe over Fabric導出協議是針對高性能存儲介質的導出協議。該協議直接採用NVMe接口命令,經過RDMA的方式將邏輯卷高效導出。與SCSI導出方式相比,NVMe over Fabric導出方式去除了SCSI協議轉換開銷,軟件層的開銷將進一步下降。


wKioL1kD8EKhIeJDAACMYoV7Dlw417.jpg


FlashRAID導出協議棧支持NVMe overFabric,經過該協議訪問後端存儲,IO延遲能夠保證在200us之內,網絡及協議自己的開銷很小。

7 存儲管理平臺

7.1 FlashCLI

FlashCLIFlashRAID提供了命令行管理接口,經過該工具能夠實現對FlashRAID的全部操做,包括:用戶權限管理、SSD資源管理、存儲池管理、邏輯卷管理、性能監測、故障信息管理以及日誌收集功能。


wKioL1kD8FeialObAAA6fTM2E3o936.jpg


FlashCLI提供了完善的幫助信息以及命令使用案例,操做規則符合Linux經常使用命令工具規範。經過該工具能夠查看系統當前的全部狀態,而且能夠監測系統的故障信息。FlashCLI是一套基於存儲管理服務平臺的命令行工具,所採用的API接口函數能夠提供給第三方廠商,便於集成至第三方命令行管理平臺中。

7.2 WebGUI

WebGUI是一套FlashRAID圖形化管理平臺,經過該圖形化管理平臺能夠實現系統狀態的監測、性能的監測、存儲的基本管理操做以及系統級別的管理。WebGUI的訪問頁面以下圖所示:


wKiom1kD8G3ToR7pAAB8NdFKXMA100.jpg


WebGUI是一套與FlashCLI相互獨立的存儲管理平臺軟件,經過瀏覽器的方式直接對FlashRAID進行操做,而且能夠實時查看邏輯卷的性能表現以及系統的故障信息。


(存儲之道)