JuiceFS V1.0 RC1 发布,大幅优化 dump/load 命令性能, 深度用户不容错过
各位社区的伙伴,
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 类数据库作元数据引擎的文件系统:请务必升级
- 使用其它元数据引擎的文件系统:建议升级
JuiceFS V1.0 RC1 发布,大幅优化 dump/load 命令性能, 深度用户不容错过的更多相关文章
- JuiceFS v1.0 beta3 发布,支持 etcd、Amazon MemoryDB、Redis Cluster
JuiceFS v1.0 beta3 在元数据引擎方面继续增强,新增 etcd 支持小于 200 万文件的使用场景,相比 Redis 可以提供更好的可用性和安全性.同时支持了 Amazon Memor ...
- JuiceFS v1.0.0 Beta1 发布,加强数据安全能力
在 JuiceFS 开源一周年之际,我们迎来了首个里程碑版本 JuiceFS v1.0.0 Beta1,并将开源许可从 AGPL v3 修改为 Apache License 2.0. JuiceFS ...
- PyRedisAdmin v1.0 Beta 发布,Redis 在线管理工具 - 开源中国社区
PyRedisAdmin v1.0 Beta 发布,Redis 在线管理工具 - 开源中国社区 PyRedisAdmin v1.0 Beta 发布,Redis 在线管理工具
- [译]ABP v1.0终于发布了!
ABP v1.0终于发布了! 今天是个大日子!经过约3年的不断开发,第一个稳定的ABP版本,1.0,已经发布了.感谢为该项目做出贡献或试用过的每个人. 立即开始使用新的ABP框架:abp.io/get ...
- mysql awr v1.0.1发布
现发布mysql awr v1.0.1 修复问题: 1.galera cluster下flush table/index_statistcs时如果系统中业务ddl频繁可能会导致很多进程处于prepar ...
- Omi v1.0震撼发布 - 令人窒息的Web组件化框架
原文链接--https://github.com/AlloyTeam/omi 写在前面 Omi框架经过几十个版本的迭代,越来越简便易用和强大. 经过周末的连续通宵加班加点,Omi v1.0版本终于问世 ...
- Rookey.Frame v1.0 视频教程发布了
经过昨天几个小时的折腾, Rookey.Frame v1.0开发视频教程终于发布了,由于是第一次做视频有很多地方做的不够好,后续我会慢慢改进,争取将视频教程做好. 本期发布视频: (一)Rookey. ...
- Omi v1.0震撼发布 - 开放现代的Web组件化框架
原文链接--https://github.com/AlloyTeam/omi 写在前面 Omi框架经过几十个版本的迭代,越来越简便易用和强大. 经过周末的连续通宵加班加点,Omi v1.0版本终于问世 ...
- OBS Studio 24.0 RC1 发布 – 有大惊喜
导读 对于那些使用OBS Studio进行跨平台直播和屏幕录制需求的人来说,OBS Studio 24.0即将推出,但首先发布的是他们的候选版本,以审查进入这一重大更新的新功能. OBS Studio ...
随机推荐
- 使用SQL的FOR XML PATH('')将字段用逗号隔开
FOR XML PATH('') 将查询结果显示为XML 经常用来将查询结果按逗号分隔后显示至某一字段 select * from Area结果 添加FOR XML PATH('')后 select ...
- MySQL存储引擎、基础数据类型、约束条件
MySQL存储引擎 存储引擎 # 存储引擎可以堪称是处理数据的不同方式 # 查看存储引擎的方式 show engines; # 需要掌握的四个存储引擎 MyISAM MySQL5.5之前的默认的存储引 ...
- echarts饼图去除圈外指向横线
series: [ { name: '实时人员信息', type: 'pie', radius: ['86%', '80%'], avoidLabelOverlap: false, label: { ...
- 背包问题dp的初步总结
背包问题 01背包 给定的物体只有0个和1个,只有选与不选的划分,其状态转移方程时由i-1行推出,所以第二层循环是由j=m,递减到v[i]的. for(int i=1;i<=n;i++){ fo ...
- 2021.08.03 P1197 星球大战(并查集)
2021.08.03 P1197 星球大战(并查集) [P1197 JSOI2008]星球大战 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 重点: 1.可以离线处理.把在线变为离 ...
- Git批量下载MODIS数据
1.download.sh获取 EarthData(需注册账号)中获取MODIS的产品类型.地理范围.时间年份等,进入下载页面Download Status 下载点击得到_download.sh 文件 ...
- asp.net core MVC 添加静态文件
ASP.net Core 中添加插件需要 1.将文件放在wwwroot文件夹下(根目录文件夹,没有的话需要创建) 2.需要在project.json中的dependencies添加如下依赖 " ...
- 看看JDK1.7与1.8的内存模型差异
JDK1.7与1.8的区别的内存模型差异? jsk1.7的内存模型: 堆分为初生代和老年代,大小比例为1:2,初生代又分为eden.from.to三个区域,大小比例为8:1:1 方法区:有代码区.常量 ...
- python学习-Day8
目录 作业讲解 数据类型内置方法3 字典 ( dict ,可变类型) 类型转换 -- dict() 需要掌握的方法 按key取值(可存可取) 统计字典中键值对的个数(len) 成员运算 删除键值对 获 ...
- ASP.NET Web 应用 Docker踩坑历程
听说Docker这玩意挺长时间了,新建Web应用的时候,也注意到有个启用Docker的选项. 前两天扫了一眼<[大话云原生]煮饺子与docker.kubernetes之间的关系>,觉得有点 ...