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 ...
随机推荐
- 入行数字IC验证的一些建议
0x00 首先,推荐你看两本书,<"胡"说IC菜鸟工程师完美进阶>(pdf版本就行)本书介绍整个流程都有哪些岗位,充分了解IC行业的职业发展方向.<SoC设计方法 ...
- Golang 源码解读 01、深入解析 strings.Builder、strings.Join
strings.Builder 源码解析. 存在意义. 实现原理. 常用方法. 写入方法. 扩容方法. String() 方法. 禁止复制. 线程不安全. io.Writer 接口. 代码. stri ...
- 关于物理机没有VMnet1和VMnet8网卡的问题
当我们在用虚拟机做实验需要与物理机进行连接时,发现无法连接上,这时候可能是没有Vmnet1或者Vmnet8网卡,又或者是Vmnet1和Vmnet8网卡都没有. 之前试过很多方法,重装.重启虚拟网络编辑 ...
- android软件简约记账app开发day03-自定义键盘的书写
android软件简约记账app开发day03-自定义键盘的书写 我们在fragment界面使用了自定义的keybroad键盘,所以今天我们来书写自定义的键盘代码 新建util包,新建keyboard ...
- 组合式应用新利器?SaaS新时代事件网格如何解决集成标准化问题
摘要:组合式应用需要面临的一个难题是如何解决各个应用之间的集成标准问题,比如应用可能仅支持HTTP.TCP等协议中的一种,而缺乏统一的通讯标准就给业务落地该架构带来了困难.下面介绍事件网格(Event ...
- python学习-Day22
目录 今日内容详细 hashlib加密模块 什么是加密 加密算法 加密的使用 基本使用 指定算法(md5) 将明文数据传递给算法对象 获取加密之后的密文数据 加密补充 加盐处理 动态加盐 加密应用场景 ...
- Linux网络流量相关
一直以来对Linux网络这块都感觉比较乱 遇到一个UDP丢包的问题:在测试中,一台VM虚拟机,CPU利用率55%左右,内存利用率7%左右,网卡流量也远没到限制的时候出现了丢包情况 使用netstat ...
- 单列集合(Collection-Set)
(部分) Set类特点: "无序"(输入顺序和存储顺序不一样) HashSet 底层是HashMap 关于不能有重复元素/对象 遇到的问题: 解决办法:重新类的相关方法 选择名字和 ...
- Django-ORM-连表正反操作
一.A表男生,B表女生,C表关系 1通过A表查与某个男生有关系的所有女生 思想1:在A表中确认男生后,通过反查到C表,获取相关内容(QuerySet),然后再跨到B表获取所有女生信息. obj=mod ...
- Apache Kafka 集群部署指南
公众号关注 「开源Linux」 回复「学习」,有我为您特别筛选的学习资料~ Kafka基础 消息系统的作用 应该大部分小伙伴都清楚,用机油装箱举个例子. 所以消息系统就是如上图我们所说的仓库,能在中间 ...