Dragonfly v2.4.0 現已發佈,具體更新內容包括:
新增特性
負載感知調度算法
調度算法升級為一種兩階段調度算法,結合中央調度與節點級二次調度,基於實時負載感知來優化 P2P 下載性能。
Vortex 協議支持 P2P 文件傳輸
Dragonfly 提供了基於 TLV 的新型 Vortex 傳輸協議,以提升 P2P 下載性能。使用 TLV(Tag-Length-Value)格式作為輕量級協議,替代 gRPC 進行節點間的數據傳輸。
與 gRPC 相比,基於 TCP 的 Vortex 可將大文件下載時間減少 50%,基於 QUIC 的 Vortex 可減少 40%,兩者都能有效降低峯值內存使用。
Request SDK
新增 SDK 用於將用户請求路由到 Seed Peer,使用一致性哈希算法,取代之前的 Kubernetes Service 負載均衡方式。
指定集羣 ID 實現多集羣 Kubernetes 簡化部署
Dragonfly 支持一種簡化功能,用於部署和管理多個 Kubernetes 集羣,方法是為每個集羣顯式分配一個 schedulerClusterID。
這種方式允許用户直接控制集羣親和性,而無需依賴基於位置的調度元數據,例如 IDC、主機名或 IP 地址。
使用此功能,每個 Peer、Seed Peer 和 Scheduler 都通過明確定義的 Scheduler Cluster ID 來確定其目標調度器集羣。
這確保了集羣之間的精確隔離以及可預測的跨集羣行為。
Manager 和 Scheduler 組件的性能和資源優化
增強了 Manager 和 Scheduler 組件的性能和資源利用率,同時顯著降低了 CPU 和內存開銷,提升了系統效率和資源管理能力。
增強預熱功能
- 支持預熱到指定節點:採用基於優先級的選擇邏輯,其中 IP 指定具有最高優先級,其次是基於數量的選擇,最後是基於百分比的選擇。
- 支持在單個預熱任務中預熱多個 URL。
- 支持通過 Scheduler gRPC 接口預熱文件和鏡像。
基於鏡像 Blob SHA256 計算 ID 以避免重複下載
客户端現已支持直接根據鏡像 Blob 的 SHA256 哈希值計算任務 ID,而不再使用下載 URL。此增強功能可以防止當同一 Blob 從不同鏡像倉庫域名訪問時產生的重複下載和數據冗餘問題,新版本默認啓用此功能。
緩存 HTTP 307 重定向 URL
新增對 HTTP 307(臨時重定向)響應 URL 的緩存支持,以優化 Dragonfly 的多分片下載性能。當下載 URL 被拆分為多個分片時,重定向目標地址現在會被緩存,從而消除冗餘的重定向請求並降低延遲。
Go 客户端已棄用,並由 Rust 客户端取代
Go 客户端已被棄用,並由 Rust 客户端[7] 取代。未來所有的開發和維護工作將專注於 Rust 客户端,它提供了更好的性能、穩定性和可靠性。
附加功能增強
- 在 Rust 客户端中啓用 ARM64 架構的 64K 頁面大小支持。
- 修復 dfget 版本輸出中缺失的 git commit 元數據問題。
- 支持 containerd V3 配置中
io.containerd.cri.v1.images插件的config_path配置。 - 在
reqwest中使用hickory-dns替換glibc DNS解析器,以實現 DNS 緩存並防止分片下載過程中過多的 DNS 查詢。 - 支持
--include-files配置參數,可選擇性地從目錄中下載文件。 - 添加
--no-progress配置參數,可禁用下載進度條輸出。 - 支持
backend操作中的自定義請求頭,為 HTTP 請求提供靈活的請求頭配置。 - 重構日誌輸出,減少冗餘日誌記錄並提高日誌可讀性。
重要修復
- 將數據庫字段類型從
text修改為longtext,以支持存儲預熱任務的信息。 - 修復了 Scheduler 關閉期間重複停止 Seed Peer 服務時導致的 panic 問題。
- 修復了在指定 Redis 密碼但未設置用户名時,Broker 認證失敗的問題。
Nydus
新增特性
- Nydusd:為 RAFS V5 和 V6 格式添加運行時 CRC32 校驗支持,增強數據完整性驗證。
- Nydusd:支持在 Nydusd 恢復過程中重新發送 FUSE 請求,提高進程恢復的可靠性。
- Nydusd:增強 VFS 狀態保存機制,用於進程熱升級和故障轉移。
- Nydusify:支持 Nydus 到 OCI 的反向轉換能力(實驗性功能),支持無縫遷移回 OCI 格式。
- Nydusify:實現鏡像拷貝時零磁盤傳輸,顯著減少複製操作期間對本地磁盤的使用。
- Snapshotter:將
blob.meta打包到 Bootstrap 中,提高 RAFS V6 鏡像的 Blob 下載時的可靠性
重要修復
- Nydusd:修復鏡像倉庫認證中
access_token字段的認證令牌獲取問題。 - Nydusd:為 umount API 添加了遞歸的 inode/dentry 失效處理。
- Nydus Image:修復 optimize 子命令中的多個問題,並添加後端配置支持。
- Snapshotter:為代理模式實現延遲父快照恢復,修復父快照缺失問題。