開源云原生分布式文件系統(tǒng) - JuiceFS
大家最耳熟能詳?shù)姆植际轿募到y(tǒng)當屬 HDFS,它的全稱是 ??Hadoop Distributed File System?
?,在 Hadoop 技術(shù)棧盛行時大放異彩。隨著云計算的發(fā)展成熟,數(shù)據(jù)上云成為趨勢,但由于對象存儲和文件存儲的結(jié)構(gòu)不同,在云上要進行大數(shù)據(jù)存儲時會遇到很多問題:查詢性能慢、數(shù)據(jù)不能保證一致性。
今天要為大家介紹的就是一款為云環(huán)境設(shè)計的文件系統(tǒng),JuiceFS 是一款云原生高性能分布式文件系統(tǒng), 采用的是插件化的架構(gòu),「數(shù)據(jù)」與「元數(shù)據(jù)」分離,用戶可按照場景需求選擇適用的元數(shù)據(jù)以及數(shù)據(jù)引擎。使用 JuiceFS 存儲數(shù)據(jù),數(shù)據(jù)本身會被持久化在對象存儲(例如,Amazon S3),相對應(yīng)的元數(shù)據(jù)可以按需存儲在 Redis、MySQL、TiKV、SQLite 等多種數(shù)據(jù)庫中。
JuiceFS 于 2021 年 1 月在 GitHub 上開源,1年半時間已經(jīng)獲得 6.5 K Star,是基礎(chǔ)領(lǐng)域備受關(guān)注的項目; JuiceFS 采用的是 Aache 2.0 許可證,意味著 用戶可以更放心地將 JuiceFS 應(yīng)用于各種商業(yè)環(huán)境,與自己的應(yīng)用集成。在 AI 組件 Fluid 和 PaddlePaddle 中都可以看到 JuiceFS 的身影。
特性
- POSIX 兼容:像本地文件系統(tǒng)一樣使用,無縫對接已有應(yīng)用,無業(yè)務(wù)侵入性。
- HDFS 兼容:完整兼容HDFS API[1],提供更強的元數(shù)據(jù)性能。
- S3 兼容:提供S3 網(wǎng)關(guān)[2]實現(xiàn) S3 協(xié)議兼容的訪問接口。
- 云原生:通過CSI Driver[3]輕松地在 Kubernetes 中使用 JuiceFS。
- 分布式設(shè)計:同一文件系統(tǒng)可在上千臺服務(wù)器同時掛載,高性能并發(fā)讀寫,共享數(shù)據(jù)。
- 強一致性:確認的文件修改會在所有服務(wù)器上立即可見,保證強一致性。
- 強悍性能:毫秒級延遲,近乎無限的吞吐量(取決于對象存儲規(guī)模),查看性能測試結(jié)果[4]。
- 數(shù)據(jù)安全:支持傳輸中加密(encryption in transit)和靜態(tài)加密(encryption at rest),查看詳情[5]。
- 文件鎖:支持 BSD 鎖(flock)和 POSIX 鎖(fcntl);數(shù)據(jù)壓縮:支持 LZ4 和 Zstandard 壓縮算法,節(jié)省存儲空間。
快速上手
安裝 JuiceFS 非常簡單,你需要準備好元數(shù)據(jù)存儲引擎(比如 Redis, MySQL),以及對象存儲,最后下載 JuiceFS 客戶端執(zhí)行一行命令,就能立刻開始使用了。
你可以在 GitHub 項目頁面找到 JuiceFS 最新版客戶端下載地址,選擇你所在平臺的預(yù)編譯版本,下載安裝到 /usr/local/bin/juicefs。
當在終端輸入并執(zhí)行 juicefs 并返回了程序的幫助信息,就說明你成功安裝了 JuiceFS 客戶端。
創(chuàng)建文件系統(tǒng)
創(chuàng)建文件系統(tǒng)使用客戶端提供的 format 命令,一般格式為:
juicefs format [command options] META-URL NAME
可見,格式化文件系統(tǒng)需要提供 3 種信息:
- ?[command options]:設(shè)定文件系統(tǒng)的存儲介質(zhì),留空則默認使用本地磁盤作為存儲介質(zhì),路徑為$HOME/.juicefs/local,/var/jfs? 或C:/jfs/local。
- META-URL:用來設(shè)置元數(shù)據(jù)存儲,即數(shù)據(jù)庫相關(guān)的信息,通常是數(shù)據(jù)庫的 URL 或文件路徑。
- NAME:是文件系統(tǒng)的名稱。
掛載文件系統(tǒng)
掛載文件系統(tǒng)使用客戶端提供的 mount 命令,一般格式為:
juicefs mount [command options] META-URL MOUNTPOINT
與創(chuàng)建文件系統(tǒng)的命令類似,掛載文件系統(tǒng)需要提供以下信息:**[command options]**:用來指定文件系統(tǒng)相關(guān)的選項,例如:-d 可以實現(xiàn)后臺掛載;META-URL:用來設(shè)置元數(shù)據(jù)存儲。即數(shù)據(jù)庫相關(guān)的信息,通常是數(shù)據(jù)庫的 URL 或文件路徑;MOUNTPOINT:指定文件系統(tǒng)的掛載點。例如,以下命令將 myjfs 文件系統(tǒng)掛載到 ~/jfs 文件夾:
juicefs mount sqlite3://myjfs.db ~/jfs
當你獲得以下反饋即為掛載成功了??!
驗證文件系統(tǒng)
當掛載好文件系統(tǒng)以后可以通過 juicefs bench 命令對文件系統(tǒng)進行基礎(chǔ)的性能測試和功能驗證,確保 JuiceFS 文件系統(tǒng)能夠正常訪問且性能符合預(yù)期。
juicefs bench ~/jfs
運行 juicefs bench 命令以后會根據(jù)指定的并發(fā)度(默認為 1)往 JuiceFS 文件系統(tǒng)中寫入及讀取 N 個大文件(默認為 1)及 N 個小文件(默認為 100),并統(tǒng)計讀寫的吞吐和單次操作的延遲,以及訪問元數(shù)據(jù)引擎的延遲。
驗證成功之后,歡迎大展身手,探索更多玩法~
?項目地址:https://github.com/juicedata/juicefs。?
參考資料
[1]HDFS API: https://juicefs.com/docs/zh/community/hadoop_java_sdk。
[2]S3 網(wǎng)關(guān): https://juicefs.com/docs/zh/community/s3_gateway。
[3]CSI Driver: https://juicefs.com/docs/zh/community/how_to_use_on_kubernetes/。
[4]性能測試結(jié)果: https://juicefs.com/docs/zh/community/benchmark/。
[5]查看詳情: https://juicefs.com/docs/zh/community/security/encrypt。