混合存儲架構(gòu)中的數(shù)據(jù)編排
Alluxio 可以作為開源的數(shù)據(jù)編排系統(tǒng)的首選方案,旨在解決現(xiàn)代分布式場景下數(shù)據(jù)訪問效率低下的問題。在存算分離的架構(gòu)下,Alluxio 通過把數(shù)據(jù)緩存在靠近計(jì)算的地方,減少數(shù)據(jù)移動(dòng)和復(fù)制所帶來的開銷,加速數(shù)據(jù)計(jì)算。Alluxio 不僅適用于傳統(tǒng) Hadoop 環(huán)境,還可與現(xiàn)代大數(shù)據(jù)生態(tài)系統(tǒng)、云原生應(yīng)用程序的存儲和計(jì)算資源無縫集成。在混合云、混合存儲架構(gòu)中,Alluxio 作為數(shù)據(jù)聯(lián)邦橋梁,為自治數(shù)據(jù)系統(tǒng)之間提供數(shù)據(jù)共享的解決方案。Alluxio的解決方案工程師車賽光本次分享的題目是《混合存儲架構(gòu)中的數(shù)據(jù)編排》。
一、數(shù)據(jù)訪問的主要命題
數(shù)據(jù)訪問的問題貫穿整個(gè)計(jì)算機(jī)系統(tǒng)架構(gòu)的演變歷程。這些問題在不同時(shí)代都存在。主要包括以下幾個(gè)命題:第一是如何提高數(shù)據(jù)的讀寫性能;第二是通過命名空間實(shí)現(xiàn)數(shù)據(jù)的便捷訪問;第三是如何解決數(shù)據(jù)接口的兼容問題;第四是如何管理存儲系統(tǒng)中的數(shù)據(jù)。當(dāng)然,這些命題并不足以涵蓋數(shù)據(jù)訪問的所有方面,因?yàn)楣こ處熯€需要關(guān)注一系列其他相關(guān)的問題,例如安全、審計(jì)、監(jiān)控等等。但這些其他問題并不是數(shù)據(jù)訪問所獨(dú)有的,所以我們重點(diǎn)關(guān)注的是前四個(gè)命題。
回看計(jì)算機(jī)系統(tǒng)的發(fā)展歷史,我們大致可以把它劃分為“單臺服務(wù)器“時(shí)代、”單一分布式系統(tǒng)“時(shí)代、”多系統(tǒng)、多數(shù)據(jù)中心“時(shí)代。
在單臺服務(wù)器時(shí)代,上述命題在操作系統(tǒng)中或者某些軟件內(nèi)部得到了解決。首先為了提高數(shù)據(jù)的讀寫性能,操作系統(tǒng)使用不同層級的緩存加速 CPU 對數(shù)據(jù)的訪問速率。通過多級緩存可以讓數(shù)據(jù)更加貼近于 CPU,從而避免每次都做磁盤尋址的過程。其次,操作系統(tǒng)文件系統(tǒng)提供統(tǒng)一的命名空間,方便用戶或者應(yīng)用程序去訪問數(shù)據(jù)。然后是接口轉(zhuǎn)換。像 Linux 的虛擬文件系統(tǒng)會提供不同存儲掛載的模式,無論是從用戶態(tài)還是內(nèi)核態(tài)進(jìn)行存儲都要通過虛擬文件系統(tǒng)掛載在 Linux 的存儲系統(tǒng)上,使不同的 NFS 或本地磁盤都能以一致的方式訪問數(shù)據(jù)。因此虛擬文件系統(tǒng)本身就提供了接口轉(zhuǎn)換。最后是數(shù)據(jù)管理,比如數(shù)據(jù)備份、文件系統(tǒng)的日志等功能。
之后,進(jìn)入了以 Hadoop 為代表的單一分布式系統(tǒng)時(shí)代。在這個(gè)時(shí)期,上述命題在單一分布式系統(tǒng)內(nèi)部被解決了。例如,MapReduce 會把任務(wù)根據(jù)數(shù)據(jù)本地性分發(fā)到合適的節(jié)點(diǎn)上執(zhí)行以提高數(shù)據(jù)讀寫效率(數(shù)據(jù)本地性)。當(dāng)單一 NameNode 的壓力過大時(shí),人們把 HDFS 集群進(jìn)行分區(qū)管理,并在上面添加 HDFS RBF 做數(shù)據(jù)文件訪問路由,可以通過 RBF 統(tǒng)一不同 HDFS 集群的命名空間以方便用戶訪問,同時(shí)還實(shí)現(xiàn)了集群層面的橫向擴(kuò)展和擴(kuò)容。在接口轉(zhuǎn)換方面,當(dāng)用戶需要通過 POSIX 的方式去訪問數(shù)據(jù)時(shí),特別是機(jī)器學(xué)習(xí)和應(yīng)用程序需要訪問 HDFS 數(shù)據(jù)時(shí),就需要對文件接口進(jìn)行轉(zhuǎn)換。開源社區(qū)中有許多庫,如 hdfs-fuse,主要用于上述目的。此外,大家熟悉的用于數(shù)據(jù)管理的 distcp,在不同的集群之間遷移數(shù)據(jù)。
從 Hadoop 的出現(xiàn)到當(dāng)下,計(jì)算集群越來越多,應(yīng)用場景也越來越豐富。計(jì)算框架如 Spark、Presto 等層出不窮。這些新框架的性能更好、功能更多,應(yīng)用場景也更加廣泛。同時(shí),機(jī)器學(xué)習(xí)領(lǐng)域的工程實(shí)踐比以往任何時(shí)候都活躍,應(yīng)用場景也變得更為廣泛,存儲方案也比原來更加豐富和成熟,比如很多企業(yè)都在思考如何把對象存儲用起來、用得更好;很多企業(yè)在同時(shí)使用多種類型的存儲系統(tǒng)。多數(shù)據(jù)中心、多云、混合云的架構(gòu)越來越多地被采納。很多企業(yè)的架構(gòu)已經(jīng)邁入了“多系統(tǒng)、多數(shù)據(jù)中心時(shí)代”的時(shí)代。
不同的場景需要使用不同的計(jì)算框架。不同的計(jì)算框架能夠在不同的場景中為我們提供不同的備選方案。不同的存儲系統(tǒng)讓我們能夠在容量、性能、成本等方面找到適合自己的平衡點(diǎn)。多數(shù)據(jù)中心、多云、混合云的架構(gòu)為我們進(jìn)一步優(yōu)化服務(wù)的可用性、可靠性、以及成本提供了可能。但是在面對更加豐富的架構(gòu)設(shè)計(jì)的選擇的同時(shí),我們也要重新檢視新架構(gòu)下數(shù)據(jù)訪問的 4 個(gè)命題。比如,在使用對象存儲的過程中,如何提高對象存儲方案的效率、減少公有云上對象存儲訪問的成本;在混合云場景中,如何處理帶寬限制對數(shù)據(jù)網(wǎng)絡(luò)傳輸?shù)挠绊懖⑻岣邤?shù)據(jù)訪問的并發(fā)量;使用 HDFS 存放熱數(shù)據(jù)、用對象存儲存放冷數(shù)據(jù)的時(shí)候,如何使用統(tǒng)一的命名空間去統(tǒng)一訪問數(shù)據(jù),在數(shù)據(jù)的熱度發(fā)生變化的時(shí)候,如何對數(shù)據(jù)進(jìn)行管理。
Alluxio 的數(shù)據(jù)編排技術(shù)就是想要幫助用戶在多系統(tǒng)、多數(shù)據(jù)中心的架構(gòu)中解決數(shù)據(jù)訪問的四個(gè)命題。因此,當(dāng)企業(yè)在考慮多個(gè)數(shù)據(jù)中心、多個(gè)云服務(wù)、異構(gòu)存儲的使用、數(shù)據(jù)訪問性能優(yōu)化的時(shí)候,我們推薦工程師從上述命題入手去思考數(shù)據(jù)訪問的挑戰(zhàn),然后看一下 Alluxio 是如何解決這些問題和挑戰(zhàn)的。
二、Alluxio 的最佳試用場景
在單數(shù)據(jù)中心或者單區(qū)域的場景中,Alluxio 可以幫助用戶解決一些痛點(diǎn)。例如,在單一 HDFS 集群的場景下,雖然 HDFS 的負(fù)載通常較為平穩(wěn),但在任務(wù)峰值時(shí) NameNode 或 DataNode 可能會承受壓力。在這種情況下,我們可以使用 Alluxio 分流 HDFS 的負(fù)載。另外,若在數(shù)據(jù)中心中使用 Presto 且不存儲數(shù)據(jù),則可以使用 Alluxio 的 SDK 作為 Presto 客戶端緩存,提高 Presto 查詢的性能,減少對象存儲的開銷。
在涉及到多個(gè)區(qū)域、多個(gè)數(shù)據(jù)中心以及計(jì)算框架和存儲集群比較復(fù)雜的情況下,用戶更應(yīng)該考慮使用 Alluxio 解決新的技術(shù)挑戰(zhàn)。
圖左顯示四個(gè)區(qū)域,每個(gè)區(qū)域表示一個(gè)獨(dú)立的數(shù)據(jù)中心或云域,它們彼此交互,使用不同的存儲方式,如對象存儲和 HDFS。除了計(jì)算框架復(fù)雜之外,存儲也是異構(gòu)的混合模式。在這種多系統(tǒng)、多數(shù)據(jù)中心場景中,用戶痛點(diǎn)主要包括數(shù)據(jù)讀寫性能不高或者不穩(wěn)定、缺乏統(tǒng)一命名空間、缺乏可靠的協(xié)議轉(zhuǎn)換方案等問題。Alluxio 不僅可以解決這些問題,還具有自動(dòng)數(shù)據(jù)管理特性,幫助用戶跨區(qū)域、跨存儲管理數(shù)據(jù)。
三、Alluxio 的數(shù)據(jù)緩存,命名空間,接口轉(zhuǎn)換
Alluxio 是如何在上面的場景中解決用戶的痛點(diǎn)的?這里,我們先介紹三個(gè) Alluxio 核心功能。
1、數(shù)據(jù)緩存
第一個(gè)是 Alluxio 提供的數(shù)據(jù)緩存功能。如上面第一張圖,本地?cái)?shù)據(jù)中心和公有云之間的數(shù)據(jù)交互和數(shù)據(jù)訪問需要通過網(wǎng)絡(luò)。數(shù)據(jù)可以選擇存儲在對象存儲或 HDFS 中,并在公有云上部署一些計(jì)算集群。在進(jìn)行機(jī)器學(xué)習(xí)訓(xùn)練、批處理或即席查詢時(shí),數(shù)據(jù)訪問由于網(wǎng)絡(luò)限制而效率不高。因此,在公有云一側(cè),可以部署 Alluxio 集群緩存數(shù)據(jù)。部署 Alluxio 集群后,整個(gè)數(shù)據(jù)流模式發(fā)生了變化:計(jì)算在訪問遠(yuǎn)端存儲之前,會先訪問 Alluxio;如果 Alluxio 已經(jīng)緩存了數(shù)據(jù),則可以直接從本地集群中高效訪問數(shù)據(jù),而無需通過網(wǎng)絡(luò)重復(fù)獲取數(shù)據(jù);如果 Alluxio 尚未緩存這些數(shù)據(jù),它將從遠(yuǎn)端存儲拉取并緩存數(shù)據(jù),然后將其交給計(jì)算集群處理。當(dāng) Alluxio 緩存數(shù)據(jù)時(shí),不僅可以緩存文件的內(nèi)容,還可以緩存文件的元數(shù)據(jù)信息。元數(shù)據(jù)緩存非常重要,因?yàn)樗梢杂行Ы档蛯ο蟠鎯Φ脑L問成本、分散 HDFS NameNode 的負(fù)載。
Alluxio 不僅提供集群緩存,還可以提供客戶端 SDK,幫助計(jì)算組件進(jìn)行本地緩存。客戶端緩存比集群緩存更接近客戶端計(jì)算,所以性能更高。
因此,Alluxio 提供了兩種不同級別的緩存,用戶可以在不同場景中選擇其一或者同時(shí)使用兩種緩存。在使用時(shí):
- Alluxio 可以將數(shù)據(jù)緩存在 MEM、SSD 或 HDD 中,讓用戶根據(jù)實(shí)際情況選擇緩存資源。
- Alluxio 支持緩存中數(shù)據(jù)的生命周期管理,對數(shù)據(jù)的緩存時(shí)間進(jìn)行 TTL 設(shè)置
- Alluxio 支持不同的緩存讀寫類型(穿透寫、異步寫、UFS 直接寫等;緩存讀、UFS 直接讀);用戶可以根據(jù)數(shù)據(jù)類型選擇緩存策略。
- 整個(gè) Alluxio 資源由用戶配置,用戶可以根據(jù)需要分配機(jī)器、節(jié)點(diǎn)和資源,即完全管理緩存資源。在使用公有云的對象存儲時(shí),對象存儲會對讀操作的吞吐量和并發(fā)量限流;但是如果使用 Alluxio 作為對象存儲的緩存,則不存在限流問題。
- Alluxio 緩存對存儲的訪問完全透明,不需要用戶專門適配 Alluxio,使用非常方便。
2、命名空間
第二個(gè)功能是統(tǒng)一命名空間。用戶可以將不同的異構(gòu)存儲掛載到 Alluxio 的命名空間中,并通過統(tǒng)一命名空間訪問這些存儲。比如,用戶同時(shí)使用了 HDFS 和 S3,那么他可以把 HDFS 和 S3 掛載到 Alluxio 的命名空間上,用戶可以使用統(tǒng)一的視圖訪問數(shù)據(jù),而不需要在不同數(shù)據(jù)源之間進(jìn)行切換。
此外,Alluxio 還提供了一種有趣的掛載方式,即可以將不同的存儲系統(tǒng)掛載到Alluxio 命名空間的同一目錄下。這種掛載方式稱為 Union Mount,它打破了傳統(tǒng)的“掛載”語義的定義,允許用戶通過一個(gè)掛載點(diǎn)訪問多個(gè)數(shù)據(jù)源。這種抽象命名空間可以將具體的物理命名空間和應(yīng)用層解耦,從而降低對業(yè)務(wù)的侵入性。本文后面的部分會討論一個(gè)使用 Union Mount 的場景。
3、接口轉(zhuǎn)換
第三個(gè)功能是接口轉(zhuǎn)換??梢钥吹?,Alluxio 所處的軟件層次位于計(jì)算和存儲之間,就像操作系統(tǒng)中的數(shù)據(jù)總線一樣,并向上層提供不同的數(shù)據(jù)訪問接口。換句話說,在該層次中,Alluxio 將計(jì)算和存儲進(jìn)行了訪問接口的解耦,無論下面的存儲系統(tǒng)接口如何變化,上面的計(jì)算系統(tǒng)都可以使用適合自己的接口去訪問底層的數(shù)據(jù),整個(gè)訪問過程是順暢和無感知的。這有什么用處呢?比如,以前的數(shù)據(jù)都保存在 HDFS 中,但是用戶想要對數(shù)據(jù)進(jìn)行備份或者進(jìn)行熱、冷分離。如果引入對象存儲,用戶則需要對 S3 等協(xié)議進(jìn)行適配;如果上層計(jì)算通過 Alluxio 去訪問,Alluxio 側(cè)為計(jì)算屏蔽了存儲接口的差異,將底層的 HDFS 和 S3 接口都統(tǒng)一成上面的 HDFS 接口進(jìn)行數(shù)據(jù)訪問,也就是說,計(jì)算側(cè)不需要進(jìn)行任何改造,仍然可以通過 HDFS 接口訪問 S3 上的數(shù)據(jù)。
抽象存儲系統(tǒng)接口,能夠幫助用戶方便地整合機(jī)器學(xué)習(xí)和大數(shù)據(jù)技術(shù)棧。例如,許多訓(xùn)練任務(wù)的數(shù)據(jù)都存儲在 HDFS 或?qū)ο蟠鎯χ校欢?PyTorch 和 TensorFlow 更傾向使用 POSIX 接口去訪問數(shù)據(jù),這種數(shù)據(jù)訪問接口的差異可以通過 Alluxio 來屏蔽。
接口轉(zhuǎn)換配合統(tǒng)一命名空間的使用,可以幫助用戶建立統(tǒng)一的數(shù)據(jù)訪問視圖。例如,一個(gè)集團(tuán)公司下屬多個(gè)子公司,且子公司的數(shù)據(jù)存放在異構(gòu)存儲系統(tǒng)中。集團(tuán)公司可以搭建一個(gè) Alluxio 服務(wù),把子公司的存儲系統(tǒng)都掛載到集團(tuán)公司的 Alluxio 服務(wù)上,然后使用 Alluxio 的 RESTful 接口為用戶提供文件/對象的 Web 視圖。
四、基于 Alluxio 的數(shù)據(jù)管理
以上是 Alluxio 的幾個(gè)核心功能,此外,Alluxio 還提供數(shù)據(jù)管理功能。
我們看這樣一個(gè)場景:由于 HDFS 集群資源非常有限,容量已經(jīng)達(dá)到了瓶頸,所以用戶需要將熱數(shù)據(jù)放在 HDFS 中,將冷數(shù)據(jù)放在對象存儲中,以實(shí)現(xiàn)數(shù)據(jù)的冷熱分層。用戶需要對不同的數(shù)據(jù)或者分區(qū)設(shè)置不一樣的策略。例如,對于超過 6 個(gè)月的文件,Alluxio 會將其放在對象存儲中,因?yàn)檫@些數(shù)據(jù)已經(jīng)變成冷數(shù)據(jù);對于小于 6個(gè)月的文件,Alluxio 會將其放在 HDFS 中。其中,6 個(gè)月是用戶自定義的時(shí)間(用戶可以定義其他時(shí)間閾值作為冷熱數(shù)據(jù)的分界線),有的文件需要根據(jù)文件創(chuàng)建時(shí)間決定其冷熱狀態(tài),有的需要根據(jù)文件的名稱來判斷。
一種辦法是用戶編寫和維護(hù)腳本或使用數(shù)據(jù)集成軟件進(jìn)行數(shù)據(jù)遷移。另一種方法是使用 Alluxio。
Alluxio 提供了 Alluxio PDDM 執(zhí)行引擎的功能來幫助用戶管理數(shù)據(jù)。用戶根據(jù)場景和需求,在執(zhí)行引擎上定義一些數(shù)據(jù)管理策略,比如哪些文件需要遷移、遷移的目的地是哪里、原始文件是否刪除等。
策略定義好以后,執(zhí)行引擎就根據(jù)策略去做相應(yīng)的工作了。例如定期掃描目錄樹、拷貝出錯(cuò)的重試、老文件的刪除等,整個(gè)數(shù)據(jù)管理的工作都被執(zhí)行引擎自動(dòng)化地完成了。
結(jié)合前面提到的 union mount 掛載:因?yàn)閿?shù)據(jù)從 HDFS 挪到了對象存儲里邊,物理位置發(fā)生了變化,但是由于兩個(gè)存儲的數(shù)據(jù)的掛載點(diǎn)都掛載在 Alluxio 的同一個(gè)目錄下面,因此用戶應(yīng)用程序如果通過 Alluxio 目錄去訪問數(shù)據(jù)的話,并不會感知到物理位置的變化,這樣就完全避免了由于數(shù)據(jù)在混合存儲下物理位置變化而帶來的改造需求。Alluxio 數(shù)據(jù)管理,將 PDDM 執(zhí)行引擎和 union mount 這兩個(gè)功能配合使用,達(dá)到數(shù)據(jù)管理的目的,并且對應(yīng)用是低侵入的。
五、基于 Alluxio 的數(shù)據(jù)聯(lián)邦
最后談?wù)劵?Alluxio 的數(shù)據(jù)聯(lián)邦場景。許多企業(yè),尤其是正處于數(shù)字化和 IT 化轉(zhuǎn)型過程中的大型企業(yè),會涉及使用多個(gè)系統(tǒng)或者多家云服務(wù)的情況。例如,有些集團(tuán)的區(qū)域公司在發(fā)電站周圍建立了較小規(guī)模的數(shù)據(jù)中心進(jìn)行數(shù)據(jù)收集,每個(gè)區(qū)域公司有自己的數(shù)據(jù)中心,每個(gè)中心有自己的技術(shù)棧;再有,一些大型集團(tuán)的生產(chǎn)部門和銷售部門分布在不同區(qū)域,各部門相對獨(dú)立且使用不同的云服務(wù)。這種類型的數(shù)字化過程或者IT 建設(shè)方式的優(yōu)點(diǎn)在于高敏捷度:區(qū)域公司或者部門只需快速解決自己的痛點(diǎn),并選擇合適的解決方案和服務(wù)即可。但同時(shí),容易導(dǎo)致數(shù)據(jù)孤島的產(chǎn)生。
子公司和各部門自己的數(shù)據(jù)如果能夠安全地、充分地被共享和使用,數(shù)據(jù)的價(jià)值則能夠趨于最大化;反之,如果數(shù)據(jù)的共享和使用被數(shù)據(jù)孤島而影響,企業(yè)所擁有的數(shù)據(jù)資產(chǎn)的價(jià)值會大打折扣。業(yè)界有很多解決方案來提升數(shù)據(jù)價(jià)值,如近幾年比較流行的數(shù)據(jù)網(wǎng)格(data mesh),是一種“從上到下”的解決方案。除此之外,還有其他的方案。
這里,我們討論一種使用 Alluxio 的解決方案。
假設(shè),集團(tuán)想要打通子公司之間或者部門之間的數(shù)據(jù)通路。
首先,集團(tuán)公司建立集中式的數(shù)據(jù)管理平臺。平臺包含操作界面和存儲系統(tǒng)。集團(tuán)公司允許來自子公司的數(shù)據(jù)資產(chǎn)管理人員注冊數(shù)據(jù)資產(chǎn),例如,注冊某子公司擁有哪些存儲系統(tǒng)、哪些目錄、哪些文件等;對于格式化數(shù)據(jù),用戶在數(shù)據(jù)管理平臺中注冊自己的庫、表信息。
然后,數(shù)據(jù)管理平臺根據(jù)用戶提供的數(shù)據(jù)資產(chǎn)注冊信息,通過 Alluxio 和 Meta Store Proxy,把子公司的數(shù)據(jù)資產(chǎn)接入進(jìn)來。具體說來,存儲系統(tǒng)(HDFS、對象存儲、NAS等)掛載到集團(tuán)公司的 Alluxio 上,其他子公司通過 Alluxio 統(tǒng)一訪問這些存儲系統(tǒng)中的數(shù)據(jù);結(jié)構(gòu)化數(shù)據(jù)的元數(shù)據(jù)(庫、表)掛載到 Meta Store Proxy 上,其他子公司通過 Meta Store Proxy 統(tǒng)一訪問這些信息。
最后,用戶訪問數(shù)據(jù)時(shí),如果訪問本部門或公司的數(shù)據(jù),可按照原來的方式進(jìn)行訪問。如果要實(shí)現(xiàn)共享數(shù)據(jù)或數(shù)據(jù)的聯(lián)邦查詢、分析或任務(wù)等,則通過集團(tuán)公司的數(shù)據(jù)管理平臺訪問。訪問過程中,代理提供庫表信息,訪問具體文件時(shí),則使用Alluxio。子公司在訪問共享數(shù)據(jù)時(shí),由于通過數(shù)據(jù)管理平臺訪問,所以需要受到集團(tuán)公司對數(shù)據(jù)訪問權(quán)限的控制。此外,由于所有數(shù)據(jù)在同一個(gè)平臺中注冊,數(shù)據(jù)的發(fā)現(xiàn)和使用、數(shù)據(jù)資產(chǎn)的管理變?yōu)榧谢姆绞健?/span>
以上就是基于 Alluxio 的數(shù)據(jù)聯(lián)邦場景下的解決方案。