當今是雲計算、大數據的時代,企業業務持續增長需要存儲系統的 IO 性能也持續增長。
機械盤本身的 IOPS 一直徘徊在數百的級別,為了提高傳統存儲的性能,有些存儲廠商加了緩存層,然而目前應用正由單一走向多元化,導致 IO 特徵無法預測,緩存也難以發揮作用。
機械盤依賴碟片的旋轉和機械臂的移動進行 IO,目前轉速基本達到物理極限,所以機械盤性能一直徘徊不前,無法滿足企業核心業務對於存儲性能的要求。SSD 作為一種全新的快閃記憶體介質開始進入企業的數據中心,並逐漸成為應用的主流。
全閃,企業核心存儲新選擇
企業對存儲的要求是性能和容量要滿足業務的需求,並且價格合適。
首先從容量上來看,目前主流的 SSD 單盤容量已經達到 8T,完全滿足企業各類應用的需求。
其次從性能上來看,一塊 NVMe SSD 的性能大概在 100 萬 IOPS,相當於 5000 塊 7.2k SATA HDD 的性能。在延遲上,一塊 NVMe SSD 的延遲大概在 10 微秒,是機械盤的 200 分之一。
最後從單盤的價格來看,SSD 比機械盤要貴,但是從單個 IO 的成本來看,SSD 的性價比遠遠高於機械盤。最近英特爾推出了 96 層 QLC NAND 顆粒,正在研究 114 層的 NAND,隨技術進步,SSD 性價比會進一步提高。
總之,全閃能夠滿足企業核心業務對存儲的高 IOPS、低延遲的要求,並且可以降低 TCO,可以說企業核心存儲選擇全閃是大勢所趨,所以廠商要面向全閃來設計存儲系統。
面向快閃記憶體的三種存儲方案
如上圖所示,目前業界基於全閃的存儲方案主要有以下三種:
第一種是傳統方式。
用 SSD 做緩存或者直接用 SSD 盤替換掉傳統存儲中的機械盤,這種方式無法發揮全閃的性能。
因為傳統的存儲誕生在機械盤的時代,是面向機械盤設計的。而當前 NVMe SSD 的性能已經達到 100 萬 IOPS,與機械盤有了天壤之別。
傳統存儲受限於底層架構的設計,並沒有針對全閃進行有效的軟體改造或者優化,即使採用了全閃的配置,也無法發揮 NVMe SSD 的性能,傳統存儲方案已經不再適合承載高速快閃記憶體介質。
第二種是全閃陣列。
全閃陣列的性能相比傳統方式有了很大提升,可以滿足當前業務的要求。
全閃陣列通常採用專有的硬體,導致其成本高昂。另外一方面,傳統陣列一般採用雙控制器互為備份,縱向擴展無法提升性能,橫向擴展受限於控制器的數量,一般情況下可以擴展到 8-16 個,導致其擴展性很差,靈活性也不夠。
第三種是全閃分布式存儲。
分布式存儲是通過網絡將存儲節點聯繫在一起,以集群的形式提供服務。
首先,它採用通用的 X86 硬體,使硬體標準化,可以降低 TCO。
其次,擴展靈活。集群中每一個節點都具備存儲和計算能力,隨著節點的增加集群的容量和性能得到線性擴展。無中心設計使集群不易形成瓶頸節點,理論上可以無限擴展。
第三,針對 NVMe SSD 進行特殊的設計和優化,性能強勁。
另外,隨著 25G、100G 網絡的普及和 RDMA 網絡低延遲的特性,使得分布式全閃的跨節點擴展不再是瓶頸。在全快閃記憶體和高速 RDMA 網絡的加持下,分布式全閃架構已經成為企業核心業務的理想之選。
NeonSAN——值得選擇的全閃分布式存儲
接下來介紹 QingStor NeonSAN,這是一款面向核心業務設計的全閃分布式塊存儲,由青雲QingCloud 自主研發,打破了傳統存儲的容量與水平擴展的瓶頸,性能可以媲美全閃的中高端存儲陣列。
NeonSAN 也是為雲而生的分布式存儲,原生適配虛擬化、大數據、容器等多種應用生態。
首先給大家講講 NeonSAN 名字的由來:名字的後半部分是 SAN,SAN 代表了產品的形態,Neon 是元素周期表裡面氖的代號,是一種惰性氣體,具有有極高的穩定性,所以 NeonSAN 的名字寓意著這是一款穩定的企業級存儲產品。
NeonSAN 核心模塊由數據層和控制層組成,此外包括前端接口與運維管理工具層。
NeonSAN 核心模塊採用並行流水線技術,設計了全快閃記憶體儲系統的資源調度系統、內存管理系統、元數據管理系統、RDMA 網絡收發系統等,打造高可用、高可靠、高性能、擴展靈活的全閃分布式存儲。
NeonSAN 提供 9 個 9 可靠性,單卷性能達到 10 萬 IOPS,最小延遲小於 90 微秒。
在擴展方面,NeonSAN 可以擴至 1024 節點,並且容量和性能隨節點的增加而線性增長。
NeonSAN 的基本架構是由 Zookeeper 服務、元數據服務、管理服務、存儲服務和接入服務五部分構成。
Zookeeper 提供集群的發現服務;元數據服務用來記錄集群中的元數據,如節點信息、SSD 的信息、卷信息等;管理服務提供集群的管理功能,如節點的上線、創建卷等。
數據存儲服務用來給客戶提供具體的 IO,它承載業務發來的 IO 請求,採用對等的設計,每個存儲節點的地位是相等的,都可以提供 IO 服務。
對等設計可以保證集群的某一個節點發生故障時,其他節點能夠接替故障節點繼續服務,保證業務的連續性,同時為集群的容量和性能線性擴展提供基礎。
接入服務,第一個模塊是 QBD 內核驅動,在 Windows Server 和 Linux Server 上都有對應的版本,它可以讓伺服器以使用本地盤的方式使用 NeonSAN,上層業務不需要做任何改造就可以對接 NeonSAN,非常方便。
第二是模塊是 QEMU,可以為虛機提供雲硬碟。
第三是模塊是通用的 iSCSI 接口,可以為 VMware 等虛擬化平臺提供存儲服務。
此外,NeonSAN 還提供高速的 NVMe-oF 接口以及 CSI 接口,為容器提供持久化的存儲服務。
NeonSAN 如何滿足高可靠和高可用
接下來談談 NeonSAN 的網絡設計如何滿足高可靠和高可用。
NeonSAN 的網絡分為兩部分:前端業務網絡和後端網際網路,採用兩個前端交換機和兩個後端交換機,組建高可用網絡。(交換機使用普通的乙太網交換機就可以,不需要 FC 交換機這類昂貴的設備。)
每個 NenonSAN 節點配備雙網卡,每張網卡有兩個網口,分別連接到後端交換機和前端交換機,假如交換機 A 發生故障就會影響到 NeonSAN 1、2、3 節點的網卡 A,凡是通過這三個網卡進行交互的業務也會受到影響。
此時 NeonSAN 節點就會自動把網絡流量切換到網卡 B 上,走交換機 B,保證整個集群網絡的可用性。同理,當網卡發生故障時,整個網絡仍然是高可用的。
NeonSAN 的數據可靠性及可用性是通過副本機制來實現的。
在 Linux 服務下看到塊設備,或者在 Windows Server 下我們看到一張盤,對應到 NeonSAN 集群裡,就會把這個盤切成一片片的 Shard。
如圖所示,有紅、黃、綠、紫這四個片,每一片都會有三副本,分別存放在不同的節點。任何一個節點上的數據損壞,都不會導致數據的丟失。可用性也是同樣的,如果節點 1 不能提供服務,節點 2 或 3 可以繼續提供服務,保證整個集群的可用性。
NeonSAN 的數據寫入是三個副本同時寫入,保證數據間的強一致性,數據的讀取是從主副本讀的。數據的副本可以按卷進行靈活的配置,在一個集群中既可以有單副本的卷,也可以有兩副本的卷,還可以有三副本的卷。
NeonSAN 支持精簡置備和全置備,一個集群可以同時存在精簡置備的卷和全置備的卷。
我們通過一個例子看看 NeonSAN 強一致性寫過程中的 IO 路徑。
首先,客戶端發 IO 給三副本的主副本節點,當主副本節點收到 IO 請求後會同時做兩件事:一是把 IO 請求發給它本地的 SSD,同時也會把請求發給兩個從副本,當兩個從副本 IO 完成以及本地的 IO 也完成,就是三個 IO 同時完成後才會返回給客戶端寫成功,實現強一致三副本的寫入。
NeonSAN 分布式全閃有哪些黑科技
NeonSAN 是一個面向全閃的分布式存儲系統,針對全閃有哪些特殊的設計?
首先, NeonSAN 採用了極短 IO 路徑,這是可以提供卓越性能的根本。
NeonSAN 只要 3 步就可以完成一個 IO,當客戶端的 IO 發到存儲節點後,存儲軟體做完處理後直接發給本地的 SSD。
業界其他的分布式存儲中,卻要經歷很多步驟:先經過存儲軟體的處理,再發給本地文件系統,還要寫日誌,某些系統還需要再經過緩存,最後才能落到 SSD,這個 IO 路徑是非常長的。(簡單來說就是很慢)
NeonSAN 採用自研 SSD 管理模塊,直接管理本地裸設備,不依賴本地的文件系統,不需要日誌,也不需要 Cache,極大精簡了 IO 路徑,從而讓延遲減少到最低,接近於 SSD 延遲的量級。
接下來講講 NeonSAN 並行流水線處理的設計。
傳統機械盤只有 1 個隊列,深度是 32,NVMe SSD 一般盤有 128 個隊列,每個隊列的深度是 128,還採用傳統的軟體設計,顯然 NVMe 是處於飢餓的狀態,無法發揮隊列和深度優勢。
NeonSAN 採用並行流水線,將 IO 進行拆分,拆分成接收、調度和落盤。
舉個例子,在機械盤的年代超市只有 1 個收銀臺,只能排 1 隊,但是到了 NVMe SSD 時代,超市有 128 個收銀臺,如果我們還排 1 隊就對資源造成極大的浪費,所以需要採用多個 IO 隊列並行 IO,充分發揮 NVMe SSD 本身的性能,提升 SSD 的使用率。
在微秒的 SSD 時代,作業系統逐漸暴露出一些問題,比如低效 CPU 核心調度和內存資源的競爭,以及調度時的切換等帶來了巨大的延遲。
在高並發的壓力下,多核心 CPU 的競爭與不合理的調度成為性能的瓶頸。NeonSAN 專門設計了資源調度引擎,避免由於調度問題和內存爭搶問題帶來的延遲開銷。
首先,在網卡上我們分配專門的接收與解析 IO 流水線,針對 IO 調度流水線我們給它分配了獨享的 CPU,避免調度流水線來回切換產生不必要的上下文開銷,做到專門的 CPU 服務專門的流水線。
在內存方面,在系統軟體啟動時一次申請所需內存,根據不同流水線需求的多少按需分配給接收與解析 IO 調度、數據落盤等流水線,避免在 IO 過程中頻繁申請與釋放,帶來的訪問頁表、內存鎖等額外開銷及內存碎片問題。
資源調度引擎保障了 NeonSAN 在獲得高效 IO 的同時將延遲控制在很低的水平。
分布式存儲是依賴於網絡的,NeonSAN 採用高效的 RDMA 網絡,將業務與數據網絡分離,存儲網絡中的 IO 不會對業務網絡造成壓力,避免資源的競爭。
NeonSAN 採用端到端的RDMA網絡設計,無論是存儲內部節點之間還是存儲服務和客戶端之間都採用了 RDMA 網絡。
RDMA 網絡的內核旁路(kernel bypass)與零拷貝的特點讓網絡中的單個 IO 延遲變得非常低,基於異步的消息機制能讓多個 IO 的並發顯得效率更高。
NeonSAN 分布式全閃跑分及場景實踐
上面介紹了 NeonSAN 的基本架構與面向全閃的特殊設計,接下來看看 NeonSAN 的真實性能表現。
從 E 企研究院的測試結果,可以看到:在兩個客戶端壓力下,隨著卷的增加,NeonSAN 集群提供的性能線性增長,延遲幾乎不變。
以 4K 寫為例,單個卷的 IOPS 是 13 萬多,4 個卷的 IOPS 增加到 47 萬,接近線性增長;單個卷的延遲是 0.943 毫秒,4 個卷的延遲基本沒什麼變化。
NeonSAN 提供了一個智能運維系統,可以通過可視化的圖形界面實現存儲集群的操作和配置,提供對業務資源的監控與審計等。
此外,NeonSAN 提供對快閃記憶體介質的監控,比如按預留空間、使用壽命等,可以提前預警,讓用戶制定合理的擴容規劃。
NeonSAN 的數據均衡與恢復設計也非常有特點。大部分的存儲系統一旦擴容就立刻開始數據的均衡,NeonSAN 擴容完成後,可以選擇業務低峰期或者用戶需要的任意時間點進行數據的均衡,也可以選擇不均衡。
在某些場景下,數據的均衡的是沒必要的,比如原來集群的容量用了 70% 或者 80%,新擴容的節點之後,業務的新 IO 就會落到新節點上,不需要再去搬遷原有節點上的數據。
某些分布式存儲系統,當集群出現故障後,就會立刻開始進行數據恢復。如果此時恰好是業務的高峰期,數據的恢復勢必會和正常的業務 IO 爭搶資源。NeonSAN 對於數據恢復是可控的,用戶可以選擇在業務低峰期進行數據恢復。
NeonSAN 作為企業級的分布式塊存儲,應用場景比較廣泛,除了上面提到的為 Oracle 等企業核心資料庫提供共享存儲之外,還可以為業界主流的虛擬化平臺(VMware、OpenStack、Hyper-V等)提供數據盤,也就是雲主機的雲硬碟。
同時,NeonSAN 也可以用作物理機的數據盤,為大數據分析和計算提供大容量的存儲,為容器應用提供持久化的存儲。
接下來看一個金融用戶的應用案例。
在採用分布式架構之前,用戶採用 Oracle SuperCluster Solaris 平臺,面臨的問題是採購與維保費用昂貴,且擴容複雜,無法快速適應業務發展的需求。
於是客戶把視角轉到了基於 X86 計算與存儲分離的架構,採用三節點全閃配置的 NeonSAN 作為存儲節點,配置三副本用於 Oracle 資料庫存儲卷,提供較高層次的故障保護。
經過了近二年多時間的運行,NeonSAN 分布式存儲方案的優勢主要體現在以下幾個方面:
首先,採用計算與存儲分離的全分布式架構後,海量的數據壓力分散到了多個並發存儲節點,系統性能、吞吐量按照線性擴展。
其次,全閃的存儲節點之間採用 RDMA 互聯,性能提升 100% 以上,存儲系統提供負載均衡機制,有效避免單點性能瓶頸。
由開放的 X86 平臺取代了傳統資料庫一體機與與集中式存儲設備,大幅縮短了存儲系統的建設與擴容周期,有效滿足業務數據量激增的擴容需求,同時大幅度節省採購、維護與運營成本。
NeonSAN 為全閃而生
NeonSAN 誕生在全閃的年代,是為全閃而生的分布式存儲,提供高可靠、高可用,性能卓越的存儲服務,其豐富的接口,可以承載資料庫等傳統應用,原生適配虛擬化、大數據、容器等多種應用生態,服務雲時代高效的數據存儲和管理,
NeonSAN 具備提供豐富的企業級特性,基於同步及異步的數據複製可以靈活構建各類災備和雙活解決方案。經過大量企業客戶核心業務的長期驗證,NeonSAN 是一款真正可以承載企業核心業務的全閃分布式存儲。