APP下载

基于增量式同步的文件分发系统

2022-12-26兰善瑞王晓懿

铁路通信信号工程技术 2022年12期
关键词:分块增量备份

兰善瑞,王晓懿

(北京工业大学,北京 100020)

1 概述

随着地铁的智能化,产生了大量的计算机应用,地铁相关系统在使用过程中也需要对多个程序文件进行分发与维护[1]。如图 1所示,因为要保证数据安全,不能使用传统的商业化工具进行分发,需要操作人员携带程序文件进入真实的环境进行文件分发。如何保证文件分发安全,是地铁相关企业面临的主要问题。除此之外,高铁与地铁程序需要跨地区分布,进而导致文件分发需要面临低带宽、高延迟的网络环境。如何解决程序的安全快速更新以及低带宽环境下的文件分发效率低,是目前地铁企业比较关注的问题。

图1 文件分发场景Fig.1 File distribution scenario

2 文件分发问题概述

考虑到安全问题,目前地铁程序文件部署时,需要人员手动携带U盘进行拷贝。考虑到地铁运营的特殊性,这种方式很难满足需要,所以需要文件分发系统在局域网内快速进行分发。

国内外已经存在很多的文件分发系统或者文件分发工具,例如FileZilla、rsync以及多用于跨机备份的NetBackup、BackupPC等,这些文件分发系统都存在一些不足。首先,很多工具只能支持Unix系统或者Windows,兼容性不高;其次,大部分的文件传输系统都是全量式传输,对于大文件传输支持比较差,尤其在低带宽、高延迟情况下,容易传输失败[2];最后,系统大都只用于文件传输,难以支持程序这种特殊文件的维护。

3 文件分发系统设计与实现

针对上述存在的问题,以提高传输性能和传输安全性为目标,设计实现一个基于增量式同步的文件分发系统。首先,完成基本架构设计;其次,针对全量式传输效率低下以及低带宽、高延迟网络环境下的文件传输效率慢、容易传输失败的问题,设计了适应不同网络的增量式传输算法;最后,设计版本校验、文件备份与恢复、远程维护功能,来保证文件传输的安全性与可靠性。

3.1 系统架构

基于增量式同步的文件分发系统(简称系统)采用B/S[3]的架构,前端使用QT作为客户端,主要用于数据的显示与获取,同时向操作人员提供数据的增、删、改、查操作以及文件分发、远程维护等功能;后端使用python作为服务端,负责向前端提供接口,完成相关业务逻辑,调用底层传输模块完成数据分发,并维护数据层的数据;系统使用SSH的方式保证机器节点之间的安全连接,使用增量式传输与SCP结合的方式进行文件分发;系统采用关系型数据库MySQL存储相关数据,如图2所示。

图2 系统架构Fig.2 System architecture

3.2 适应不同网络的增量式传输算法

随着计算机技术的不断更新,高铁、地铁系统在使用过程中需要对多个程序文件进行更新与维护。目前高铁、地铁程序的更新,大部分数据都已经存在,修改的部分可能只是整个程序文件的一部分,如果传输整个文件,整个传输效率非常低下。传统的U盘拷贝或者全量式传输,尤其面向大文件传输时,文件传输耗时很长。

系统能够支持文件的增量式传输,通过对旧文件与新文件的比较,在传输过程中,只面向增量部分进行传输,从而减少传输内容,提高传输效率。

3.2.1 增量式传输算法的研究与优化

为解决兼容性问题,增量式传输算法基于rsync思想使用python进行实现。增量式传输算法分为4个模块,依次为分块模块、传输模块、查找模块、比对模块,分别用于增量部分的计算、传输、查找和比对[4]。具体流程如图 3所示。

图3 增量式比对算法流程Fig.3 Incremental alignment algorithm process

经过测试发现,实现的增量式传输算法性能太差,很难支持文件的快速分发。增量式算法中,主要占用时间比较多的为比对算法。考虑到python性能太差,这里使用C++对该模块进行重写,并通过pybind的方式将函数封装起来,用于分块和比对模块调用。为验证修改后性能的提高,分别对优化前后进行对比。对比结果如表 1所示。

表 1 增量式传输优化比较结果Tab.1 Incremental transmission optimization comparison results

为更直观地比较两者花费的时间,使用柱形图将两者花费的时间展示出来。 如图 4所示,增量式计算的总时间由原来的827.08 s缩减到20.74 s,缩减了将近40倍。

图4 增量式优化比较结果Fig.4 Incremental optimization comparison results

3.2.2 适应网络的自动分块算法

在真实场景进行文件分发时,往往会因为网络情况的不同导致分发速度不同。低带宽、高延迟的网络环境,往往会出现传输失败的情况。对于小文件传输来说,失败后再次传输,重传的代价比较小;对于大文件来说,失败后再次传输,代价会很大,导致文件分发花费的时间持续增加。本文使用适应不同网络条件的动态分块方法来解决大文件传输失败的问题。

1)网络条件的判断

网络判断方法很多,追其根源都是发送一个包并计算往返所花费的时间。经过调研与实验,ping命令即可满足当前需求,ping不仅可以判断网络是否通畅,还可以判断网络连接速度的快慢。ping底层使用ICMP协议,作为IP补充协议的ICMP,可以向主机或者路由器报告差错与异常情况。

2)网络条件的融合

在实际场景中服务器可能会向多个远程机器节点进行文件分发,设备距离服务器的位置有远有近,服务器与设备之间的网络情况自然不同。如果在分块时根据每一台设备的网络情况进行分块,随着设备的增加,分块的次数将会提高很多。但是在实际情况中,会发现很多设备的延迟大都相同,在相同的网络条件下进行分发,整体的传输时间不会相差太大。此时如果将网络条件相差不大的设备融合起来,即将网络条件相似的设备看成一个设备。这样在发送同一个文件时,分块的次数会得到大量的减少,从而减少分块花费的时间。

融合实际上就是聚类[5],简单说就是将相似的东西聚集在一起。对于聚类问题,计算机领域常使用聚类分析方法解决。考虑到网络花费时长数值比较小、比较连续,且对聚合后分成的类别和数量比较明确,本文使用K-means聚类算法[6]即可解决类似问题。

基于K-means的网络条件融合流程如图5所示,流程主要分为5步。1)输入通过上面网络条件判断后结果的集合;2)根据上述设定的K值,选择K个中心点;3)使用欧式距离计算数据点与中心点的距离并根据距离进行划分;4)根据距离,更新聚类中心;5)进行均值误差的判断,当连续两次聚类差距小于0.000 1时停止聚类,并将最后一次聚类的结果作为最后的聚类结果。

图5 基于K-means算法的网络条件融合流程Fig.5 Network condition fusion process based on K-means algorithm

3)文件分块标准

动态分块需要一个标准进行分块,分块标准主要依据文件大小和网络条件。

对于文件大小来说,以50 MB的文件作为基准,小于50 MB的文件不进行分块,其他的按照文件大小进行翻倍即可。大部分机器的网络延迟主要集中在0~1 000 ms之间,主要分布范围:0~10 ms、10~100 ms、100~300 ms、300~1000 ms、1 000 ms以上。根据不同的网络条件对文件分别进行分块,分别为1、2、3、5、10。

4)文件分块算法设计

分块算法实际上就是分类算法,文件大小以及网络条件是分类规则,块的个数或者大小是分类结果。在计算机领域,有很多分类算法,例如决策树[7]、贝叶斯、人工神经网络、K-近邻等。考虑到文件分块的标准数据量比较大以及决策树构造时不依赖任何较多的条件,所以选择决策树来进行文件分块。

随着计算机的不断发展,在机器学习[8]领域也产生了很多的机器学习库scikit-learn[9]作为一个高效可靠的机器学习框架,可支持分类、回归、聚类、降维。本文选择使用scikit-learn框架以及决策树分类方式,对文件进行动态分块。具体分块流程如下。

a. 数据集的准备

根据上述分块标准使用python脚本动态生成数据集。

b. 数据集的训练

读取数据集,将关键信息提取出来,并将数据存储到list中。设定决策树的深度为160, min_samples_split为2,将数据集进行训练,生成对应的决策树。

c. 数据的验证

首先验证训练数据。将训练数据作为输入进行预测,并将正确结果与错误结果统计出来;其次,抽取真实数据进行验证。

d. 模型的存储

sklearn框架提供存储模型接口,指定文件路径即可将模型存储下来。

3.3 文件分发针对实际问题的设计

在实际应用场景中,常常因为低带宽、高延迟的情况导致文件传输失败。文件因为传输失败导致不能使用,原文件在传输过程中也会被删除,从而导致文件丢失。尤其对于程序文件,可能会面临着紧急使用的情况,如果这时文件丢失,则会严重影响用户的正常使用。除此之外,对于文件分发系统来说,在文件传输过程中,可能会出现数据被恶意修改的情况,进而引发数据安全的问题。针对以上实际场景出现的问题,本文研究文件分发系统针对实际问题的设计是否可以进一步提高文件传输安全性与可靠性。

3.3.1 版本校验的设计

对版本校验进行研究与设计,为防止文件传输过程中被恶意修改或者文件分块导致文件部分数据丢失,版本校验使用MD5强验证的方式来判断传输内容是否被修改,从而提高文件传输的安全性。

结合MD5的特点与版本校验的需求,对版本校验的流程进行设计,具体流程如图 6所示。因为版本校验需要验证两台机器上文件是否相同,所以还涉及到远程传输。

图6 版本校验流程Fig.6 Version Verification Process

3.3.2 文件备份与恢复的设计

在文件传输过程中,往往因为网络原因或者人为原因等导致文件传输失败。传输文件时,一般系统会先将原有文件清除掉,再传输新的文件,如果这时文件传输失败,已经传输的文件可能只是整个文件的一部分。因为是部分文件,无法再进行使用,但是原有的文件已经被清除,从而出现文件丢失的问题。

针对上述文件传输失败导致的文件丢失问题进行研究。在文件发送之前,可以将文件备份到指定目录,如果文件传输失败,则将之前备份的文件恢复回来,从而保证文件不会出现丢失。

对文件备份的流程进行设计,具体流程如图 7所示。首先进行文件压缩,如果失败,返回备份失败。其次对压缩包拷贝,如果失败,返回备份失败。最后删除压缩包,如果失败,返回备份失败。

图7 文件备份流程Fig.7 File backup process

对文件恢复流程进行设计,具体流程如图 8所示。首先,根据文件路径将传输失败的文件删除,如果删除失败,返回文件恢复失败。其次,将之前文件备份的压缩包拷贝到文件路径中,如果拷贝失败,返回文件恢复失败。再次,将拷贝来的压缩包解压到当前路径,如果解压失败,返回文件恢复失败。最后,将拷贝来的压缩包删除。

图8 文件恢复流程Fig.8 File recovery process

3.3.3 远程维护的设计

SSH不仅可以建立连接,还可以支持执行远程机器命令的功能,可以为远程维护提供很好的解决方案。远程维护可以在SSH执行远程机器命令的基础上,对其进行封装,从而提高用户的易用性。

对远程维护的流程进行设计,具体流程如图 9所示。首先,从界面获取待执行的命令或者脚本文件。其次,使用SSH执行远程命令,等待完成。最后,获取执行结果,回显到界面。

图9 远程维护流程Fig.9 Remote maintenance process

4 系统实验与结果分析

针对低带宽环境的文件分发进行测试,本文对7台liunx机器使用Netem来配置低带宽以及传输延迟的环境。选择这7台机器对489.1 MB的文件分别使用SCP工具以及系统进行分发测试,测试结果如表2所示。

表 2 低带宽增量式传输实验数据Tab.2 Low bandwidth incremental transmission experimental data

为了更直观的对比上述两者,将二者传输花费的时长以折线图的形式展现,具体结果如图10所示。可以计算得出,在低带宽环境下,系统比SCP在性能上提高了大约52%,由此可见适应不同网络的增量式传输算法对低带宽环境的文件分发性能的提高起到了一定作用。

图10 低带宽增量式传输数据折线Fig.10 Low bandwidth incremental transmission data

5 结语

本文研究适应不同网络的增量式传输算法在低带宽、高延迟的网络条件下对传输性能的影响,通过实验证明该方法可以较好地解决低带宽的问题。通过研究文件分发系统针对实际问题的设计、对文件传输性能以及文件传输安全性的影响,经过实际项目的测试,发现版本校验、文件备份与恢复、远程维护的设计可以保证传输安全性与传输性能。

猜你喜欢

分块增量备份
导弹增量式自适应容错控制系统设计
VSAT卫星通信备份技术研究
提质和增量之间的“辩证”
钢结构工程分块滑移安装施工方法探讨
全现款操作,年增量1千万!这家GMP渔药厂为何这么牛?
关于4×4分块矩阵的逆矩阵*
分块矩阵在线性代数中的应用
创建vSphere 备份任务
“价增量减”型应用题点拨
旧瓶装新酒天宫二号从备份变实验室