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