详解 JuiceFS sync 新功能,选择性同步增强与多场景性能优化

JuiceFS sync 是一个强大的数据同步工具,支持在多种存储系统之间进行并发同步或迁移数据,包括对象存储、JuiceFS、NFS、HDFS、本地文件系统等。此外,该工具还提供了增量同步、模式匹配(类似 Rsync)、分布式同步等高级功能。

在最新的 v1.2 版本中,针对 Juice sync 我们引入了多项新功能,并对多个场景进行了性能优化,以提高用户在处理大目录和复杂迁移时的数据同步效率。

新增功能

增强选择性同步

** 匹配规则

在 v1.2 版本以前,JuiceFS sync 不支持 ** 匹配(匹配任意路径元素,包括 /)。例如,当用户在传输中需要排除某个名为 bar 的文件,该文件位于根目录下 foo 目录再向下递归任意层级。之前的版本无法处理这一需求,在 v1.2 中,该需求就可以通过 --exclude /foo/**/bar 来实现。

一次性过滤模式

在 v1.2 版本以前,JuiceFS sync 同步数据的过滤模式为“逐层过滤”,这种模式与 Rsync 的行为基本一致,用户可以将 Rsync 的经验应用到 JuiceFS sync 。然而,很多用户反馈,这种过滤模式在一些场景下比较难以理解与使用。

例如“只同步根目录下 /some/path/this-file-is-found”这个需求时,使用逐层过滤模式的规则写法为:

--include /some/
--include /some/path/
--include /some/path/this-file-is-found
--exclude *

这个规则可能会让不熟悉逐层过滤模式的用户感到困惑(关于逐层过滤的使用文档请看参考这里);同时,对于这个简单的需求,这种写法也显得异常繁琐。

因此,在 v1.2 版本中新增了 “一次性过滤” 模式, 同样针对上述例子,“只同步根目录下 /some/path/this-file-is-found”,使用 “一次性过滤” 模式的写法就极为简单而且便于理解:

--include /some/path/this-file-is-found 
--exclude *
--match-full-path

用户可通过 --match-full-path 开启这个模式。

原理

针对待匹配的对象,“一次性过滤” 模式直接将其完整对象名与多个模式进行依次匹配。流程如下图所示:

以下是一些 exclude/include 规则一次性过滤模式的例子:

  • --exclude *.o 将排除所有文件名能匹配 *.o 的文件。
  • --exclude /foo** 将排除传输中根目录名为 foo 的文件或目录。
  • --exclude **foo/** 将排除所有以 foo 结尾的目录。
  • --exclude /foo/*/bar 将排除传输中根目录下 foo 目录再向下两层的 bar 文件。
  • --exclude /foo/**/bar 将排除传输中根目录下 foo 目录再向下递归任意层次后名为 bar 的文件。( ** 匹配任意多个层次的目录)
  • 同时使用 --include */ --include *.c --exclude * 将只包含所有目录和 C 源码文件,除此之外的所有文件和目录都被排除。
  • 同时使用 --include foo/bar.c --exclude * 将只包含 foo 目录和 foo/bar.c

inplace 参数

--inplace 参数引入了一种新的数据写入方式,允许 JuiceFS sync 原地写入目标文件。JuiceFS sync 同步数据到文件系统类型的存储(File,HFDS,NFS,SFTP)时,默认会在目标端先创建一个临时的文件,将数据先写入临时文件,最后再调用 rename 完成数据同步。这种方法虽然减少了对目标端文件系统的影响,但是 rename 也带来了一定的性能开销。从 v1.2 版本开始,用户可通过 --inplace 参数改变这一默认行为,允许用户直接将数据写入最终的目标文件,即使文件已经存在(已经存在文件其内容会被清空)。

进度指标

JuiceFS sync 的同步进度,会通过进度条的方式打印在终端中,这使得用户可以便捷地观测进度,但这种方式不便于其他应用程序准确地获取该信息。为此我们为 sync 子命令添加了 --metrics 参数,该参数允许将 sync 的进度以一系列 Prometheus 指标的形式暴露在特定的地址。

juicefs_sync_checked{cmd="sync",pid="18939"} 1008
juicefs_sync_checked_bytes{cmd="sync",pid="18939"} 3.262846983e+09
juicefs_sync_copied{cmd="sync",pid="18939"} 0
juicefs_sync_copied_bytes{cmd="sync",pid="18939"} 0
juicefs_sync_failed{cmd="sync",pid="18939"} 0

我们还添加了--consul 参数,该参数允许将 sync 服务注册到 consul 中。

性能优化

在 v1.2 版本中,我们针对以下 3 个场景做了性能优化

超大文件同步

在 v1.2 版本以前,JuiceFS sync 传输超大文件时,会遇到内存占用过高或者带宽无法跑满的问题。核心原因是超大文件同步我们使用的是分块上传的方法 ,它会对原始对象先分块再并发上传块,由于分块数量最多为 10000,所以原始对象越大分块越大,分块越大同样的并发下内存占用就会越高(内存占用 = 并发度 x 块大小)。

为了避免同步超大对象时内存占用过高,一种方案是减少并发度,但这样会导致带宽未能充分利用,因此这不是一个理想方案。另一种方案是减少实际上传时分块大小,同样的并发度下,分块越小内存占用越低。通过减小实际上传时分块的大小,我们可以根本上降低内存占用。

基于第二个方案,在 v1.2 版本中,我们优化了超大文件同步的逻辑,详细流程如下图所示。简单来讲,对于初次分块后仍旧过大的块,我们会再次进行分块上传,合并得到一个普通对象,然后调用 UploadPartCopy API 再将其转化为一个分块,最终合并所有分块即可。

整个过程相比以前多了一次分块拆分,带来的好处是经过两次拆分,降低了实际上传时的分块的大小,这样就从根本上解决了超大文件同步时内存占用过高和带宽无法跑满的问题。

强制更新模式

JuiceFS sync 默认会同时 list 源端与目标端的对象列表,通过两边对比,跳过那些已经在目标端存在的对象。在使用 --force-update 参数时,将强制同步源端所有对象。 在这种情况下,目标端的 ListObjects 请求不再必要。为了提高效率,在 v1.2 版本中,我们对此进行了优化,当使用 --force-update 参数时不再 list 目标端。这个优化在同步数据到超大目录时可大幅提高性能。

同步单个文件

当用户遇到下面这种单个文件同步的场景:

juicefs sync s3://mybucket1.s3.us-east-2.amazonaws.com/file1000000 s3://mybucket2.s3.us-east-2.amazonaws.com/file1000000 --limit 1

JuiceFS sync 默认会 list 源端与目标端的对象列表,目的是通过比较跳过目标端已经存在的对象。而上述这个场景只需要同步 file1000000 这一个对象即可。为了获取一个对象的信息而 list 整个 bucket 是低效的。我们可以用 HeadObject API 直接请求 file1000000 这个对象的信息即可。

所以在 v1.2 版本中,针对同步单个文件的场景,在获取待同步对象信息时,我们使用 HeadObject API 替换 ListObjects API ,这个优化对于在超大目录之间同步单个文件有很大的性能提升。

欢迎大家下载试用:https://github.com/juicedata/juicefs/releases/tag/v1.2.0-beta1

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/631948.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

web安全学习笔记(16)

记一下第27-28课的内容。Token 验证 URL跳转漏洞的类型与三种跳转形式;URL跳转漏洞修复 短信轰炸漏洞绕过挖掘 一、token有关知识 什么是token?token是用来干嘛的?_token是什么意思-CSDN博客 二、URL跳转漏洞 我们在靶场中,…

【python量化交易】—— 双均线择时策略 - Qteasy自定义交易策略【附源码】

使用qteasy自定义并回测双均线交易策略 使用qteasy自定义并回测一个双均线择时策略策略思想导入qteasy模块创建一个新的策略回测交易策略,查看结果 使用qteasy自定义并回测一个双均线择时策略 我们今天使用qteasy来回测一个双均线择时交易策略,qteasy是…

计算机发展史故事【17】

任天堂崛起 七十年代美国雅达利公司开创一个高科技的电脑游戏业。无独有偶,一家专营电脑游戏机的日本任天堂公司,自八十年代初期把它的家庭电脑游戏机(FC)投放市场后,不平静的世界被再一次激起轩然大波。这个小小的日本…

x86 CPU的保护模式——概述(一)

文章目录 前言一、寄存器变化二、寻址变化三、为什么段寄存器依然是16位? 查看系列文章点这里: 操作系统真象还原 前言 我们在前面已经介绍过实模式了,它是32位 CPU 的一种工作模式,模拟了16位 CPU 的工作环境,但是大多…

java医院信息系统HIS源码SaaS模式Java版云HIS系统 接口技术RESTful API + WebSocket + WebService

java医院信息系统HIS源码SaaS模式Java版云HIS系统 接口技术RESTful API WebSocket WebService 云HIS是基于云计算的医疗卫生信息系统(Cloud-Based Healthcare Information System),它运用云计算、大数据、物联网等新兴信息技术,…

centos7.9安装es7.12.0

下载es 国内镜像:https://mirrors.huaweicloud.com/elasticsearch/7.12.0/ 下载并上传内容到/usr/local目录下 解压: tar -zxvf /uar/local/elasticsearch-7.12.0-linux-x86_64.tar.gz安装 es一般不能用root启动,因此需要创建es:es用户和…

Mac SourceTree配置ssh git仓库

一、准备条件 1、Mac系统电脑 2、安装好SourceTree 3、获取ssh git仓库地址 二、配置步骤 1、打开终端命令行 ssh -t rsa -C "xxx""xxx"代表注册git仓库时,使用的用户名,可以是字符串也可以是邮箱地址。 如果遇到输入密码&#xf…

通过 Apple Vision Pro 释放创造力:深入研究空间计算

Apple 最新进军空间计算领域的 Apple Vision Pro,标志着重新定义我们与技术交互方式的重大飞跃。空间计算超越了传统界限,允许用户以无缝集成到物理世界的方式参与 2D 和 3D 内容。 我们可以关注两种类型的体验: 在空间中渲染 2D 内容。这涉及将现有设备窗口投影到空间领域…

某能源集团电力公司搭建数据报表中心,实现采集填报分析一体化

​在当今这个信息爆炸的时代,数据已成为企业最宝贵的财富,越来越多的企业开始重视数据的积累和归集。在企业日常生产和工作过程中,会产生绵延不断的数据,但这些数据往往没有统一的记录、归纳和整理,或者录入了系统却分…

广汽原车控制系统CAN协议控制汽车基本信息获取及数据应用

在现代汽车工业的迅速发展中,车辆控制系统的智能化和网络化已成为提升汽车性能的关键。广汽作为中国汽车行业的佼佼者,其在原车通信网络方面也取得了显著的成就。特别是广汽原车CAN(Controller Area Network)协议的应用&#xff0…

AC/DC电源模块在工业自动化领域的应用探析

BOSHIDA AC/DC电源模块在工业自动化领域的应用探析 AC/DC电源模块是一种将交流电转换为直流电的电力转换设备,在工业自动化领域具有广泛的应用。本文将从稳定性、效率和可靠性三个方面对AC/DC电源模块在工业自动化领域的应用进行探析。 首先,AC/DC电源模…

【SQL】SQL常见面试题总结(1)

目录 1、检索数据1.1、从 Customers 表中检索所有的 ID1.2、检索并列出已订购产品的清单1.2、检索所有列 2、排序检索数据2.1、检索顾客名称并且排序2.2、对顾客 ID 和日期排序2.3、按照数量和价格排序2.4、检查 SQL 语句 3、过滤数据3.1、返回固定价格的产品3.2、返回产品并且…

React 第三十七章 Scheduler 最小堆算法

在 Scheduler 中&#xff0c;使用最小堆的数据结构在对任务进行排序。 // 两个任务队列 var taskQueue: Array<Task> []; var timerQueue: Array<Task> [];push(timerQueue, newTask); // 像数组中推入一个任务 pop(timerQueue); // 从数组中弹出一个任务 time…

【漏洞复现】用友 NC portal-registerServlet JNDI注入漏洞

0x01 产品简介 用友NC是用友网络科技股份有限公司开发的一款大型企业数字化平台。它主要用于企业的财务核算、成本管理、资金管理、固定资产管理、应收应付管理等方面的工作,致力于帮助企业建立科学的财务管理体系,提高财务核算的准确性和效率。 0x02 漏洞概述 用友NC存在…

Elasticsearch 在滴滴的应用与实践

滴滴 Elasticsearch 简介 简介 Elasticsearch 是一个基于 Lucene 构建的开源、分布式、RESTful 接口的全文搜索引擎&#xff0c;其每个字段均可被索引&#xff0c;且能够横向扩展至数以百计的服务器存储以及处理 TB 级的数据&#xff0c;其可以在极短的时间内存储、搜索和分析大…

登录接口取到token,加到请求头中,通过服务器验证#Vue3

登录接口取到token&#xff0c;加到请求头中&#xff0c;通过服务器验证#Vue3 Token验证的基本流程 1.服务端收到请求&#xff0c;去验证用户名与密码 2.验证成功后&#xff0c;服务端会签发一个 Token&#xff0c;再把这个 Token 发送给客户端 3.客户端收到 Token 以后可以把它…

Linux文件系统详解

&#x1f30e;Linux文件系统 文章目录&#xff1a; Linux文件系统 简单认识磁盘 文件系统       磁盘线性结构抽象       文件系统存储方法 inode Table         inode Bitmap         Data Block         Block Bitmap         …

【漏洞复现】方正全媒体采编系统密码泄露漏洞

0x01 产品简介 方正全媒体新闻采编系统是一个面向媒体深度融合的技术平台&#xff0c;它以大数据和AI技术为支撑&#xff0c;集成了指挥中心、采集中心、编辑中心、发布中心、绩效考核中心、资料中心等多个功能&#xff0c;全面承载“策采编审发存传评”的融媒体业务流程。 0…

爱吃香蕉的珂珂

题目链接 爱吃香蕉的珂珂 题目描述 注意点 piles.length < h < 10^9如果某堆香蕉少于k根&#xff0c;将吃掉这堆的所有香蕉&#xff0c;然后这一小时内不会再吃更多的香蕉返回可以在 h 小时内吃掉所有香蕉的最小速度 k&#xff08;k 为整数&#xff09; 解答思路 二…

Find My资讯|苹果 iOS 17.5 率先执行跨平台反跟踪器标准

苹果和谷歌公司于 2023 年 5 月宣布推出“检测预期外位置追踪器”&#xff08;Detecting Unwanted Location Trackers&#xff09;行业标准&#xff0c;经过 1 年多的打磨之后&#xff0c;该标准目前已通过 iOS 17.5 部署到 iPhone 上。谷歌也将为运行 Android 6.0 或更高版本的…