分解式存儲的詳細指南
譯文【51CTO.com快譯】近年來,各大主流云計算平臺都已經廣泛地采用了基礎設施分解(Infrastructure disaggregation)的方式,讓云服務能夠提供完全獨立于現有計算實例(compute instances)的存儲系統。可以說,通過將數據中心資源里的內存、計算力、以及存儲進行解耦,它能夠讓每個資源都具有獨立擴展和配置的能力。據此,云端租戶不但可以更加有效地使用計算資源,而且能夠達到可擴展性與靈活性。
而分解式存儲(Disaggregated storage)則是一種可組合的分解式基礎架構。它通過在網絡結構上連接各種物理存儲設備,以形成邏輯上的存儲池,并最終以按需的方式提供可擴展的存儲。由于分解式存儲能夠支持動態環境的創建,因此其中的計算和存儲資源可以根據應用程序的實際負載,進行動態調配。此外,它能夠像計算實例那樣,在不干擾應用服務的可用性的前提下,靈活地實現存儲的擴展與管理。
分解式存儲架構
從概念上說,分解式存儲會通過將多個存儲設備組合到一個邏輯池中,進而將存儲資源提供給服務器實例,以實現存儲與計算的分離。同時,存儲設備在連接到網絡結構中之后,可以模擬出存儲區域網絡 (SAN),以便靈活地擴展出應用所需的存儲資源。不過,傳統的SAN是在共享存儲資源中,將負載緊密地耦合在一起。而分解式存儲則可以提供非本地的存儲。它既為每個負載提供了直接附加存儲(Direct Attached Storage,DAS)的設計,又提高了資源的利用率、可擴展性、可管理性、以及其他非本地存儲的優勢。
目前,分解式存儲的一項突出趨勢在于:它使用了高速的NVME-oF(Non-Volatile Memory Express over Fabric)架構、以及通過NVMe over TCP,并網絡去連接存儲設備。NVMe使用閃存來提高固態存儲設備(SSD)的速度和性能,并使用PCI-Express總線將SSD連接到服務器上。也就是說,使用了NVMe-oF的分解式存儲,將高性能的SSD與服務器的CPU相隔離,然后通過低延遲、低抖動的協議,將它們提供給遠程的計算節點。NVMe over TCP已于2020年秋季被引入Linux內核,并提供了端到端的延遲保證,您可以通過鏈接—https://blog.mayadata.io/mayastor-nvme-of-tcp-performance,以了解更加詳細的信息。
采用分解式存儲
如今,以機器學習、Cassandra的NoSql、以及ElasticSearch等日志記錄為代表的應用程序,對于高性能和低延遲日益重視,DAS在許多負載中都占據了主導地位。而鑒于上述原因,基于NVMe-oF的分解式存儲擁有更為廣泛的使用場景。例如:使用共享架構的Kubernetes通過擴展,實現了按需為每個負載分配適量的存儲和計算資源。而那種使用了分解式池化存儲的軟件平臺,更可以從優先級較低的應用程序處,借用到存儲或CPU資源,以便讓高性能的應用程序,按照負載的變化,實現自動化的無縫擴展。
對于分解式存儲的性能要求:
分解式存儲可以為各種獨立的應用程序帶來如下性能優勢:
1. 高速的網絡結構 - 分解式存儲能夠在訪問速度、以及延遲方面,滿足嚴格的服務質量(QoS)需求。此類網絡通過池化的網絡式存儲,以獲取高度可擴展性、高性能,并能以非擁塞的方式連接到計算服務器上,以便多臺主機快速地訪問到存儲。
2. 快速存儲的網絡協議 - 分解式存儲通過諸如:NVMe和NVMe-oF之類的高效且快速的傳輸協議,以比傳統的iSCSI協議更低延遲的方式,在SSD直連的計算節點處,實現最大的IOPS(Input Output operations Per Second,IOPS)。
3. 快速、安全、可擴展的I/O控制器 – 此類存儲控制器能夠快速、安全地在底層SSD上,執行讀/寫操作,并能根據它們所支持的負載,使用松散耦合的架構,來實現彈性的橫向擴展。
分解式存儲的類型
目前分解式存儲擁有如下三種類型與形式:
配置分解
這是一種非動態形式的分解。由于是在服務級別的配置期間執行存儲抽象,因此它不需要持續運行控制器的監視。存儲池可以通過重新配置,實現在部署期間、或在為不同的應用程序重建存儲架構時,處理不同的工作負載。
故障分解
作為另一種非動態形式的分解,存儲驅動器僅在應用出現故障時,被重新分配給不同的主機。雖然重新配置鮮少發生,但是此類分解進一步提高了應用程序的容錯能力。
動態彈性分解
在這種形式中,驅動器通常會被池化,并且不連接到多個I/O控制器上。因此,每個服務器都可以一次性連接多個驅動器。隨著服務器請求和負載數量的變化,存儲的重新配置會頻繁發生,它們每隔幾個小時就會請求不同的存儲驅動器。
由于存儲資源被默認為完全抽象的,因此在此類分解形式中,任何主機都可以通過任何I/O控制器,連接到任何存儲驅動器上。而且由于服務器與存儲的連接,會通過重新調整,來適應每個I/O請求,因此基礎設施的重新配置也就會動態發生。例如,Kubernetes會水平擴展成為使用I/O控制器的主機,按需為負載的分解提供算力。
分解式存儲的優勢:
分解式存儲為計算和基礎設施提供了如下方面的改進:
1. 提高資源的利用率 - 分解式存儲能夠根據優先級、以及應用程序的需求,動態地分配存儲資源。同時,它能夠讓用戶享用到由SSD提供的快速I/O。這就意味著租戶可以將所有可用的存儲資源都投入使用,并根據應用程序的實際要求,在設備的I/O、容量、吞吐能力之間,按需實現最佳配置。
2. 使得SSD靈活且可擴展 - 借助分解式存儲,用戶可以為應用程序分配任意數量的SSD,然后按照應用程序的實際要求增減其容量。
3. 簡化擴展 - 分解式存儲允許用戶創建動態可擴展的存儲架構,以滿足使用Shared-Nothing架構的資源需求變化。
4. 支持創建高性能的應用程序 - 分解式存儲允許用戶按需分配吞吐量和讀寫速度,以滿足實際的負載需求。由于應用的執行效率更高,因此用戶訪問其存儲數據的延遲也就更小。
分類存儲的發展趨勢
在新技術的加持下,分解式存儲作為DAS的替代方案,得到了開發與采用。其中,Non-Volatile Memory Express(NVMe)和Non-Volatile Memory Express Over Fabric (NVMe-oF)通過高速的I/O和網絡,實現了對于SSD的更好利用。例如,Amazon的EBS和Azure的Blob Storage等公共云的Web Scaler,都能夠構建出大量的計算實例。而這些實例通過利用優化的硬件和軟件基礎設施,為大量分布式的服務器提供了遠程的塊存儲設備。
Kubernetes如何啟用分解式存儲:
分解式存儲能夠完美地與Kubernetes相配合。也就是說,Kubernetes通過創建一個靈活且高度可擴展的部署環境,可以實現對負載和存儲控制器的編排和擴展。同時,Kubernetes使用Persistent Volumes和Persistent Volume Claims,根據容器存儲的需求將各種Pod附加到物理存儲的抽象之中,進而為集群提供靈活的存儲。此外,通過容器存儲接口(Container Storage Interface,CSI),Kubernetes允許第三方存儲提供商通過擴展卷功能的方式,來創建塊和文件存儲的解決方案。可以說,有了CSI,用戶可以虛擬地分離出計算層和存儲層,從而為應用程序啟用分解式存儲。通常,Kubernetes的CSI插件具有如下兩種類型:
1. 存儲驅動器 – 由于可以在Kubernetes集群之外被維護,因此它允許將應用程序配置為利用存儲類(Storage Classes)和持久卷聲明(Persistent Volume Claims),去動態地使用資源。
2. 容器附加存儲 (Container Attached Storage,CAS) - 此模型通過按需將容器化的存儲控制器,分配給負載,來實現基于負載的存儲。存儲在集群中運行,各種控制層面元素(control plane elements)位于主節點處,而數據層面的負載則運行在工作節點上。數據層面節點既可以是本地節點,也可以是由主節點中的控制器去獨立調度和擴展分解式的存儲目標。通過使用CAS模型,每個卷都有一個專用的控制器Pod和一組多個副本的Pod。您可以通過鏈接--https://www.cncf.io/blog/2018/04/19/container-attached-storage-a-primer/,了解更多有關CAS架構的詳細論述。
通過CSI的連接,以及擴展和編排存儲軟件的能力,Kubernetes很好地支持了分解式存儲。
由MayaData OpenEBS提供的容器附加存儲(Container Attached Storage,CAS)部署了一個數據管理層面。該層面在架構上映射到Kubernetes的應用程序管理層。OpenEBS將分解的存儲統一到Kubernetes應用層的一個組件中。而對于Kubernetes應用程序而言,在那些已部署到企業數據中心的異構硬件和軟件之上,OpenEBS創建了統一的存儲基礎架構。它不但簡化了開發人員的工作量,而且讓DevOps擁有更大的控制權,甚至為CxO們提供了完整的使用可視性。可以說,OpenEBS能夠讓用戶管理起跨企業數據中心的有狀態應用來,更加簡單、可預測、更加游刃有余。
最近的一項調查證實,OpenEBS是最受歡迎的CAS存儲項目之一。與其他云原生的、適合Kubernetes的項目相似,OpenEBS在界面和功能上,避免了傳統存儲架構“共享一切”的依賴項和可擴展性。而且,OpenEBS非常易于操作和使用。
OpenEBS依靠控制層面來提供卷,并執行卷的相關操作。它包含了一個PV配置器,能夠動態地為正確節點上的卷副本Pod和目標控制器Pod,創建特定的部署要求。同時,OpenEBS數據層面也包含了一個存儲引擎,該引擎能夠實現集群卷的實際I/O路徑。當然,它也可以在LocalPV模式下,啟用對存儲設備的本地或分解式訪問。如下圖所示,存儲引擎可以在用戶空間中作為微服務運行,通過靈活的配置和擴展,以滿足負載的需求。
如果您想了解更多有關基于CAS的OpenEBS不同組件的信息,請參見鏈接--https://docs.openebs.io/docs/next/architecture.html?__hstc=216392137.5bad910047ce69cba4f6eb08bb766f5e.1624011986371.1624024266165.1624031273026.3&__hssc=216392137.3.1624031273026&__hsfp=2402044620。當然,您也可以通過加入OpenEBS社區,以進一步了解OpenEBS如何為Kubernetes實現分解式存儲。
小結
分解式存儲通過將計算與存儲解耦,實現了高速、靈活、且具有高度可擴展的應用程序。借助分解式存儲,用戶可以利用高速NVMe的SSD,受益于低延遲和增強的負載響應能力。可以說,作為一種獨特的存儲解決方案,分解式存儲的速度、靈活性和低延遲,在優化資源使用的同時,也降低了TCO。
原文標題:A Detailed & Comprehensive Guide to Disaggregated Storage,作者: Sudip Sengupta
【51CTO譯稿,合作站點轉載請注明原文譯者和出處為51CTO.com】