
作者 | 顧榮 南京大學PASALab, Fluid項目co-founder
來源 |
阿裡巴巴雲原生公衆号導讀:為了解決大資料、AI 等資料密集型應用在雲原生場景下,面臨的異構資料源通路複雜、存算分離 I/O 速度慢、場景感覺弱排程低效等痛點問題,南京大學PASALab、阿裡巴巴、Alluxio 在 2020 年 6 月份聯合發起了開源項目 Fluid。
Fluid 是雲原生環境下資料密集型應用的高效支撐平台,項目自開源釋出以來吸引了衆多相關方向領域專家和工程師的關注,在大家的積極回報下社群不斷演進。近期 Fluid 0.5 版本正式釋出,在該版本中,Fluid 主要新增改善以下三個方面内容:
- 豐富資料集的操作功能,支援線上彈性擴縮容、中繼資料備份和恢複。
- 支援多樣環境配置部署,滿足使用者的個性化部署配置需求。
- 新增資料緩存引擎實作,增加使用者在公有雲上的引擎選擇。
Fluid 開源項目位址:
https://github.com/fluid-cloudnative/fluid這三大主要功能的開發需求來自衆多社群使用者的實際生産回報,此外 Fluid v0.5 還進行了一些 bug 修複和文檔更新,歡迎使用體驗 Fluid v0.5!
Fluidv0.5 下載下傳連結:
https://github.com/fluid-cloudnative/fluid/releases下文是本次新版本釋出功能的進一步介紹。
豐富資料集的操作功能
在本版本中 Fluid 重點豐富了核心抽象對象 —— Dataset(資料集)的相關操作功能,進而使資料密集型應用能夠更好地利用雲原生提供的彈性、可觀測性等基礎功能,并增強了使用者對資料集管理的靈活性。
1. 資料集線上彈性緩存擴縮容
這是社群使用者一直期待的功能!在 Fluid v0.5 之前,如果使用者想要調整資料集的緩存能力,需要以全部解除安裝緩存引擎再重部署的方式完成。這種方式耗時耗力,還必須考慮資料緩存全部丢失的高昂代價。是以,在新版本中,我們為資料集提供了對緩存彈性擴縮容的支援,使用者可以根據自己的場景需求,以不停機方式 on-the-fly 地按需增加某資料集的緩存容量以加速資料通路(擴容)或減少某個不頻繁使用的資料集的緩存容量(縮容),進而實作更加精細的彈性資源配置設定,提高資源使用率。Fluid 内置的控制器會根據政策選擇合适的擴縮容節點,例如在縮容時會結合節點上運作任務情況和節點緩存比例作為篩選條件。
執行彈性資料集的緩存能力彈性擴縮容,使用者隻需運作如下指令:
kubectl scale alluxioruntimes.data.fluid.io {datasetName} --replicas={num}
其中 datasetName 對應于資料集的名稱,replicas 指定緩存節點的數目。
有關資料集手動擴縮容及其效果的示範視訊:
http://cloud.video.taobao.com/play/u/2987821887/p/1/e/6/t/1/302459823704.mp4更多關于資料集手動擴縮容的操作細節,請參考 Github 上的
示例文檔。
2. 中繼資料的備份與恢複
該功能增強了 Fluid 資料集中繼資料管理的靈活性。先前的 Fluid v0.4 已經支援将資料集的中繼資料(例如,檔案系統 inode tree)加載至本地,并且會記錄資料集的一些關鍵統計資訊(例如,資料量大小和檔案數量)。然而,一旦使用者銷毀本地資料集,這些中繼資料資訊也都将丢失,重新建構資料集時需再次從底層存儲系統擷取。
是以,在 Fluid v0.5 中,我們新增了一個 K8s 自定義資源對象 —— DataBackup,為使用者提供了聲明式的 API 接口,以控制資料備份的相關行為。DataBackup 自定義資源對象建構的一個簡單示例如下所示:
apiVersion: data.fluid.io/v1alpha1
kind: DataBackup
metadata:
name: hbase-backup
spec:
dataset: hbase
backupPath: pvc://<pvcName>/subpath1/subpath2/
再次建立資料集時,隻需新增一個指定備份檔案位置的字段:
apiVersion: data.fluid.io/v1alpha1
kind: Dataset
metadata:
name: hbase
spec:
dataRestoreLocation:
path: pvc://pvc-local/subpath1/
mounts:
- mountPoint: https://mirrors.tuna.tsinghua.edu.cn/apache/hbase/2.2.6/
此時,Fluid 将首先從備份檔案加載中繼資料和資料集統計資訊,進而很大地提高中繼資料加載速度。
更多關于進行資料集中繼資料備份與恢複的操作細節,請參考 Github 上的
3. 資料集的可觀測性優化
Fluid v0.5 還進一步增強了資料集的可觀測性能力,具體包括兩個部分:
1)與 Prometheus 相結合
Fluid 0.5 版本釋出:開啟資料集緩存線上彈性擴縮容之路豐富資料集的操作功能支援多樣環境配置部署新增資料緩存引擎實作總結
該特性能夠支援資料集的可用性和性能名額收集,并且通過 Grafana 進行可視化展示。目前已支援 AlluxioRuntime 的實作,使用者可以友善地了解目前可緩存節點、緩存空間、現有緩存比例、遠端讀、短路讀等性能名額。整個配置過程非常簡單,達到了對于資料集監控系統“開箱即用"的效果。
具體的使用方法,請參考 Github 上的
2)新增資料集緩存命中率名額
該功能可以辨別過去 1 分鐘内對該資料集的全部通路中有多少通路命中了分布式緩存。該名額一方面能夠幫助使用者分析他們資料密集型應用中的性能瓶頸,量化檢視 Fluid 在整個應用運作的工作流中起到的效果;另一方面能夠幫助使用者在應用性能提升和緩存資源占用間進行行權衡,做出合理的擴縮容決策。
這一名額被添加在 Fuild v0.5 的
Dataset.Status.CacheStates
的 Dataset CRD 資源狀态中,具體來說包括:
- Cache Hit Ratio:過去一分鐘分布式緩存命中的通路百分比。
- Local Hit Ratio:過去一分鐘本地緩存命中的通路百分比。
- Remote Hit Ratio:過去一分鐘遠端緩存命中的通路百分比。
注: 對于分布式緩存而言,資料命中有兩種不同的緩存命中情況。本地緩存命中指的是通路發起者可直接在同結點通路到緩存資料。遠端緩存命中指的是通路發起者需要通過網絡通路其他結點上的緩存資料。
在 Fluid v0.5 中,使用者可以使用以下指令友善地檢視緩存命中率名額:
kubectl get dataset <dataset-name> -o wide
NAME ... CACHE HIT RATIO AGE
<dataset-name> ... 86.2% 16m
支援多樣環境配置部署
自 Fluid 0.4 版本釋出以來,我們根據社群使用者實際部署回報的問題和需求,對 Fluid 在多樣環境下的部署配置增加了更多支援。
1. 支援 Fuse 的 global 模式
在 Fluid 中,Dataset 資源對象中所定義的遠端檔案是可被排程的,這意味着你能夠像管理 Pod 一樣管理遠端檔案緩存到 Kubernetes 叢集上的位置。執行計算的 Pod 可以通過 Fuse 用戶端通路資料檔案。在先前版本的 Fluid 中,Fuse 用戶端總是會排程到緩存所在的節點上,但是使用者不能自由控制 Fuse 的排程。
在 Fluid v0.5 中,我們為 Fuse 新增了 global 部署模式。在該模式下,Fuse 預設會全局部署到所有節點上。使用者也可以通過指定 Fuse 的 nodeSelector 來影響 Fuse 的排程結果。同時,緩存會優先排程部署在執行計算 Pod 數量較多的節點上。
具體使用非常簡單,可以參考 Github 上的
2. 支援 HDFS 的使用者級配置
很多社群使用者使用分布式緩存系統
Alluxio作為 Fluid 資料集的緩存引擎。在資料集持久化存儲于 HDFS 檔案系統的情況下,要使得 Alluxio 能夠正常通路底層 HDFS,Alluxio 叢集需要提前擷取該 HDFS 的各類配置資訊。
在 Fluid v0.5 中,我們使用 Kubernetes 的原生資源為上述場景提供支援。使用者首先需要将 HDFS 的相關配置檔案(e.g.
hdfs-site.xml
和
core-site.xml
)以
ConfigMap
方式建立到 Kubernetes 環境中,接着在建立的
AlluxioRuntime
資源對象中引用上述建立的
ConfigMap
進而實作上述功能。
AlluxioRuntime
資源對象的一個示例如下所示:
apiVersion: data.fluid.io/v1alpha1
kind: AlluxioRuntime
metadata:
name: my-hdfs
spec:
...
hadoopConfig: <configmap-name>
...
至此,建立出的 Alluxio 叢集将能夠正常地通路 HDFS 叢集中的資料。更多内容可參考 Github 上的
新增資料緩存引擎實作
Fluid 預設使用的分布式緩存 Runtime 是 AlluxioRuntime,為了支援不同環境使用者對緩存系統的需求,在之前的版本中 Fluid 已經将分布式緩存 Runtime 接入架構做成了可插拔的架構。在 Fluid v0.5 中,來自阿裡雲的社群貢獻者基于該架構開發了 JindoRuntime,新增了一種支撐 Fluid Dataset 資料管理和緩存的執行引擎實作。使用者可以在 Fluid 中通過 JindoRuntime 使用 JindoFS 的 Cache 模式進行遠端檔案的通路和緩存。在 Fluid 上使用和部署 JindoRuntime 流程簡單、相容原生 K8s 環境、開箱即用。
總結
在 Fluid v0.5 中,我們對 Fluid 的功能特性與使用者體驗都進行了豐富和增強。
首先,Fluid v0.5 進一步增加了資料集的功能操作:
- 提供資料集線上彈性擴縮容能力,實作更靈活、更精細的叢集資源配置設定控制。
- 新增 DataBackup CRD,實作了資料集檔案中繼資料等資訊的備份與恢複,幫助完成資料集緩存系統的快速重新開機。
- 新增緩存命中率名額,幫助使用者更好量化分析 Fluid 提供的加速效果。
其次,Fluid 支援更多環境模式和配置,滿足更多真實場景的部署需求。
最後,Fluid 新增了基于 JindoFS 的分布式緩存 Runtime —— JindoRuntime,為使用者在多樣化部署環境中提供不同的緩存引擎選擇。
我們會繼續廣泛關注和采納社群建議,推動 Fluid 項目的長期發展,期待聽到大家更多的回報。如果您有任何疑問或建議,歡迎加入 Fluid 使用者群參與交流或在 Github 上與我們讨論:
鳴謝
感謝為此版本做出貢獻的社群小夥伴們,他們包括來自阿裡雲的王濤、騰訊雲的謝遠東、中國電信的仇伶玮、南京大學 PASALab 的徐之浩、候浩軍、陳國旺、陳雨铨等同學。
作者簡介
顧榮 博士,南京大學計算機系副研究員,Fluid 開源項目 co-founder、Alluxio 開源項目 PMC 成員,研究方向大資料處理系統,已在 TPDS、ICDE、JPDC、IPDPS、ICPP 等領域前沿期刊會議發表論文30餘篇,主持國家自然科學基金面上項目/青年項目、中國博士後科學基金特别資助項目多項,研究成果落地應用于阿裡巴巴、百度、位元組跳動、中國石化、華泰證券等公司和開源項目 Apache Spark、Alluxio,獲 2018 年度江蘇省科學技術一等獎、2019 年度江蘇省計算機學會青年科技獎,擔任中國計算機學會系統軟體專委會委員/大資料專委會通訊委員、江蘇省計算機學會大資料專委會秘書長。