Dragonfly v2.5.0 现已发布,具体更新内容包括:
新功能和增强
从 Hugging Face 和 ModelScope 直接下载仓库
Dragonfly Client 现在支持直接从 Hugging Face 和 ModelScope 下载模型仓库。用户可以运行如下命令来获取仓库:dfget hf://deepseek-ai/DeepSeek-OCR和 dfget modelscope://models/deepseek-ai/DeepSeek-OCR。Git LFS 数据会通过 Dragonfly P2P 加速下载,而其他仓库元数据会通过 Git 协议获取。

用于 Kubernetes Webhook 注入的 Dragonfly Injector
Dragonfly 提供了 dragonfly-injector,这是一个用于自动注入 P2P 能力的 Kubernetes Mutating Admission Webhook。它可以通过基于 annotation 的策略,将 Dragonfly client 二进制文件和配置、dfdaemon socket 挂载以及 CLI 工具注入到应用 Pod 中,使 Pod 能够在不重新构建容器镜像的情况下,使用 Dragonfly 下载文件。Helm Charts 现在也支持在启用 webhook injection 的情况下部署 Dragonfly。
用于下载控制的 Blocklist
Dragonfly 支持在 Manager 控制台中配置 blocklist,用于禁用特定下载。这可以作为一种紧急措施,用来缓解突发异常请求对服务造成的影响。当被阻止的下载被拦截时,gRPC 下载会返回 PermissionDenied 错误码,HTTP proxy 下载会返回 FORBIDDEN 状态。

【图片:Dragonfly Cluster Config 的截图,展示 Blocklist 配置区域。】
全面的限流
Dragonfly 在控制平面和客户端引入了更完整的限流能力。Manager 和 Scheduler gRPC servers 现在支持为 unary requests 和 streaming connections 配置请求速率限制。客户端支持 outbound bandwidth、inbound bandwidth、back-to-source bandwidth、prefetch bandwidth、upload request、download request 和 adaptive rate limiting,以更好地保护源服务,并提升系统在高负载下的稳定性。
dfctl命令行工具
Dragonfly Client 引入了 dfctl。这是一个命令行工具,用于管理客户端本地存储中的任务,包括 tasks、persistent tasks 和 persistent cache tasks。它支持列出和删除本地资源,也可以通过 Scheduler 对文件任务和镜像任务进行 preheat。
容器镜像仓库代理配置简化
dfdaemon 现在可以从 containerd registry mirror requests 附加的 ns 查询参数中推断 upstream registry。结合 proxyAllRegistries: true,用户可以使用一个 _default/hosts.toml 配置,将所有 registries 路由到 Dragonfly,而不需要维护单独的、特定于 registry 的 hosts.toml 文件和 X-Dragonfly-Registry headers。
Client 下载和传输优化
Dragonfly Client 在多个方面提升了下载效率和文件传输可靠性。parent selector 和 piece collector 现在会更紧密地协作,在调度决策之前收集足够的 parent peers,从而提升带宽利用率,同时为不稳定的 parent peers 保留 graceful fallback。文件导出和下载操作现在使用 buffered writes,并且 gRPC stream buffer sizes 和连接设置已经过调优,以获得更好的大文件传输性能。
HTTP 处理和重定向安全改进
HTTP backend 现在使用 HTTP/1.1,并改进了 stat request 处理:当响应有 Transfer-Encoding 但没有 Content-Length 时,会使用 HEAD request 重试。Dragonfly 在跟随跨源重定向时,也会移除敏感 headers,例如 Authorization 和 Cookie;同时避免缓存相对路径形式的 HTTP 307 redirect locations,但仍然会在请求处理过程中正确解析它们。
其他增强
- 在 Manager 中增加 ExternalRedis TLS 支持,包括 CA certificate、client certificate、key 和 insecureSkipVerify 选项。
- 移除已废弃的 V1 preheat API endpoints,并将健康检查统一到 /healthy endpoint。
- 改进 upload 和 download metrics collection,并移除未使用的 gRPC piece download 逻辑。
- 改进 INSTANCE_NAME 生成方式:使用 Kubernetes build-time environment variables,并在需要时 fallback 到系统 hostname。
- 增加 dfdaemon hickory_dns 选项,使 DNS resolver 行为可以配置。
- 改进 OCI registry blob downloads 的 task ID 计算,以减少跨 registries 的重复下载和存储。
重要 Bug 修复
- 修复 Redis Lua script 中 peer TTL 和 concurrent_piece_count 的参数顺序,防止非预期的 key expiration 和错误的 peer state。
- 修复在写入默认 Scheduler Cluster 和 Seed Peer Cluster 记录后,PostgreSQL SERIAL sequence 的处理问题,避免创建新 clusters 时出现 primary key 冲突。
- 修复相对路径 HTTP 307 redirect 处理:对相对 Location 值跳过缓存,并在跟随重定向之前,基于 base URL 对其进行解析。
Nydus
新功能和增强
- 支持为 Ondemand data 构建 prefetch-optimized layer blobs。
- 支持将 Nydus images 转换为 OCI 格式,并支持与 local archives 之间相互转换。
- 支持 Nydusify Copy 中的 zero-disk transfer。
- 引入基于 uffd 的 virtio-pmem DAX backend 支持,以在 Kata 场景中实现高性能的 on-demand image loading。
- 支持将 Storage layer 从 Proxy mode 切换到 Dragonfly SDK mode,以提升 P2P cache hit 性能。
- 支持使用 short container IDs 执行 commit,并在 commit 之前同步 filesystem。
- 支持在恢复 Nydusd 时重新发送 FUSE requests,修复 hot-upgrade tests。
重要 Bug 修复
- 修复 Blobfs 与 fuse-backend-rs 0.12.0 的兼容性。
- 修复 failover-policy 参数解析。
- 修复 Builder 中 symbolic link 覆盖 directory 时触发的 panic。
- 修复 chunkdict deduplication logic、DBSCAN clustering 和 chunk sorting 中的多个问题。
- 修复 Nydus image detection logic。
- 修复 fusedev 中 nested mount points 的 remount invalidation。
- 修复 Nydusctl backend metric counters 被 reset 时出现 abnormal values 的问题。
- 修复 image names 被修改后 Nydusify 找不到 blobs 的问题。
- 修复 Nydusify 中的 plain HTTP conversion。