JuiceFS V1.0 RC1 發布,大幅優化 dump/load 命令性能, 深度用戶不容錯過
- 2022 年 6 月 16 日
- 筆記
各位社區的夥伴,
JuiceFS v1.0 RC1 今天正式發布了!這個版本中,最值得關注的是對元數據遷移備份工具 dump/load 的優化。
這個優化需求來自於某個社區重度用戶,這個用戶在將億級數量文件的元數據從 Redis 遷移至 TiKV 時遇到了記憶體佔用過高的問題,我們接到回饋後著手優化,最終使 dump 所需記憶體降低 95%,load 所需記憶體降低 80%。
下面,我們來為你詳細解讀一下 JuiceFS v1.0 RC1 的主要變化。
元數據遷移備份工具 dump/load 命令的優化
現有的 dump 命令實現中,會先將元數據引擎中的所有數據載入到客戶端記憶體,形成一個類似只讀快照的版本,再按照文件系統樹型結構輸出到指定文件。得益於 Redis 本身的高速隨機讀性能,v1.0 RC1 優化了 Redis 作為元數據引擎時的 dump 流程,不再做整個快照,而是一邊預讀一邊輸出,使其所需記憶體節省 95%,速度提升 100%。從 SQL 和 TiKV 備份元數據時,會使用單個事務來讀數據以確保整個文件系統的一致性。
現有的 load 命令實現中,會先載入整個元數據集合,再並發導入到元數據引擎中。v1.0 RC1 對所有元數據引擎都做了優化,實現了流式載入功能,同樣將其所需記憶體節省 80%,速度提高 25%。
以 Redis 元數據引擎 Dump & Load 一千萬文件為例子,v1.0 Beta3 與 v1.0 RC1 的性能對比如下:


很多用戶是一開始使用 Redis 作為元數據引擎,隨著數據規模的增長,可能需要遷移到 TiKV 或者 SQL 引擎,這些優化可以保證用戶在有上億文件時仍然能夠高效地完成元數據引擎的遷移。
後續我們也會詳細解析此次 dump/load 命令優化的技術細節,敬請期待。
新增對象存儲測試工具 objbench
對象存儲是 JuiceFS 的底座,當用戶在使用 JuiceFS 遇到問題時經常不確定是 JuiceFS 的問題還是對象存儲的問題,所以我們在 v1.0 RC1 中新增 objbench 命令來幫助用戶驗證某個對象存儲是否被 JuiceFS 支援以及測試與其共同使用時的性能表現。具體請參考JuiceFS Objbench 文檔

新支援對接持續性能分析平台 Pyroscope
受 Go 圈技術大牛「鳥窩」的一篇可觀測性實踐部落格的啟發,我們想到了在 JuiceFS 中對接持續性能分析工具,一改 JuiceFS 過去只能通過 pprof 這個分析工具肉眼排查的窘境。於是在這個版本中,我們對接了 Pyroscope(一個開源的持續性能分析平台),通過這個工具,可以記錄分析 JuiceFS 的運行狀態,例如某段時間內 JuiceFS 程式碼中函數的 CPU 耗時、對象分配大小等細節數據。請參考使用 Pyroscope 文檔了解如何在 JuiceFS 中使用 Pyroscope。

其它新增
新支援 SQL 資料庫、etcd 做數據存儲,具體請參考JuiceFS 設置對象存儲文檔。
新支援 juicefs info 命令中根據文件 inode 找到其完整路徑
注意:查找在 v1.0 RC1 之前創建的文件時,可能出現路徑查找不到或者路徑不全的情況。
新增 juicefs rmr 和 juicefs warmup 命令的進度條,並允許中斷操作。
注意:使用 v1.0 RC1 的 JuiceFS 客戶端操作 v1.0 RC1 之前的掛載點時,會顯示一直沒有進度,但實際命令能夠正常執行。
其它調整
- 大幅提升 SQL 元數據引擎的穩定性。我們在對 JuiceFS S3 網關進行壓力測試的過程中發現了 SQL 元數據引擎在高負載下的一些問題,其中包括所使用的 ORM 框架的幾個 bug,都進行了修復並回饋給上游。
- 限制了單次清理回收站和文件快取的數量,提高了在大規模應用下的穩定性。
- 支援在容器內使用
juicefs warmup命令 - 提升
juicefs rmr命令的性能並減低記憶體使用 juicefs sync命令也進行了增強,改進了使用免密登錄 SSH 拷貝數據的情況,修復了幾個 bug。- 支援通過
juicefs config命令動態修改數據存儲的 Access Key 和 Secret Key - 大量的錯誤日誌描述優化
支援通過 juicefs config 命令動態修改數據存儲的 Access Key 和 Secret Key
Bug 修復
- 修復了
juicefs sync讀取源端文件失敗時未列印錯誤日誌的問題 - 修復了只讀客戶端無法執行
warmup的問題 - 修復了大量刪除文件時因 0 號 Slice 導致事務頻繁衝突的問題
- 修復了 SQL 類資料庫作元數據引擎時,操作事務性未完全保證的問題
- 修復了使用 TiKV 作元數據引擎時,可能因空連接導致 JuiceFS 客戶端 panic 的問題
- 修復了 List 元數據備份失敗時,可能導致 JuiceFS 客戶端 panic 的問題
升級建議
- 使用 SQL 類資料庫作元數據引擎的文件系統:請務必升級
- 使用其它元數據引擎的文件系統:建議升級

