作者 | 顧榮 南京大學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 相結合
該特性能夠支持數據集的可用性和性能指標收集,並且通過 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 年度江蘇省計算機學會青年科技獎,擔任中國計算機學會系統軟件專委會委員/大數據專委會通訊委員、江蘇省計算機學會大數據專委會祕書長。