JuiceFS V1.0 RC1 釋出,大幅優化 dump/load 命令效能, 深度使用者不容錯過

JuiceFS發表於2022-06-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 rmrjuicefs warmup 命令的進度條,並允許中斷操作。

注意:使用 v1.0 RC1 的 JuiceFS 客戶端操作 v1.0 RC1 之前的掛載點時,會顯示一直沒有進度,但實際命令能夠正常執行。

其它調整

  1. 大幅提升 SQL 後設資料引擎的穩定性。我們在對 JuiceFS S3 閘道器進行壓力測試的過程中發現了 SQL 後設資料引擎在高負載下的一些問題,其中包括所使用的 ORM 框架的幾個 bug,都進行了修復並反饋給上游。
  2. 限制了單次清理回收站和檔案快取的數量,提高了在大規模應用下的穩定性。
  3. 支援在容器內使用 juicefs warmup 命令
  4. 提升 juicefs rmr 命令的效能並減低記憶體使用
  5. juicefs sync 命令也進行了增強,改進了使用免密登入 SSH 拷貝資料的情況,修復了幾個 bug。
  6. 支援通過 juicefs config 命令動態修改資料儲存的 Access Key 和 Secret Key
  7. 大量的錯誤日誌描述優化

支援通過 juicefs config 命令動態修改資料儲存的 Access Key 和 Secret Key

Bug 修復

  • 修復了 juicefs sync 讀取源端檔案失敗時未列印錯誤日誌的問題
  • 修復了只讀客戶端無法執行 warmup 的問題
  • 修復了大量刪除檔案時因 0 號 Slice 導致事務頻繁衝突的問題
  • 修復了 SQL 類資料庫作後設資料引擎時,操作事務性未完全保證的問題
  • 修復了使用 TiKV 作後設資料引擎時,可能因空連線導致 JuiceFS 客戶端 panic 的問題
  • 修復了 List 後設資料備份失敗時,可能導致 JuiceFS 客戶端 panic 的問題

升級建議

  • 使用 SQL 類資料庫作後設資料引擎的檔案系統:請務必升級
  • 使用其它後設資料引擎的檔案系統:建議升級

相關文章