Lustre 與 JuiceFS :架構(gòu)設(shè)計(jì)、文件分布與特性比較

在 AI 模型訓(xùn)練、高性能計(jì)算等對 I/O 敏感的場景中,底層文件系統(tǒng)的架構(gòu)和性能將直接影響訓(xùn)練效率、資源利用率與整體成本。

Lustre 作為傳統(tǒng)高性能文件系統(tǒng),以極致性能著稱;而 JuiceFS 則以云原生設(shè)計(jì)和對象存儲集成為核心,提供更高的部署靈活性與經(jīng)濟(jì)性。為了幫助用戶深入理解這兩類系統(tǒng)在架構(gòu)實(shí)現(xiàn)、性能優(yōu)化和運(yùn)維復(fù)雜度上的差異,我們撰寫了這篇對比文章,供技術(shù)選型時(shí)參考。

01 架構(gòu)對比

Lustre

Lustre 是一款專為高性能計(jì)算(HPC)環(huán)境設(shè)計(jì)的并行分布式文件系統(tǒng),最初在美國政府資助下,由多個(gè)國家實(shí)驗(yàn)室聯(lián)合開發(fā),旨在支持大規(guī)模科學(xué)研究和工程計(jì)算任務(wù)。當(dāng)前,Lustre 的主要開發(fā)與維護(hù)由 DDN(DataDirect Networks) 負(fù)責(zé),廣泛應(yīng)用于超算中心、科研機(jī)構(gòu)及企業(yè)級 HPC 集群中。Lustre 文件系統(tǒng)由以下幾個(gè)核心模塊組成:

  • 元數(shù)據(jù)服務(wù)器(Metadata Servers,MDS):負(fù)責(zé)處理命名空間相關(guān)操作,如文件創(chuàng)建、刪除、權(quán)限檢查等。
  • 對象存儲服務(wù)器(Object Storage Servers,OSS):負(fù)責(zé)實(shí)際的數(shù)據(jù)讀寫,提供高性能的大規(guī)模 I/O 服務(wù)。
  • 管理服務(wù)器(Management Server,MGS):作為全局配置注冊中心,負(fù)責(zé)存儲和分發(fā) Lustre 文件系統(tǒng)的配置信息。MGS 在功能上獨(dú)立于具體的 Lustre 實(shí)例。
  • 客戶端(Client):為用戶應(yīng)用程序提供訪問 Lustre 文件系統(tǒng)的接口,實(shí)現(xiàn)標(biāo)準(zhǔn)的 POSIX 文件操作語義。

各組件通過 Lustre 專用的網(wǎng)絡(luò)協(xié)議 LNet 連接,構(gòu)成一個(gè)統(tǒng)一高效的文件系統(tǒng)整體。

JuiceFS

JuiceFS 是一個(gè)云原生分布式文件系統(tǒng),其數(shù)據(jù)存儲在對象存儲中。社區(qū)版可與多種元數(shù)據(jù)服務(wù)集成,適用場景廣泛,于 2021 年在 GitHub 開源(11.6K star)。企業(yè)版專為高性能場景設(shè)計(jì),廣泛應(yīng)用于大規(guī)模 AI 任務(wù),涵蓋生成式 AI、自動駕駛、量化金融和生物科技等。

JuiceFS 文件系統(tǒng)包括三部分組成:

  • 元數(shù)據(jù)引擎:用于存儲文件元數(shù)據(jù),包括常規(guī)文件系統(tǒng)的元數(shù)據(jù)和文件數(shù)據(jù)的索引。
  • 數(shù)據(jù)存儲:一般是對象存儲服務(wù),可以是公有云的對象存儲也可以是私有部署的對象存儲服務(wù)。
  • 客戶端:提供 POSIX(FUSE)、Hadoop SDK、CSI Driver、S3 網(wǎng)關(guān)等不同的接入方式。

架構(gòu)差異

可以看出,Lustre 和 JuiceFS 在模塊組成及功能劃分上較為相似,但在具體實(shí)現(xiàn)上存在較大差異。

客戶端

Lustre 采用 C 語言實(shí)現(xiàn),其客戶端模塊運(yùn)行在內(nèi)核態(tài);而 JuiceFS 使用 Go 語言開發(fā),客戶端通過 FUSE(Filesystem in Userspace)暴露文件系統(tǒng)接口,運(yùn)行在用戶態(tài)。由于 Lustre 客戶端運(yùn)行于內(nèi)核空間,訪問元數(shù)據(jù)服務(wù)器(MDS)或?qū)ο蟠鎯Ψ?wù)器(OSS)時(shí)無需進(jìn)行用戶態(tài)與內(nèi)核態(tài)的上下文切換或額外的內(nèi)存拷貝,從而顯著減少了系統(tǒng)調(diào)用所帶來的性能開銷,在吞吐和延遲方面具備一定優(yōu)勢。

然而,內(nèi)核態(tài)實(shí)現(xiàn)也帶來了運(yùn)維和調(diào)試的復(fù)雜性。相比用戶態(tài)的開發(fā)環(huán)境和調(diào)試工具,內(nèi)核態(tài)工具門檻更高,不易為普通開發(fā)者所掌握。同時(shí),與 C 語言相比,Go 語言更易于學(xué)習(xí)、維護(hù)和開發(fā),具備更高的開發(fā)效率和可維護(hù)性。

值得注意的是,JuiceFS 企業(yè)版 5.2 中引入零拷貝等技術(shù)優(yōu)化,以減少系統(tǒng)調(diào)用開銷,進(jìn)一步提升性能。

存儲模塊

在數(shù)據(jù)存儲方面,Lustre 和 JuiceFS 也采用了不同的實(shí)現(xiàn)方式。

Lustre 在部署時(shí)通常需要配置一塊或多塊共享磁盤來存儲文件數(shù)據(jù)。這一設(shè)計(jì)源于其早期版本尚不支持文件級冗余( File Level Redundancy,F(xiàn)LR)。為了實(shí)現(xiàn)高可用性(HA),當(dāng)某個(gè)節(jié)點(diǎn)下線時(shí),必須將其文件系統(tǒng)掛載(mount)到對等節(jié)點(diǎn)(peer node),否則該節(jié)點(diǎn)上的數(shù)據(jù)塊(Chunk)將不可訪問。因此,數(shù)據(jù)的可靠性需依賴于共享存儲本身的高可用機(jī)制,或用戶自行配置的軟件 RAID 實(shí)現(xiàn)。

為確保高可用性和數(shù)據(jù)一致性正常運(yùn)行,部署 Lustre 前通常需要進(jìn)行詳細(xì)的規(guī)劃。盡管,新版本的 Lustre 已支持 FLR,一個(gè)文件可以具有多個(gè)副本,但副本之間的數(shù)據(jù)一致性仍需通過手動命令進(jìn)行同步和確認(rèn)。此外,Lustre 支持使用 ldiskfsZFS 作為底層本地文件系統(tǒng),因此使用 Lustre 時(shí)還需了解并配置相應(yīng)的本地文件系統(tǒng)。

JuiceFS 利用對象存儲作為數(shù)據(jù)存儲解決方案,從而可享有對象存儲帶來的若干優(yōu)勢,如數(shù)據(jù)可靠性、一致性等。存儲模塊提供了一組用于對象操作的接口,包括 GET/PUT/HEAD/LIST 等,用戶可以根據(jù)自己的需求對接具體的存儲系統(tǒng),既包括主流云廠商的對象存儲,也支持如 MinIO、Ceph RADOS 等私有部署的對象存儲系統(tǒng)。社區(qū)版 JuiceFS 提供本地緩存來應(yīng)對 AI 場景下的帶寬需求,JuiceFS 企業(yè)版使用分布式緩存滿足更大的聚合讀帶寬的需求。

元數(shù)據(jù)模塊

在元數(shù)據(jù)服務(wù)方面,Lustre 和 JuiceFS 都提供統(tǒng)一的命名空間和文件元數(shù)據(jù)管理功能。為了實(shí)現(xiàn)元數(shù)據(jù)訪問負(fù)載的橫向擴(kuò)展,Lustre 自 2.4 版本起引入了 Distributed Namespace(DNE)功能,支持將單個(gè)文件系統(tǒng)的不同目錄分布在多個(gè)元數(shù)據(jù)服務(wù)器(MDS)上。

Lustre 的 MDS 高可用性依賴于軟硬件協(xié)同實(shí)現(xiàn):

  • 硬件層面:MDS 使用的磁盤需配置 RAID,以避免因單點(diǎn)磁盤故障導(dǎo)致服務(wù)不可用;磁盤也需具備共享能力,以便當(dāng)主節(jié)點(diǎn)宕機(jī)時(shí),備節(jié)點(diǎn)能接管磁盤資源。
  • 軟件層面:使用 Pacemaker 與 Corosync 構(gòu)建高可用集群,確保任一時(shí)刻僅有一個(gè) MDS 實(shí)例處于活動狀態(tài)。

JuiceFS 社區(qū)版的元數(shù)據(jù)模塊,與存儲模塊類似也提供一組操作元數(shù)據(jù)的接口,可以接入不同的元數(shù)據(jù)服務(wù),包括 Redis,TiKV ,MySQL,PostgreSQL , FoundationDB 等不同類型的數(shù)據(jù)庫。

JuiceFS 企業(yè)版使用自研高性能元數(shù)據(jù)服務(wù),可根據(jù)負(fù)載情況來平衡數(shù)據(jù)和熱點(diǎn)操作,以避免大規(guī)模訓(xùn)練中元數(shù)據(jù)服務(wù)熱點(diǎn)集中在某些節(jié)點(diǎn)的問題(比如頻繁操作臨近目錄文件的元數(shù)據(jù))。目前,企業(yè)版支持的數(shù)據(jù)規(guī)模已達(dá)到千億級別,更多技術(shù)細(xì)節(jié)請點(diǎn)擊此處閱讀。

02 文件分布對比

Lustre文件分布

Normal File Layout

Lustre 早期采用的文件分布方式被稱為 Normal File Layouts。在該模式下,文件被切分為多個(gè)數(shù)據(jù)塊(Chunk),并分別存儲在多個(gè)對象存儲目標(biāo)(Object Storage Targets,OSTs)上,其策略類似于 RAID 0。

文件分布策略主要由以下兩個(gè)參數(shù)控制:

  • Stripe Count:指定文件可以同時(shí)分布到多少個(gè) OST 上。該值越大,文件并行訪問能力越強(qiáng),但也可能帶來額外的調(diào)度和管理開銷。
  • Stripe Size:定義在切換到下一個(gè) OST 之前,每個(gè)數(shù)據(jù)塊的大小。也就是說,寫入達(dá)到設(shè)定的 Stripe Size 后,數(shù)據(jù)將被寫入下一個(gè) OST,這也決定了每個(gè) Chunk 的粒度。

通過合理配置這兩個(gè)參數(shù),用戶可以在性能與資源利用之間做出權(quán)衡,優(yōu)化文件系統(tǒng)的 I/O 行為以適配具體的應(yīng)用場景。

上圖展示了一個(gè) Stripe Count 為 3、Stripe Size 為 1?MB 的文件在多個(gè) OST 上的分布方式。每個(gè)數(shù)據(jù)塊(Stripe)采用輪詢(Round-Robin)方式依次分布到不同的 OST 上。

這種文件布局方式的主要問題在于參數(shù)配置不可變:一旦文件創(chuàng)建,Stripe Count 和 Stripe Size 就無法修改。然而,文件大小在實(shí)際使用中通常是動態(tài)變化的,用戶可以通過追加寫不斷擴(kuò)展文件。這種不靈活的布局策略在實(shí)際場景中容易引發(fā)以下問題:

  • 空間耗盡(ENOSPC):由于每個(gè)文件的 Stripe 固定分布在特定的 OST 上,當(dāng)某個(gè) OST 空間耗盡時(shí),即便其他 OST 仍有剩余空間,也會導(dǎo)致整個(gè)文件寫入失敗。
  • 磁盤使用不均衡:即使初始寫入時(shí)文件數(shù)據(jù)在 OST 之間分布均勻,隨著不同文件在不同時(shí)段被追加寫入,各個(gè) OST 的使用增長速率會出現(xiàn)差異,導(dǎo)致磁盤空間不平衡。一旦形成不均衡狀態(tài),由于文件分布不能更改,這種狀態(tài)將長期存在并持續(xù)惡化。

因此,在大規(guī)模、動態(tài)增長的數(shù)據(jù)場景中,Normal File Layouts 的靜態(tài)分布策略在靈活性和資源利用率方面存在明顯限制。

Progressive File Layouts

為了解決 Normal File Layouts 在應(yīng)對動態(tài)數(shù)據(jù)增長和資源分配方面存在的局限,Lustre 引入了一種新的文件分布機(jī)制,稱為 Progressive File Layouts(PFL)。

PFL 支持為同一個(gè)文件的不同區(qū)段定義不同的布局策略,允許根據(jù)文件大小或訪問模式的變化進(jìn)行靈活的分布控制。通過配置多個(gè)布局段(Extent),用戶可以為文件的不同范圍指定不同的 Stripe Count 和 Stripe Size,從而實(shí)現(xiàn)更加合理的資源利用和負(fù)載分擔(dān)。

這種機(jī)制具備以下優(yōu)勢:

  • 動態(tài)適應(yīng)文件增長:小文件可以使用較小的 Stripe Count 降低訪問開銷,而隨著文件變大,可以啟用更高的并發(fā)度以提升帶寬利用率。
  • 減緩磁盤不均衡問題:通過為文件的后續(xù)部分指定不同的 OST 分布策略,可以在一定程度上緩解因追加寫入導(dǎo)致的磁盤負(fù)載不均。
  • 提高空間利用率和靈活性:PFL 支持自動選擇布局段,使得布局策略可以隨文件內(nèi)容增長而自動調(diào)整,無需用戶手動干預(yù)。

相較于傳統(tǒng)布局模式,PFL 更適用于需要高性能訪問的大型文件場景。

如上圖所示,該文件采用 Progressive File Layouts(PFL)進(jìn)行分布,共分為三個(gè)布局段(Extent):

  • 第一部分:Stripe Size 為 1?MB,Stripe Count 為 1,用于優(yōu)化小文件或文件開頭部分的訪問效率;
  • 第二部分:Stripe Count 提升至 4,提高并發(fā) I/O 能力;
  • 第三部分:Stripe Size 增加至 4?MB,Stripe Count 為 16,適用于大文件高吞吐量的訪問需求。

盡管 PFL 引入了更具彈性的布局策略,但在實(shí)際運(yùn)行中,仍無法完全解決磁盤使用不均衡問題。為此,Lustre 進(jìn)一步結(jié)合 Lazy Initialization 技術(shù),以實(shí)現(xiàn)更高效的資源調(diào)度。

Lazy Initialization 是一種延遲分配機(jī)制,指的是文件在首次寫入前不分配實(shí)際的物理存儲位置。結(jié)合該機(jī)制,系統(tǒng)可在檢測到磁盤負(fù)載不均時(shí),針對尚未分配的文件區(qū)域動態(tài)指定新的分布策略,將這些數(shù)據(jù)寫入負(fù)載較輕的 OST 上。

通過 PFL + Lazy Initialization 的聯(lián)合使用,Lustre 實(shí)現(xiàn)了更具適應(yīng)性的 I/O 分布能力,顯著緩解了由于追加寫入或文件增長帶來的磁盤空間不均衡問題,同時(shí)提升了系統(tǒng)的可維護(hù)性與數(shù)據(jù)分布的靈活性。

File Level Redundancy

如前文所述,Lustre 在實(shí)現(xiàn)高可用性(HA)時(shí)的部署和運(yùn)維流程相對復(fù)雜。為簡化 HA 架構(gòu)并提升系統(tǒng)容錯(cuò)能力,社區(qū)提出了 File Level Redundancy(FLR) 機(jī)制。

FLR 允許為每個(gè)文件配置一個(gè)或多個(gè)副本(Replica),實(shí)現(xiàn)文件級別的冗余保護(hù)。在寫入操作發(fā)生時(shí),數(shù)據(jù)僅寫入其中一個(gè)副本,其余副本會被標(biāo)記為 STALE(過期)。隨后,系統(tǒng)通過一個(gè)稱為 Resync 的同步過程,將最新數(shù)據(jù)復(fù)制到所有 STALE 副本中,以確保數(shù)據(jù)一致性。

在讀取操作中,任何包含最新數(shù)據(jù)的副本都可以作為數(shù)據(jù)源,提高了讀性能的并發(fā)性和容錯(cuò)能力。

這種機(jī)制 在不依賴共享存儲或底層 RAID 的情況下,為 Lustre 提供了一種更加靈活和易于維護(hù)的數(shù)據(jù)冗余方案,適用于對高可用性有更高要求的大規(guī)模分布式環(huán)境。

JuiceFS 文件分布

JuiceFS 按照 Chunk、Slice、Block 的規(guī)則進(jìn)行數(shù)據(jù)塊管理。每個(gè) Chunk 的大小固定為 64M,主要用于優(yōu)化數(shù)據(jù)的查找和定位。實(shí)際的文件寫入操作則在 Slice 上執(zhí)行,每個(gè) Slice 代表一次連續(xù)的寫入過程,屬于特定的 Chunk,并且不會跨越 Chunk 的邊界,因此長度不超過 64M。Chunk 和 Slice 主要是邏輯上的劃分,而 Block(默認(rèn)大小為 4M)則是物理存儲的基本單位,用于在對象存儲和磁盤緩存中實(shí)現(xiàn)數(shù)據(jù)的最終存儲。更多細(xì)節(jié)可以參考官網(wǎng)介紹。

JuiceFS 中的 Slice 是在其他文件系統(tǒng)中不常見的一個(gè)結(jié)構(gòu)。主要功能是記錄文件的寫入操作,并在對象存儲中進(jìn)行持久化。對象存儲不支持原地文件修改,因此,JuiceFS 通過引入 Slice 結(jié)構(gòu)允許更新文件內(nèi)容,而無需重寫整個(gè)文件。這與 Journal File System 有些類似,其中寫入操作僅創(chuàng)建新對象,而不是覆蓋現(xiàn)有對象。修改文件時(shí),系統(tǒng)會創(chuàng)建新的 Slice,并在該 Slice 上傳完畢后更新元數(shù)據(jù),從而將文件內(nèi)容指向新的 Slice。被覆蓋的 Slice 內(nèi)容隨后通過異步壓縮過程從對象存儲中刪除,導(dǎo)致在某些時(shí)刻對象存儲的使用量會暫時(shí)超過文件系統(tǒng)實(shí)際使用量。

此外,JuiceFS 的所有 Slice 均為一次性寫入,這減少了對底層對象存儲一致性的依賴,并大大簡化了緩存系統(tǒng)的復(fù)雜度,使數(shù)據(jù)一致性更易于保證。這種設(shè)計(jì)還為實(shí)現(xiàn)文件系統(tǒng)的零拷貝語義提供了便利,支持如 copy_file_range 和 clone 等操作。

03 功能特性對比

對比項(xiàng) Lustre JuiceFS 社區(qū)版 JuiceFS 企業(yè)版
元數(shù)據(jù) 分布式元數(shù)據(jù)服務(wù) 獨(dú)立數(shù)據(jù)庫服務(wù) 自研高性能分布式元數(shù)據(jù)引擎(可橫向擴(kuò)展)
元數(shù)據(jù)冗余保護(hù) 需要存儲設(shè)備提供 取決于使用的數(shù)據(jù)庫 三副本
數(shù)據(jù)存儲 自主管理 使用對象存儲 使用對象存儲
數(shù)據(jù)冗余保護(hù) 存儲設(shè)備提供或異步復(fù)制 對象存儲提供 對象存儲提供
數(shù)據(jù)緩存 客戶端本地緩存 客戶端本地緩存 自研高性能多副本分布式緩存
數(shù)據(jù)加密 支持 支持 支持
數(shù)據(jù)壓縮 支持 支持 支持
配額管理 支持 支持 支持
網(wǎng)絡(luò)協(xié)議 支持多種網(wǎng)絡(luò)協(xié)議 TCP TCP
快照 文件系統(tǒng)級別快照 文件級別快照 文件級別快照
POSIX ACL 支持 支持 支持
POSIX 兼容性 兼容 完全兼容 完全兼容
CSI 驅(qū)動 非官方支持 支持 支持
客戶端 POSIX POSIX(FUSE)、Java SDK、S3 網(wǎng)關(guān)、Python SDK POSIX(FUSE)、Java SDK、S3 網(wǎng)關(guān)、Python SDK
多云鏡像 不支持 不支持 支持
跨云和跨區(qū)數(shù)據(jù)復(fù)制 不支持 不支持 支持
主要維護(hù)者 DDN Juicedata Juicedata
開發(fā)語言 C Go Go
開源協(xié)議 GPL 2.0 Apache License 2.0 商業(yè)軟件

04 小結(jié)

Lustre 是一款高性能并行分布式文件系統(tǒng),客戶端運(yùn)行于內(nèi)核態(tài),直接與元數(shù)據(jù)服務(wù)器(MDS)和對象存儲服務(wù)器(OSS)交互,避免了用戶態(tài)與內(nèi)核態(tài)之間的上下文切換。結(jié)合高性能存儲設(shè)備,Lustre 在高帶寬 I/O 場景下展現(xiàn)出卓越的性能。

然而,由于客戶端運(yùn)行在內(nèi)核態(tài),這使得運(yùn)維過程更具挑戰(zhàn)性,運(yùn)維團(tuán)隊(duì)需具備深入的內(nèi)核調(diào)試經(jīng)驗(yàn)和底層系統(tǒng)故障排查能力。此外,由于 Lustre 使用固定容量的存儲方案,文件分布設(shè)計(jì)相對復(fù)雜,需要精細(xì)的規(guī)劃與配置來實(shí)現(xiàn)資源的高效利用。因此,Lustre 的部署和運(yùn)維門檻較高。

JuiceFS 是一款云原生、用戶態(tài)分布式文件系統(tǒng),緊密集成對象存儲,并原生支持 Kubernetes CSI(Container Storage Interface),從而簡化了在云平臺上的部署和運(yùn)維。用戶無需深入關(guān)注底層存儲設(shè)備和復(fù)雜的存儲調(diào)度機(jī)制,即可在容器化環(huán)境中實(shí)現(xiàn)彈性擴(kuò)展、高可用數(shù)據(jù)服務(wù)。在性能方面,JuiceFS 企業(yè)版通過分布式緩存,有效降低對象存儲的訪問延遲,提升文件操作的響應(yīng)速度。

從成本角度看,Lustre 需要依賴高性能的專用存儲設(shè)備,初始投資和長期維護(hù)成本較高。對象存儲相則更加經(jīng)濟(jì),具備天然的可擴(kuò)展性以及按需付費(fèi)的靈活性。

希望這篇內(nèi)容能夠?qū)δ阌幸恍椭?,如果有其他疑問歡迎加入 JuiceFS 社區(qū)與大家共同交流。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容