CN117009309A - 一种基于rsync的文件实时同步方法及装置 - Google Patents

一种基于rsync的文件实时同步方法及装置 Download PDF

Info

Publication number
CN117009309A
CN117009309A CN202310628245.8A CN202310628245A CN117009309A CN 117009309 A CN117009309 A CN 117009309A CN 202310628245 A CN202310628245 A CN 202310628245A CN 117009309 A CN117009309 A CN 117009309A
Authority
CN
China
Prior art keywords
file
event
monitoring
rsync
task
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN202310628245.8A
Other languages
English (en)
Other versions
CN117009309B (zh
Inventor
陶传会
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hexin Technology Co ltd
Hexin Technology Suzhou Co ltd
Original Assignee
Hexin Technology Co ltd
Hexin Technology Suzhou Co ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Hexin Technology Co ltd, Hexin Technology Suzhou Co ltd filed Critical Hexin Technology Co ltd
Priority to CN202310628245.8A priority Critical patent/CN117009309B/zh
Publication of CN117009309A publication Critical patent/CN117009309A/zh
Application granted granted Critical
Publication of CN117009309B publication Critical patent/CN117009309B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/17Details of further file system functions
    • G06F16/178Techniques for file synchronisation in file systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • G06F9/5038Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering the execution order of a plurality of tasks, e.g. taking priority or time dependency constraints into consideration
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本申请涉及一种基于rsync的文件实时同步方法及装置,其方法包括当接收到启动指令时,初始化系统配置;创建用于使文件数据同步的顺序按照文件系统产生的事件顺序依次执行的任务队列并执行工作线程,工作线程用于在获取任务事件后,调用rsync工具进行文件数据同步;创建用于将所有的文件同步操作整合成一次远端交互的延时队列并执行监控线程,监控线程用于对目标监控文件夹进行文件状态的监控;当监控的文件系统满足事件同步条件时,则将待同步的事件推送至延时队列;从延时队列中获取任务事件,将任务事件推送至任务队列并执行工作线程。本申请具有改善现有的文件实时同步方式占用大量带宽的效果,且监控粒度更精细,筛选能力更强。

Description

一种基于rsync的文件实时同步方法及装置
技术领域
本申请涉及文件同步技术领域,尤其是涉及一种基于rsync的文件实时同步方法及装置。
背景技术
目前,互联网技术的高速发展产生了海量的数据,而数据同步与备份的重要性随着时代的发展,开始变得越来越不可忽视。
数据的备份有多种形式,如冷备份、热备份、增量备份等,而在实时性要求比较高的情况下,可选方案并不多。企业的IT人员多使用scp(secure copy,远程文件拷贝)和rsync(remote synchronizetion,数据镜像备份)的工具进行远端同步及备份,这两个工具均不带监控能力,需要人为主动触发。而很多工程师使用inotify(文件系统事件通知机制)监控工具进行文件监控并根据信号内容触发同步操作。
针对上述中的相关技术,发明人发现现有的文件实时同步方式需要工程师编写shell脚本并配合定时器实行,且监控粒度粗糙,筛选能力差,会存在很多的不必要的通讯,占用大量带宽的问题。
发明内容
为了改善现有的文件实时同步方式占用大量带宽的问题,本申请提供了一种基于rsync的文件实时同步方法及装置。
第一方面,本申请提供一种基于rsync的文件实时同步方法。
本申请是通过以下技术方案得以实现的:
一种基于rsync的文件实时同步方法,包括以下步骤,
当接收到启动指令时,初始化系统配置;
创建用于使文件数据同步的顺序按照文件系统产生的事件顺序依次执行的任务队列并执行工作线程,所述工作线程用于在获取任务事件后,调用rsync工具进行文件数据同步;
创建用于将所有的文件同步操作整合成一次远端交互的延时队列并执行监控线程,所述监控线程用于对目标监控文件夹进行文件状态的监控;
当监控的文件系统满足事件同步条件时,则将待同步的所述事件推送至所述延时队列;
从所述延时队列中获取任务事件,将所述任务事件推送至所述任务队列并执行工作线程。
通过采用上述技术方案,当接收到启动指令时,初始化系统配置,为后续文件数据的实时同步做好准备;创建任务队列并执行工作线程,任务队列可以保证同步文件的顺序按照文件系统产生的事件顺序依次执行,工作线程会等待任务队列的数据并对其进行消费,工作线程用于在获取任务事件后,调用rsync工具进行文件数据同步;创建延时队列并执行监控线程,监控线程用于对目标监控文件夹进行文件状态的监控,因为文件夹内可能会存在若干文件和子文件夹,如果不进行缓冲,则所有的文件都会产生一次文件同步的远端交互,设置延时队列对如文件夹的创建和删除等进行缓冲,以将所有的文件同步操作整合成一次远端交互,极大减少了与对端的交互次数,减少了文件实时同步过程中不必要的通讯;当监控的文件系统满足事件同步条件时,则将待同步的事件推送至延时队列,再从延时队列中获取任务事件,将任务事件推送至任务队列并执行工作线程,通过对文件系统进行监控,并在满足条件时自动触发执行工作线程,以及,使用线程池+消息队列技术,保证并发性能的同时兼顾了系统对软件运行时的资源约束,基于rsync实现文件数据的同步及备份,无任何依赖,保证了文件数据同步过程的稳定性,无需编写shell脚本并配合定时器实行,监控粒度更精细,筛选能力更强,改善了带宽占用的情况。
本申请在一较佳示例中可以进一步配置为:所述当监控的文件系统满足事件同步条件时,则将待同步的所述事件推送至所述延时队列时,还包括以下步骤,
判断待同步的所述事件是否为文件夹类型;
若待同步的所述事件为文件夹类型,则增加所述延时队列的缓冲时间设置。
通过采用上述技术方案,将待同步的事件推送至延时队列时,判断该事件是否为文件夹类型的操作,如果是则增加缓冲时间设置,以根据文件夹类型的操作特点进行更精细化的监控,通过文件夹类型模式匹配功能,能够更好地实现远端传输的限速。
本申请在一较佳示例中可以进一步配置为:从所述延时队列中获取任务数据时,还包括以下步骤,
按照预设的执行时间从所述延时队列中获取任务数据,其中,所述执行时间小于文件系统的当前时间。
通过采用上述技术方案,创建延时队列的任务数据获取线程,该线程按照一定的时间间隔,从延时队列中获取任务数据,是否可以获取任务的标准为当前系统时间是否大于或等于任务的执行时间,以进一步减少文件实时同步过程中不必要的通讯,改善带宽的占用情况。
本申请在一较佳示例中可以进一步配置为:监控线程对目标监控文件夹进行文件状态的监控的步骤包括,
当遍历一个目录时,先判断是否存在子目录;
若存在子目录,则将所述子目录推送至预设的环形队列中,直至所述环形队列中无数据,说明该监控的根目录递归完成。
通过采用上述技术方案,进行文件系统的遍历监控时设置环形队列,当遍历一个目录时,如发现存在子目录则将该子目录推送到环形队列中,遍历流程的上一次会不停地查询此环形队列中是否有数据,如果有则说明还存在子目录,如果环形队列中无数据,则说明该监控的根目录已经递归完成,使用环形队列策略替代传统的递归策略,以减小文件系统遍历监控时对递归层级的限制。
本申请在一较佳示例中可以进一步配置为:还包括以下步骤,
当监控的文件系统满足事件发生条件时,先对发生的所述事件进行过滤;
若发生的所述事件未被过滤,则将未被过滤的所述事件更新为待同步的事件;
若发生的所述事件被过滤,则被过滤的所述事件停止执行文件数据同步操作。
通过采用上述技术方案,如果监控的文件系统有事件发生,则先对该事件进行过滤,将未被过滤的事件更新为待同步的事件,而被过滤的事件则停止执行文件数据同步操作,以先筛选排除需要忽略的事件,减少文件数据同步的数据量,筛选能力更强,进一步改善带宽占用的情况。
本申请在一较佳示例中可以进一步配置为:对发生的所述事件进行过滤的步骤包括,
执行事件类型的过滤或文件类型的过滤;
若执行事件类型的过滤,包括根据打开文件、关闭打开的文件、写入内容、创建目录、创建文件、删除文件、移除监控目录、移入监控目录或文件属性变化进行事件过滤;
若执行文件类型的过滤,包括根据文件名的后缀及文件过滤类型进行事件过滤。
通过采用上述技术方案,事件过滤包括事件类型的过滤和文件类型的过滤,事件类型的过滤包括打开文件、关闭打开的文件、写入内容、创建目录、创建文件、删除文件、移除监控目录、移入监控目录、文件属性变化,具体监控哪一类的事件可根据项目需要配置,设计更灵活,适用性更强;文件类型的过滤包括文件名的后缀及文件过滤类型,被过滤的事件无需进行文件数据的同步操作,以减少文件数据同步的数据量,改善带宽占用的情况。
本申请在一较佳示例中可以进一步配置为:还包括以下步骤,
判断是否为软连接;
若为软连接且实际路径在监控目录内,则只复制链接符号。
通过采用上述技术方案,增加对软连接的监控,若为软连接且实际路径在监控目录内,则只复制链接符号,不需要对实际数据进行重复复制,以对软连接目录进行实时监控保护,进一步减少文件数据同步的数据量,能够更好地改善文件数据同步过程中的带宽占用情况。
本申请在一较佳示例中可以进一步配置为:所述当接收到启动指令时,初始化系统配置的步骤包括,
采用启动时所带的命令行参数或加载配置文件的方式初始化系统配置。
通过采用上述技术方案,根据程序启动时所带的命令行参数进行系统配置的初始化,也可以通过加载配置文件的方式进行系统配置的初始化,设计更灵活,适用性更强。
本申请在一较佳示例中可以进一步配置为:还包括以下步骤,
所述工作线程采用线程池技术创建;
其中,所述工作线程的数量为服务器的CPU数量的2倍或自定义。
通过采用上述技术方案,利用线程池技术创建工作线程,且工作线程的数量为服务器的CPU数量的2倍或自定义,以防止系统资源被无限申请而造成系统不可用的情况,保证系统的正常运行。
本申请在一较佳示例中可以进一步配置为:所述调用rsync工具进行文件数据同步的步骤包括,
对待同步的所述任务事件进行格式化,得到目标参数;
获取系统配置的远端IP、用户名和密码;
将所述目标参数、所述远端IP、所述用户名和所述密码组合成rsync命令行形式,并调用rsync工具执行文件数据同步操作。
通过采用上述技术方案,对待同步的任务事件进行格式化,得到目标参数,并结合远端IP、用户名和密码,形成rsync命令行形式,以调用rsync工具实现文件数据的同步操作,无需编写shell脚本并配合定时器实现文件数据同步,减少了不必要的通讯,改善了带宽的占用情况。
本申请在一较佳示例中可以进一步配置为:对目标监控文件夹进行文件状态的监控时,包括,
使用linux系统原生的inotify接口,对目标监控文件夹进行文件状态的监控。
通过采用上述技术方案,使用linux原生的inotify接口进行文件状态的监控,无任何依赖,保证了文件数据同步过程的稳定性。
第二方面,本申请提供一种基于rsync的文件实时同步装置。
本申请是通过以下技术方案得以实现的:
一种基于rsync的文件实时同步装置,包括,
初始化模块,用于在接收到启动指令时,初始化系统配置;
任务队列模块,用于创建用于使文件数据同步的顺序按照文件系统产生的事件顺序依次执行的任务队列并执行工作线程,所述工作线程用于在获取任务事件后,调用rsync工具进行文件数据同步;
延时队列模块,用于创建用于将所有的文件同步操作整合成一次远端交互的延时队列并执行监控线程,所述监控线程用于对目标监控文件夹进行文件状态的监控;
文件系统监控模块,用于在监控的文件系统满足事件同步条件时,则将待同步的所述事件推送至所述延时队列;
数据同步模块,用于从所述延时队列中获取任务事件,将所述任务事件推送至所述任务队列并执行工作线程。
综上所述,与现有技术相比,本申请提供的技术方案带来的有益效果至少包括:
使用线程池+消息队列技术,保证并发性能的同时,兼顾系统对软件运行时的资源约束;使用延时策略,极大减少了与对端的交互次数;使用IO多路复用+条件变量通信技术,在满足条件时自动触发执行工作线程,基于rsync实现文件数据的同步及备份,无任何依赖,保证了文件数据同步过程的稳定性,无需编写shell脚本并配合定时器实行,监控粒度更精细,筛选能力更强,改善了带宽占用的情况。
附图说明
图1为本申请一个示例性实施例提供的一种基于rsync的文件实时同步方法的主要流程图。
图2为本申请又一个示例性实施例提供的一种基于rsync的文件实时同步方法的整体流程图。
图3为本申请另一个示例性实施例提供的一种基于rsync的文件实时同步装置的结构框图。
具体实施方式
本具体实施例仅仅是对本申请的解释,其并不是对本申请的限制,本领域技术人员在阅读完本说明书后可以根据需要对本实施例做出没有创造性贡献的修改,但只要在本申请的权利要求范围内都受到专利法的保护。
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
另外,本文中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,本文中字符“/”,如无特殊说明,一般表示前后关联对象是一种“或”的关系。
数据的备份有多种形式,但在实时性要求比较高的情况下,可选方案并不多。企业的IT人员大多使用scp和rsync的工具进行远端同步及备份,这两个工具均不带监控能力,需要人为主动触发。而很多工程师使用inotify监控工具进行文件监控并根据信号内容触发同步操作。但是这些方案存在很大的问题:首先,需要工程师编写shell脚本并配合定时器实行,且监控粒度粗糙,筛选能力差,会存在很多的不必要的通讯,占用大量带宽;其次,该工具只能串行执行,在大数据量的情况下显得力不从心;再次,这个功能不能处理软连接等特殊情况。
本申请提供一种新的文件实时同步的方法,使用线程池+消息队列技术,保证并发性能的同时兼顾了系统对软件运行时的资源约束;使用延时策略,以将所有的文件同步操作整合成一次远端交互,极大减少了与对端的交互次数,减少了文件实时同步过程中不必要的通讯;使用IO多路复用+条件变量通信技术,通过对文件系统进行监控,并在满足条件时自动触发执行工作线程,基于rsync实现文件数据的同步及备份,无任何依赖,保证了文件数据同步过程的稳定性,也无需编写shell脚本并配合定时器实行,监控粒度更精细,筛选能力更强,改善了带宽占用的情况。
下面结合说明书附图对本申请实施例作进一步详细描述。
参照图1,本申请实施例提供一种基于rsync的文件实时同步方法,所述方法的主要步骤描述如下。
S1:当接收到启动指令时,初始化系统配置;
S2:创建用于使文件数据同步的顺序按照文件系统产生的事件顺序依次执行的任务队列并执行工作线程,所述工作线程用于在获取任务事件后,调用rsync工具进行文件数据同步;
S3:创建用于将所有的文件同步操作整合成一次远端交互的延时队列并执行监控线程,所述监控线程用于对目标监控文件夹进行文件状态的监控;
S4:当监控的文件系统满足事件同步条件时,则将待同步的所述事件推送至所述延时队列;
S5:从所述延时队列中获取任务事件,将所述任务事件推送至所述任务队列并执行工作线程。
在一实施例中,所述当监控的文件系统满足事件同步条件时,则将待同步的所述事件推送至所述延时队列时,还包括以下步骤,
判断待同步的所述事件是否为文件夹类型;
若待同步的所述事件为文件夹类型,则增加所述延时队列的缓冲时间设置。
在一实施例中,从所述延时队列中获取任务数据时,还包括以下步骤,
按照预设的执行时间从所述延时队列中获取任务数据,其中,所述执行时间小于文件系统的当前时间。
在一实施例中,监控线程对目标监控文件夹进行文件状态的监控的步骤包括,
当遍历一个目录时,先判断是否存在子目录;
若存在子目录,则将所述子目录推送至预设的环形队列中,直至所述环形队列中无数据,说明该监控的根目录递归完成。
在一实施例中,还包括以下步骤,
当监控的文件系统满足事件发生条件时,先对发生的所述事件进行过滤;
若发生的所述事件未被过滤,则将未被过滤的所述事件更新为待同步的事件;
若发生的所述事件被过滤,则被过滤的所述事件停止执行文件数据同步操作。
在一实施例中,对发生的所述事件进行过滤的步骤包括,
执行事件类型的过滤或文件类型的过滤;
若执行事件类型的过滤,包括根据打开文件、关闭打开的文件、写入内容、创建目录、创建文件、删除文件、移除监控目录、移入监控目录或文件属性变化进行事件过滤;
若执行文件类型的过滤,包括根据文件名的后缀及文件过滤类型进行事件过滤。
在一实施例中,还包括以下步骤,
判断是否为软连接;
若为软连接且实际路径在监控目录内,则只复制链接符号。
在一实施例中,所述当接收到启动指令时,初始化系统配置的步骤包括,
采用启动时所带的命令行参数或加载配置文件的方式进行系统配置的初始化。
在一实施例中,还包括以下步骤,
所述工作线程采用线程池技术创建;
其中,所述工作线程的数量为服务器的CPU数量的2倍或自定义。
在一实施例中,所述调用rsync工具进行文件数据同步的步骤包括,
对待同步的所述任务事件进行格式化,得到目标参数;
获取系统配置的远端IP、用户名和密码;
将所述目标参数、所述远端IP、所述用户名和所述密码组合成rsync命令行形式,并调用rsync工具执行文件数据同步操作。
在一实施例中,对目标监控文件夹进行文件状态的监控时,包括,
使用linux系统原生的inotify接口,对目标监控文件夹进行文件状态的监控。
上述各个实施例的具体描述步骤如下。
参照图2,首先,当程序启动时,进行系统配置的初始化,分为两种方式,可根据程序启动时所带的命令行参数进行系统的初始化;也可通过加载配置文件的方式进行系统初始化。
系统初始化的主要参数有work线程的数量、过滤文件的类型以及执行文件同步时的远端IP、用户名和密码等信息。
接着,执行数据同步操作和文件系统监控操作。
其中,数据同步操作包括以下步骤,
a)创建任务队列,任务队列可以保证同步文件的顺序按照文件系统产生的事件顺序依次执行。
b)利用线程池技术创建工作(work)线程,该work线程会等待对任务队列的数据并对其进行消费,获取任务事件后调用rsync工具进行文件数据同步。
其中,工作线程的数量可以依据系统配置,在配置文件中设定线程池数量;或者,配置文件中未配置该数值,则系统会自动获取服务器的CPU数量,令线程池的数量N为CPU核数的2倍,即N=CPU核数*2。
通过设定线程池的数量,可防止系统资源被无限申请而造成的系统不可用。
c)创建预设的延时队列的任务事件数据获取的线程,该线程按照一定的时间间隔,从延时队列中获取任务。
获取到的任务数据不是直接执行,而是将该任务数据推送到任务队列中,由work线程执行。
本实施例中,是否可以获取任务数据的标准为,当前系统时间是否大于等于任务的执行时间。
d)调用rsync工具进行文件数据同步时,首先对任务数据进行格式化,使待同步的任务数据成为rsync工具可识别的目标参数,同时,获取系统配置的远端IP、用户名和密码的信息,将以上所有信息数据组合,形成系统需要的rsync命令行形式,并交由系统执行文件数据同步操作。
进一步地,文件系统监控操作包括以下步骤,
a)创建延时队列,延时队列的功能是对如文件夹的创建和删除等进行缓冲,因为文件夹内可能会存在若干文件和子文件夹,如果不进行缓冲,则所有的文件都会产生一次文件同步的远端交互,而延时队列能将所有的文件同步操作整合成一次远端交互即可完成。
b)利用IO多路复用技术,创建文件系统的监控线程,该监控线程使用阻塞方式,对所要监控的文件夹进行所有文件状态的监控,同时可以实现该文件夹下子目录的递归监控。
c)对文件夹的字目录监控采用环形队列策略。其中,环形队列策略的递归步骤如下:
先决条件:预设环形队列,获取环形队列如deque及程序的配置模块中配置的需要监控的目录如root_path
add_watch_path:
具体地,
1、把root_path写到deque中;
2、循环遍历deque,判断是否存在root_path;
3、若root_path出队列,则此时队列是空的,停止遍历deque;
4、使用系统函数open_dir函数读取root_path,判断目录下的每一个子项;
5、如果子项是文件就忽略;
6、如果子项是文件夹,则把该子项写入到deque中,此时队列存在数据,返回步骤2,继续遍历deque,判断是否存在root_path,若存在则使用系统函数open_dir函数读取root_path,判断目录下的每一个子项;
7、处理完root_path下的所有子项,如果有文件夹,则此时deque中肯定有数据,循环还会继续,直至环形队列中无数据,说明该监控的根目录递归完成。
目前主流的文件同步工具中,均使用子目录递归的方式进行文件系统的遍历监控,考虑到系统对递归层级的限制,本申请使用了环形队列的方式,当遍历一个目录时,如发现存在子目录则将该子目录推送到环形队列中,遍历流程的上一次会不停的查询此环形队列中是否有数据,如果有则说明还存在子目录;若环形队列无数据,则说明该监控的根目录已经递归完成。
在一实施例中,同时执行数据同步操作和文件系统监控操作,以并行执行文件数据同步操作和文件系统监控操作,进而更能适应大数据量的文件数据传输。
在一实施例中,如果监控的文件系统有事件发生,如创建、修改、删除、移出、移入、文件属性变化等,则先进行监控事件的过滤,以排除需要忽略的选项。其中,若发生的事件未被过滤,则将未被过滤的所述事件更新为待同步的事件;若发生的事件被过滤,则被过滤的事件停止执行文件数据同步操作。
其中,事件的过滤分为事件类型的过滤和文件类型的过滤两种。本实施例中,排除/过滤的事件类型可在配置文件中预先设置。
事件类型的过滤,具体包括打开文件、关闭打开的文件、写入内容、创建目录、创建文件、删除文件、移除监控目录、移入监控目录、文件属性变化。
具体监控过滤哪一类的事件,可在使用时根据项目需要配置。
本实施例中,若不进行事件类型的监控过滤配置,系统会默认对所有事件都进行监控过滤。例如,若删除了一个文件,但在配置时没有配置删除文件的监控选项,则远端对应的文件内容不会被删除。
文件类型的过滤,包括根据文件名的后缀进行过滤,以及设定文件过滤类型。
具体过滤哪些文件类型,可在配置文件中进行配置。
本实施例中,如果没有预先配置,则系统默认所有类型的文件都会被过滤。例如,若配置文件过滤类型是c++代码类型(cpp),则本地任何cpp类型的文件都不会被同步到远端,即若正在编辑一个test.cpp的文件,则这个文件在任何时候都不会被同步到远端。
当监控的文件系统满足事件同步条件时,则将待同步的事件推送至延时队列;
再从延时队列中获取任务事件,将任务事件推送至任务队列并执行工作线程。
进一步地,当监控的文件系统满足事件同步条件时,则将待同步的事件推送至延时队列时,还包括以下步骤,
判断待同步的事件是否为文件夹类型;
若待同步的事件为文件夹类型,则增加延时队列的缓冲时间设置。
具体地,系统接口中有很多函数(如stat函数),可获取路径来源是文件还是文件夹;若待同步的事件为文件夹类型的操作,则增加缓冲时间设置;若待同步的事件为文件类型的操作,则不需要设置缓冲时间。
本实施例中,缓冲时间设置的数据在借助配置文件实现,其中,小文件的系统同步的缓冲时间可以设置1秒至5秒范围内,大文件的系统同步的缓冲时间可以设置为10秒至20秒范围内。
进一步地,还包括以下步骤,
判断是否为软连接;
若为软连接且实际路径在监控目录内,则只复制链接符号;
若为软连接且实际路径在监控目录外,则复制实际数据和链接符号。
具体地,基于lstat系统接口对软连接进行监控,包括判断是否为软连接,以及该连接是否为外部目录等辅助功能。
如果软连接的实际路径在监控目录(root_path)内,则称为内部软连接,不需要对实际数据进行重复复杂copy,只要把链接符号也进行复杂copy即可。
如果软连接的实际路径在监控目录外,则称为外部软连接,此时则需要进行实际数据的复制copy。
其中,外部软连接的判断依据为,监测软连接所指向的源文件的绝对路径字符串file_path是否包含监控的根目录watch_root字符串,若软连接所指向的源文件的绝对路径字符串包含监控的根目录字符串,则判断为外部软连接。
综上所述,一种基于rsync的文件实时同步方法,当接收到启动指令时,初始化系统配置,为后续文件数据的实时同步做好准备;创建任务队列并执行工作线程,任务队列可以保证同步文件的顺序按照文件系统产生的事件顺序依次执行,工作线程会等待任务队列的数据并对其进行消费,工作线程用于在获取任务事件后,调用rsync工具进行文件数据同步;创建延时队列并执行监控线程,监控线程用于对目标监控文件夹进行文件状态的监控,因为文件夹内可能会存在若干文件和子文件夹,如果不进行缓冲,则所有的文件都会产生一次文件同步的远端交互,设置延时队列对如文件夹的创建和删除等进行缓冲,以将所有的文件同步操作整合成一次远端交互,极大减少了与对端的交互次数,减少了文件实时同步过程中不必要的通讯;当监控的文件系统满足事件同步条件时,则将待同步的事件推送至延时队列,再从延时队列中获取任务事件,将任务事件推送至任务队列并执行工作线程,通过对文件系统进行监控,并在满足条件时自动触发执行工作线程,以及,使用线程池+消息队列技术,保证并发性能的同时兼顾了系统对软件运行时的资源约束,基于rsync实现文件数据的同步及备份,无任何依赖,保证了文件数据同步过程的稳定性,无需编写shell脚本并配合定时器实行,监控粒度更精细,筛选能力更强,改善了带宽占用的情况。
一种基于rsync的文件实时同步方法的有益效果如下:
1、使用线程池+消息队列技术保证并发性能的同时兼顾了系统对软件运行时的资源约束;
2、使用IO多路复用+条件变量通信技术提高软件的性能;
3、使用延时策略,在文件夹创建和文件夹删除的情况下,极大的减少了与对端的交互次数;
4、使用环形队列策略替代了递归策略,减小了系统递归对文件夹深度的限制。
5、使用C/C++和Linux内核原生的文件系统监控模块,无任何依赖,提供了软件的稳定性。
6、可以实现对软连接目录的监控。
7、提供多端点(可配置)的文件同步功能。
8、提供远端传输限速及文件类型模式匹配功能。
参照图3,本申请实施例还提供一种基于rsync的文件实时同步装置,该一种基于rsync的文件实时同步装置与上述实施例中一种基于rsync的文件实时同步方法一一对应。该一种基于rsync的文件实时同步装置包括,
初始化模块,用于在接收到启动指令时,初始化系统配置;
任务队列模块,用于创建用于使文件数据同步的顺序按照文件系统产生的事件顺序依次执行的任务队列并执行工作线程,所述工作线程用于在获取任务事件后,调用rsync工具进行文件数据同步;
延时队列模块,用于创建用于将所有的文件同步操作整合成一次远端交互的延时队列并执行监控线程,所述监控线程用于对目标监控文件夹进行文件状态的监控;
文件系统监控模块,用于在监控的文件系统满足事件同步条件时,则将待同步的所述事件推送至所述延时队列;
数据同步模块,用于从所述延时队列中获取任务事件,将所述任务事件推送至所述任务队列并执行工作线程。
在一实施例中,文件系统监控模块还包括,
文件夹类型单元,用于判断待同步的所述事件是否为文件夹类型;
缓冲时间优化单元,用于在待同步的所述事件为文件夹类型时,增加所述延时队列的缓冲时间设置。
在一实施例中,数据同步模块还包括,
执行时间优化单元,用于按照预设的执行时间从所述延时队列中获取任务数据,其中,所述执行时间小于文件系统的当前时间。
在一实施例中,文件系统监控模块还包括,
环形队列单元,用于当遍历一个目录时,先判断是否存在子目录;若存在子目录,则将所述子目录推送至预设的环形队列中,直至所述环形队列中无数据,说明该监控的根目录递归完成。
在一实施例中,一种基于rsync的文件实时同步装置还包括,
事件过滤模块,用于当监控的文件系统满足事件发生条件时,先对发生的所述事件进行过滤;若发生的所述事件未被过滤,则将未被过滤的所述事件更新为待同步的事件;
若发生的所述事件被过滤,则被过滤的所述事件停止执行文件数据同步操作。
在一实施例中,事件过滤模块包括,
过滤类型单元,用于在过滤时判断是执行事件类型的过滤文件类型的过滤;
事件类型单元,用于若执行事件类型的过滤,包括根据打开文件、关闭打开的文件、写入内容、创建目录、创建文件、删除文件、移除监控目录、移入监控目录或文件属性变化进行事件过滤;
文件类型单元,用于若执行文件类型的过滤,包括根据文件名的后缀及文件过滤类型进行事件过滤。
在一实施例中,数据同步模块还包括,
软连接单元,用于判断是否为软连接;若为软连接且实际路径在监控目录内,则只复制链接符号。
关于一种基于rsync的文件实时同步装置的具体限定可以参见上文中对于一种基于rsync的文件实时同步方法的限定,在此不再赘述。
上述一种基于rsync的文件实时同步装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
在一个实施例中,提供了一种计算机设备,该计算机设备可以是服务器。该计算机设备包括通过系统总线连接的处理器、存储器、网络接口和数据库。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统、计算机程序和数据库。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现上述任意一种基于rsync的文件实时同步方法。
在一个实施例中,提供了一种计算机可读存储介质,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时实现以下步骤:
S1:当接收到启动指令时,初始化系统配置;
S2:创建用于使文件数据同步的顺序按照文件系统产生的事件顺序依次执行的任务队列并执行工作线程,所述工作线程用于在获取任务事件后,调用rsync工具进行文件数据同步;
S3:创建用于将所有的文件同步操作整合成一次远端交互的延时队列并执行监控线程,
所述监控线程用于对目标监控文件夹进行文件状态的监控;
S4:当监控的文件系统满足事件同步条件时,则将待同步的所述事件推送至所述延时队列;
S5:从所述延时队列中获取任务事件,将所述任务事件推送至所述任务队列并执行工作线程。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(ROM)、可编程ROM(PROM)、电可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)或闪存。易失性存储器可包括随机存取存储器(RAM)或者外部高速缓冲存储器。作为说明而非局限,RAM以多种形式可得,诸如静态RAM(SRAM)、动态RAM(DRAM)、同步DRAM(SDRAM)、双数据率SDRAM(DDRSDRAM)、增强型SDRAM(ESDRAM)、同步链路(Synchlink)DRAM(SLDRAM)、存储器总线(Rambus)直接RAM(RDRAM)、直接存储器总线动态RAM(DRDRAM)、以及存储器总线动态RAM(RDRAM)等。
所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,仅以上述各功能单元、模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能单元、模块完成,即将所述系统的内部结构划分成不同的功能单元或模块,以完成以上描述的全部或者部分功能。

Claims (12)

1.一种基于rsync的文件实时同步方法,其特征在于,包括以下步骤,
当接收到启动指令时,初始化系统配置;
创建用于使文件数据同步的顺序按照文件系统产生的事件顺序依次执行的任务队列并执行工作线程,所述工作线程用于在获取任务事件后,调用rsync工具进行文件数据同步;
创建用于将所有的文件同步操作整合成一次远端交互的延时队列并执行监控线程,所述监控线程用于对目标监控文件夹进行文件状态的监控;
当监控的文件系统满足事件同步条件时,则将待同步的所述事件推送至所述延时队列;
从所述延时队列中获取任务事件,将所述任务事件推送至所述任务队列并执行工作线程。
2.根据权利要求1所述的基于rsync的文件实时同步方法,其特征在于,所述当监控的文件系统满足事件同步条件时,则将待同步的所述事件推送至所述延时队列时,还包括以下步骤,
判断待同步的所述事件是否为文件夹类型;
若待同步的所述事件为文件夹类型,则增加所述延时队列的缓冲时间设置。
3.根据权利要求1所述的基于rsync的文件实时同步方法,其特征在于,从所述延时队列中获取任务数据时,还包括以下步骤,
按照预设的执行时间从所述延时队列中获取任务数据,其中,所述执行时间小于文件系统的当前时间。
4.根据权利要求1所述的基于rsync的文件实时同步方法,其特征在于,监控线程对目标监控文件夹进行文件状态的监控的步骤包括,
当遍历一个目录时,先判断是否存在子目录;
若存在子目录,则将所述子目录推送至预设的环形队列中,直至所述环形队列中无数据,说明该监控的根目录递归完成。
5.根据权利要求1所述的基于rsync的文件实时同步方法,其特征在于,还包括以下步骤,
当监控的文件系统满足事件发生条件时,先对发生的所述事件进行过滤;
若发生的所述事件未被过滤,则将未被过滤的所述事件更新为待同步的事件;
若发生的所述事件被过滤,则被过滤的所述事件停止执行文件数据同步操作。
6.根据权利要求5所述的基于rsync的文件实时同步方法,其特征在于,对发生的所述事件进行过滤的步骤包括,
执行事件类型的过滤或文件类型的过滤;
若执行事件类型的过滤,包括根据打开文件、关闭打开的文件、写入内容、创建目录、创建文件、删除文件、移除监控目录、移入监控目录或文件属性变化进行事件过滤;
若执行文件类型的过滤,包括根据文件名的后缀及文件过滤类型进行事件过滤。
7.根据权利要求1所述的基于rsync的文件实时同步方法,其特征在于,还包括以下步骤,
判断是否为软连接;
若为软连接且实际路径在监控目录内,则只复制链接符号。
8.根据权利要求1所述的基于rsync的文件实时同步方法,其特征在于,所述当接收到启动指令时,初始化系统配置的步骤包括,
采用启动时所带的命令行参数或加载配置文件的方式进行系统配置的初始化。
9.根据权利要求1所述的基于rsync的文件实时同步方法,其特征在于,还包括以下步骤,
所述工作线程采用线程池技术创建;
其中,所述工作线程的数量为服务器的CPU数量的2倍或自定义。
10.根据权利要求1所述的基于rsync的文件实时同步方法,其特征在于,所述调用rsync工具进行文件数据同步的步骤包括,
对待同步的所述任务事件进行格式化,得到目标参数;
获取系统配置的远端IP、用户名和密码;
将所述目标参数、所述远端IP、所述用户名和所述密码组合成rsync命令行形式,并调用rsync工具执行文件数据同步操作。
11.根据权利要求1所述的基于rsync的文件实时同步方法,其特征在于,对目标监控文件夹进行文件状态的监控时,包括,
使用linux系统原生的inotify接口,对目标监控文件夹进行文件状态的监控。
12.一种基于rsync的文件实时同步装置,其特征在于,包括,
初始化模块,用于在接收到启动指令时,初始化系统配置;
任务队列模块,用于创建用于使文件数据同步的顺序按照文件系统产生的事件顺序依次执行的任务队列并执行工作线程,所述工作线程用于在获取任务事件后,调用rsync工具进行文件数据同步;
延时队列模块,用于创建用于将所有的文件同步操作整合成一次远端交互的延时队列并执行监控线程,所述监控线程用于对目标监控文件夹进行文件状态的监控;
文件系统监控模块,用于在监控的文件系统满足事件同步条件时,则将待同步的所述事件推送至所述延时队列;
数据同步模块,用于从所述延时队列中获取任务事件,将所述任务事件推送至所述任务队列并执行工作线程。
CN202310628245.8A 2023-05-31 2023-05-31 一种基于rsync的文件实时同步方法及装置 Active CN117009309B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202310628245.8A CN117009309B (zh) 2023-05-31 2023-05-31 一种基于rsync的文件实时同步方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202310628245.8A CN117009309B (zh) 2023-05-31 2023-05-31 一种基于rsync的文件实时同步方法及装置

Publications (2)

Publication Number Publication Date
CN117009309A true CN117009309A (zh) 2023-11-07
CN117009309B CN117009309B (zh) 2024-05-07

Family

ID=88564358

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202310628245.8A Active CN117009309B (zh) 2023-05-31 2023-05-31 一种基于rsync的文件实时同步方法及装置

Country Status (1)

Country Link
CN (1) CN117009309B (zh)

Citations (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20070283050A1 (en) * 2006-06-05 2007-12-06 Seagate Technology, Llc Scheduling reporting of synchronization states
WO2009137977A1 (zh) * 2008-05-13 2009-11-19 华为技术有限公司 文件同步方法及装置
CN103258018A (zh) * 2013-04-27 2013-08-21 北京金和软件股份有限公司 一种精确监控目录文件夹中文件变化的文件同步方法
US20160019233A1 (en) * 2014-07-21 2016-01-21 Egnyte, Inc. System and method for policy based synchronization of remote and local file systems
CN106372526A (zh) * 2016-08-19 2017-02-01 上海爱数信息技术股份有限公司 一种监控文件变化和同步的方法及系统
CN106412088A (zh) * 2016-10-25 2017-02-15 深圳市万普拉斯科技有限公司 一种数据同步方法及终端
CN110704400A (zh) * 2019-09-29 2020-01-17 上海易点时空网络有限公司 实时数据同步方法以及装置、服务器
CN111159789A (zh) * 2019-12-26 2020-05-15 深信服科技股份有限公司 一种监控文件的方法及装置、设备、存储介质
CN111538710A (zh) * 2020-04-23 2020-08-14 苏州浪潮智能科技有限公司 一种基于rsync进行实时数据同步的方法及系统
US20200272603A1 (en) * 2019-02-22 2020-08-27 Rackware, Inc. File synchronization
CN112667374A (zh) * 2020-12-21 2021-04-16 苏州浪潮智能科技有限公司 一种线程同步方法、系统及介质
WO2021142965A1 (zh) * 2020-01-14 2021-07-22 深圳壹账通智能科技有限公司 数据同步方法、装置、计算机设备及存储介质
CN113688106A (zh) * 2021-10-27 2021-11-23 广东睿江云计算股份有限公司 文件监听方法及装置
CN114415603A (zh) * 2021-12-08 2022-04-29 哈尔滨工业大学(威海) 面向智慧养老的分布式数据调度监测系统、方法、终端
CN115203152A (zh) * 2022-07-21 2022-10-18 上海英方软件股份有限公司 一种基于目录监控文件增量同步的方法及装置

Patent Citations (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20070283050A1 (en) * 2006-06-05 2007-12-06 Seagate Technology, Llc Scheduling reporting of synchronization states
WO2009137977A1 (zh) * 2008-05-13 2009-11-19 华为技术有限公司 文件同步方法及装置
CN103258018A (zh) * 2013-04-27 2013-08-21 北京金和软件股份有限公司 一种精确监控目录文件夹中文件变化的文件同步方法
US20160019233A1 (en) * 2014-07-21 2016-01-21 Egnyte, Inc. System and method for policy based synchronization of remote and local file systems
CN106372526A (zh) * 2016-08-19 2017-02-01 上海爱数信息技术股份有限公司 一种监控文件变化和同步的方法及系统
CN106412088A (zh) * 2016-10-25 2017-02-15 深圳市万普拉斯科技有限公司 一种数据同步方法及终端
US20200272603A1 (en) * 2019-02-22 2020-08-27 Rackware, Inc. File synchronization
CN110704400A (zh) * 2019-09-29 2020-01-17 上海易点时空网络有限公司 实时数据同步方法以及装置、服务器
CN111159789A (zh) * 2019-12-26 2020-05-15 深信服科技股份有限公司 一种监控文件的方法及装置、设备、存储介质
WO2021142965A1 (zh) * 2020-01-14 2021-07-22 深圳壹账通智能科技有限公司 数据同步方法、装置、计算机设备及存储介质
CN111538710A (zh) * 2020-04-23 2020-08-14 苏州浪潮智能科技有限公司 一种基于rsync进行实时数据同步的方法及系统
CN112667374A (zh) * 2020-12-21 2021-04-16 苏州浪潮智能科技有限公司 一种线程同步方法、系统及介质
CN113688106A (zh) * 2021-10-27 2021-11-23 广东睿江云计算股份有限公司 文件监听方法及装置
CN114415603A (zh) * 2021-12-08 2022-04-29 哈尔滨工业大学(威海) 面向智慧养老的分布式数据调度监测系统、方法、终端
CN115203152A (zh) * 2022-07-21 2022-10-18 上海英方软件股份有限公司 一种基于目录监控文件增量同步的方法及装置

Also Published As

Publication number Publication date
CN117009309B (zh) 2024-05-07

Similar Documents

Publication Publication Date Title
US20230244404A1 (en) Managing digital assets stored as components and packaged files
US8315982B2 (en) Method, apparatus, program and system for migrating NAS system
CA2533916C (en) File system represented inside a database
US10929350B2 (en) Enhanced techniques for copying cloud stored files
CA2912468C (en) Virtual database rewind
CN106469087B (zh) 元数据输出方法、客户端和元数据服务器
CN107391634B (zh) 数据迁移方法及装置
US10346150B2 (en) Computerized system and method for patching an application by separating executables and working data using different images
US11163721B1 (en) Snapshot change list and file system indexing
CN114528255A (zh) 元数据管理方法、电子设备及计算机程序产品
CN108572888B (zh) 磁盘快照创建方法和磁盘快照创建装置
CN113342741B (zh) 快照实现方法及装置、电子设备及计算机可读存储介质
RU2554851C2 (ru) Захват и загрузка состояний операционной системы
US20130041868A1 (en) Data synchronization
CN117009309B (zh) 一种基于rsync的文件实时同步方法及装置
EP2006772B1 (en) Database system and method for external backup
US9916155B2 (en) Projects browser for development environments
US11010408B2 (en) Hydration of a hierarchy of dehydrated files
CN115587099A (zh) 一种分布式的表锁应用方法、装置、存储介质及电子设备
ZA200510092B (en) File system represented inside a database
CN114201207A (zh) 一种资源同步方法、装置、电子设备及存储介质
CN108376104B (zh) 节点调度方法及装置、计算机可读存储介质
CN108874592B (zh) 一种针对Log-structured存储引擎的数据冷备方法及系统
CN117370080B (zh) 用于Hive的数据备份和数据恢复方法、系统、设备及介质
JP2007072805A (ja) 電子文書管理システム、電子文書クライアント及び電子文書管理サーバ

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant