開發與維運

Fluid 0.6 版本發佈:數據感知的Pod調度與數據集自動彈性擴縮容

作者 | 顧榮  Fluid開源社區主席  南京大學PASALab


Fluid 是 CNCF 基金會旗下雲原生環境中數據密集型應用的高效支撐平臺,由南京大學、阿里云云原生團隊以及 Alluxio 開源社區聯合發起。項目自開源發佈以來吸引了眾多相關方向領域專家和工程師的關注,在大家的積極反饋下社區不斷演進。近期 Fluid 0.6 版本正式發佈,在該版本中,Fluid 主要新增改善以下三個方面內容:


  • 數據感知的Pod調度,支持數據與應用協同調度,加強生態融合, 適配更多開源調度器。
  • 豐富數據集操作功能,支持數據集自動彈性擴縮容、掛載點動態更新。
  • 緩存引擎新增與增強,支持緩存引擎高可用並新增公有云緩存引擎。

Fluid 開源項目地址:https://github.com/fluid-cloudnative/fluid

Fluid 項目全新官網:https://fluid-cloudnative.github.io/


這三大主要功能的開發需求來自眾多社區用戶的實際生產反饋,此外 Fluid v0.6 還進行了一些 bug 修復和文檔更新,歡迎使用體驗 Fluid v0.6!

Fluid v0.6 下載鏈接:https://github.com/fluid-cloudnative/fluid/releases


下文是本次新版本發佈功能的進一步介紹。


數據感知到 Pod 調度優化

Fluid 一直致力於利用雲原生資源調度能力滿足雲上數據密集應用高效運行的需求。在上個版本 Fluid v0.5 中,我們已經針對數據集編排缺乏架構感知的問題,在數據集編排調度方面進行了一系列優化。在 Fluid v0.6 中,我們進一步針對容器編排缺乏數據感知的問題,設計實現了對 Pod 調度的優化。


我們目前考慮到的優化場景問題包括:


  • 使用非 K8s 原生調度器時,不能與 Fluid 很好的兼容
  • 使用數據集的 Pod 調度時,缺少考慮緩存分佈考慮
  • 不使用數據集的 Pod,可能調度到有緩存的節點,影響其它 Pod 使用緩存

我們根據數據集緩存位置信息制定 Pod 調度策略,通過 webhook 機制將生成的調度信息注入到 Pod,最終實現了以下功能:


  • 在默認 Fuse 模式(Fuse 和緩存引擎同節點部署)下,支持 K8s 原生調度器,以及 Volcano,Yunikorn 等第三方調度器,實現 Pod 數據親和性調度
  • 在全局 Fuse 模式下,將 Pod 優先調度到有數據緩存能力的節點
  • 當 Pod 不使用數據集時,儘量避免將 Pod 調度到有緩存的節點

關於 Pod 調度優化功能的開啟與配置方式,請參考 Github 上的示例文檔


豐富數據集操作功能

1. 數據集在線彈性緩存擴縮容


Fluid v0.5 開啟了在線彈性擴縮容之路,當時提供了在線手動擴縮容的能力。然而,在真實的生產環境中,手工操作擴縮具有較大的複雜度和延遲性。自動彈性伸縮是 Kubernetes 的核心能力之一,此前一直是圍繞這無狀態的應用負載展開。現在,有狀態的數據密集型應用也可以利用 Fluid 提供的分佈式緩存的彈性伸縮能力,從而實現靈活擴充和收縮數據緩存。Fluid 基於 Runtime 提供了緩存空間、現有緩存比例等性能指標, 結合自身對於 Runtime 資源的擴縮容能力,從而達到數據緩存按需伸縮能力。


進一步,我們發現根據數據緩存量比例觸發自動的數據緩存能力彈性擴縮容具有非常多的優勢,但也有一個缺陷,就是需要根據資源壓力計算出合理的值後調整,這就存在一定的程度滯後性。因此 Fluid v0.6 通過結合 CronHPA 提供了定時擴縮容的能力,從而根據應用自身使用數據的時間特點,實現數據緩存的按時擴縮容,充分利用了集群計算和存儲資源加速應用的數據訪問性能。當前,使用自動擴容+定時縮容可以最大化的使 Fluid 平臺在 K8s 集群內變成一種可控的彈性緩存資源。目前,Fluid 的 Alluxio Runtime 在這方面提供了完整的支持。


2. 數據集掛載點動態更新功能

在 Fluid 的每個數據集中,都聲明瞭若干掛載點(mountPoint)。例如,如下名為 test 的數據集中,聲明瞭 hbase 和 spark 兩個掛載點:


apiVersion: data.fluid.io/v1alpha1kind: Datasetmetadata:name: testspec:mounts:    - mountPoint: https://mirrors.tuna.tsinghua.edu.cn/apache/hbase/stable/       name: hbase- mountPoint: https://mirrors.tuna.tsinghua.edu.cn/apache/spark/       name: spark

之前的版本中,只有數據集創建時,才會把數據集中聲明的那些掛載點掛載到虛擬文件系統中。一旦數據集創建完成,即使再修改掛載點也不會生效,若要修改則只能刪除重建,這在實際使用中具有很多不便。在 Fluid v0.6中,我們新增了數據集掛載點動態增減功能。一旦修改數據集的掛載點,數據集將暫時進入 Updating 狀態。直到掛載/卸載完成,數據集才會重新回到 Bound 狀態。


緩存引擎新增與增強

1. 新增數據緩存引擎實現


Fluid 默認使用的分佈式緩存 Runtime 是 AlluxioRuntime,為了滿足不同環境用戶對緩存系統的需求,在之前的版本中 Fluid 已經將分佈式緩存 Runtime 接入框架設計成了可插拔的架構。在 Fluid v0.6中,來自騰訊雲的社區貢獻者基於該框架開發了 GooseFSRuntime,新增了一種支撐 Fluid Dataset 數據管理和緩存的執行引擎實現。


2. 數據緩存引擎高可用運行時

Fluid 目前支持的緩存引擎 Alluxio、JindoFS、GooseFS 均為分佈式文件系統,Alluxio、GooseFS 、JindoFS Cache 模式均為 Master-Worker 架構。在分佈式文件系統中,高可用性包含兩個方面:一是整個文件系統的可用性,二是數據的完整和一致性。Master 作為全局元數據管理組件,通過 Master High-Availability 保證文件系統的高可用;通過 Raft 算法實現選主、狀態機同步等操作保證日誌和元數據的完整和一致性。在 Fluid v0.6中,來自騰訊雲的社區貢獻者設計實現高可用運行時功能,用戶只需要指定期望 master 個數,如果個數為大於1的奇數,將自動使用高可用模式。

總結


Fluid v0.6 主要解決和滿足社區用戶在實際生產環境中反饋的問題和需求。在調度方面,支持數據感知的Pod調度,從而滿足多場景數據與應用協同調度的需求。在數據集操作方面,進一步豐富了相關功能,支持數據集自動彈性擴縮容、掛載點動態更新。在緩存引擎方面,進行新增緩存引擎新增並增強功能,支持了緩存引擎高可用並新增公有云緩存引擎。 


瞭解更多:

https://fluid-cloudnative.github.io/image.gif 

鳴謝


Fluid v0.6的開發得到了諸多單位的貢獻,這裡列出本版本提供的幾個重要功能的開發者的名字,感謝他們的付出貢獻!


● 楊麗(北京奇虎科技有限公司)數據集掛載點動態更新功能;

● 仇伶瑋(中國電信)數據緩存感知的Pod調度優化;

● 謝遠東(騰訊雲)緩存引擎高可用性、GooseFSRuntime支持;


作者簡介

顧榮 博士,南京大學計算機系副研究員,Fluid 開源社區主席、Alluxio 開源項目 PMC 成員,研究方向大數據處理系統,已在 TPDS、ICDE、JPDC、IPDPS、ICPP 等領域前沿期刊會議發表論文30餘篇,主持國家自然科學基金面上項目/青年項目、中國博士後科學基金特別資助項目多項,研究成果落地應用於阿里巴巴、百度、字節跳動、中國石化、華泰證券等公司和開源項目 Apache Spark、Alluxio,獲 2018 年度江蘇省科學技術一等獎、2019 年度江蘇省計算機學會青年科技獎、騰訊雲最具價值專家獎項,擔任中國計算機學會系統軟件專委會委員/大數據專委會通訊委員、江蘇省計算機學會大數據專委會祕書長。

Leave a Reply

Your email address will not be published. Required fields are marked *