各位社区的伙伴,

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 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. 大量的错误日志描述优化

支持通过 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 命令性能, 深度用户不容错过的更多相关文章

  1. JuiceFS v1.0 beta3 发布,支持 etcd、Amazon MemoryDB、Redis Cluster

    JuiceFS v1.0 beta3 在元数据引擎方面继续增强,新增 etcd 支持小于 200 万文件的使用场景,相比 Redis 可以提供更好的可用性和安全性.同时支持了 Amazon Memor ...

  2. JuiceFS v1.0.0 Beta1 发布,加强数据安全能力

    在 JuiceFS 开源一周年之际,我们迎来了首个里程碑版本 JuiceFS v1.0.0 Beta1,并将开源许可从 AGPL v3 修改为 Apache License 2.0. JuiceFS ...

  3. PyRedisAdmin v1.0 Beta 发布,Redis 在线管理工具 - 开源中国社区

    PyRedisAdmin v1.0 Beta 发布,Redis 在线管理工具 - 开源中国社区 PyRedisAdmin v1.0 Beta 发布,Redis 在线管理工具

  4. [译]ABP v1.0终于发布了!

    ABP v1.0终于发布了! 今天是个大日子!经过约3年的不断开发,第一个稳定的ABP版本,1.0,已经发布了.感谢为该项目做出贡献或试用过的每个人. 立即开始使用新的ABP框架:abp.io/get ...

  5. mysql awr v1.0.1发布

    现发布mysql awr v1.0.1 修复问题: 1.galera cluster下flush table/index_statistcs时如果系统中业务ddl频繁可能会导致很多进程处于prepar ...

  6. Omi v1.0震撼发布 - 令人窒息的Web组件化框架

    原文链接--https://github.com/AlloyTeam/omi 写在前面 Omi框架经过几十个版本的迭代,越来越简便易用和强大. 经过周末的连续通宵加班加点,Omi v1.0版本终于问世 ...

  7. Rookey.Frame v1.0 视频教程发布了

    经过昨天几个小时的折腾, Rookey.Frame v1.0开发视频教程终于发布了,由于是第一次做视频有很多地方做的不够好,后续我会慢慢改进,争取将视频教程做好. 本期发布视频: (一)Rookey. ...

  8. Omi v1.0震撼发布 - 开放现代的Web组件化框架

    原文链接--https://github.com/AlloyTeam/omi 写在前面 Omi框架经过几十个版本的迭代,越来越简便易用和强大. 经过周末的连续通宵加班加点,Omi v1.0版本终于问世 ...

  9. OBS Studio 24.0 RC1 发布 – 有大惊喜

    导读 对于那些使用OBS Studio进行跨平台直播和屏幕录制需求的人来说,OBS Studio 24.0即将推出,但首先发布的是他们的候选版本,以审查进入这一重大更新的新功能. OBS Studio ...

随机推荐

  1. linux中sort、uniq、cut、tr、wc命令的使用

    文本处理命令 1.sort命令 使用场景 : 用于将文件内容加以排序(可以和cat一起用) 参数 作用 -n 依照数值的大小排序 -r 以相反的顺序来排序(默认只比较第一个数,-rn是按所有数值比较) ...

  2. Java学习day2

    今天学习了Java的数据类型.运算符.选择循环结构以及数组. Java所有的关键字全部小写 Java的数据类型与c语言相似,但是c语言定义数组时可以不主动对其初始化,而Java则必须先初始化,有动态和 ...

  3. Python 一网打尽<排序算法>之先从玩转冒泡排序开始

    1. 前言 所谓排序,就是把一个数据群体按个体数据的特征按从大到小或从小到大的顺序存放. 排序在应用开发中很常见,如对商品按价格.人气.购买数量--显示. 初学编程者,刚开始接触的第一个稍微有点难理解 ...

  4. MKL与VS2019配置方法

    VS2019配置oneAPI并调用MKL库 oneAPI oneAPI是一个跨架构的编程工具,旨在简化跨GPU.CPU.FPGA和AI加速器之间的编程,可以与英特尔自身设备,或其他厂商的芯片配合使用, ...

  5. Day 004:PAT练习--1033 旧键盘打字 (20 分)

    题目要求如下:   我一开始理解的题意:第一行给出的是坏掉的键,这里的规则应该是这样的:   1."对应英文字母的坏键以大写给出",若有字母,则与其相关的字母全部不能输出,不论是大 ...

  6. Java基础语法Day_04

    第11节 开发工具-IDEA day04_01_集成开发环境IDE的概述 day04_02_IntelliJ-IDEA的安装 day04_03_IDEA的项目结构 day04_04_IDEA的Hell ...

  7. Electron结合React和TypeScript进行开发

    目录 结合React+TypeScript进行Electron开发 1. electron基本简介 为什么选择electron? 2. 快速上手 2.1 安装React(template为ts) 2. ...

  8. WPFApplication类

    Application类 应用程序类Application,以下代码自动生成且在程序中不可见,定义程序入口点方法以及程序启动程序,整个程序生命周期为执行完Main()方法里的程序.对于自定义的应用程序 ...

  9. 企业应用架构研究系列二十八:身份认证 Beginning Out With IdentityServer4

    在.Netcore 技术栈中,一直在使用了开源组件IdentityService4进行身份管理,其功能的强大和易用性的确很受开发者喜欢,但是最近其开源组织Duende Software 开始对其进行商 ...

  10. 超详细的Linux 用户与用户组知识

    一个执着于技术的公众号 1.用户和组的概念 Linux系统对用户与组的管理是通过ID号来实现的.我们在登录系统时,输入用户名与对应密码,操作系统会将用户名转化为ID号后再判断该账号是否存在,并对比密码 ...