JuiceFS v1.0 RC1 发布,大幅优化 dump/load 命令性能, 深度用户不容错过

Juicedata 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 耗时、对象分配大小等细节数据。请参考文档了解如何在 JuiceFS 中使用 Pyroscope。

其它新增

  1. 新支持 SQL 数据库、etcd 做数据存储,具体请参考 JuiceFS 设置对象存储文档
  2. 新支持 juicefs info 命令中根据文件 inode 找到其完整路径
    • 注意:查找在 v1.0 RC1 之前创建的文件时,可能出现路径查找不到或者路径不全的情况。
  3. 新增 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. 大量的错误日志描述优化

Bug 修复

  • 修复了 juicefs sync 读取源端文件失败时未打印错误日志的问题
  • 修复了只读客户端无法执行 warmup 的问题
  • 修复了大量删除文件时因 0 号 Slice 导致事务频繁冲突的问题
  • 修复了 SQL 类数据库作元数据引擎时,操作事务性未完全保证的问题
  • 修复了使用 TiKV 作元数据引擎时,可能因空连接导致 JuiceFS 客户端 panic 的问题
  • 修复了 List 元数据备份失败时,可能导致 JuiceFS 客户端 panic 的问题

升级建议

  • 使用 SQL 类数据库作元数据引擎的文件系统:请务必升级
  • 使用其它元数据引擎的文件系统:建议升级

介绍了这么多,大家赶紧上手试试吧:https://github.com/juicedata/juicefs/releases/tag/v1.0.0-rc1

最后为参与本次迭代的 17 位贡献者们,献上掌声 🎉

helix-loop(新贡献者)、周翱(新贡献者)、solracsf、showjason、Davies Liu、Zhou Cheng、Sandy Xu、zhijian、sanwan、Changjian Gao、tangyoupeng、Herald Yu、chnliyong、Rui Su、Ray、JennyA、Fuyang Liu