一种高效文件传输系统的设计与实现
2014-04-29王琦韩安贾政王毓辉
王琦 韩安 贾政 王毓辉
【摘要】本文就企业集约化管理的需求,信息化集成平台的应用推广,使用集成平台处理业务、数据、信息已经渗透到企业安全、生产各个环节。数据、文件之间共享被越来越多的集成应用系统所使用,如实时监测数据文本、图文图纸、资料文件等。在企业信息化集成平台的使用过程中,文件传输的效率起着有至关重要的作用。系统的实现,为公司综合调度数据集成、企业信息化文件共享提供了有效的基础支撑。
【关键词】传输系统;集成信息化;校验码;事件;监听机制
引言
目前,随着企业集约化管理的需求,使用集成平台处理业务、数据、信息已经渗透到企业安全、生产各个环节。数据、文件之间共享被越来越多的集成应用系统所使用,如实时监测数据文本、图文图纸、资料文件等,需要构建一套企业集成类信息化平台,对作业现场各子系统数据进行集成与应用,达到实时监视与集中调度的目标。在某些应用场景下,数据在传输过程中需要考虑上传的及时性与数据的连续性,以保证对现场环境的实时监视,以保证对预警和故障的及时处理;同时在应用分析过程中,需要对现场数据的连续性分析,以保证数据的完整性和数据分析结果的准确性。
常规的文件传输系统更适应于下行多于上行传输的场景。而在企业的信息化集成平台上,客户端对上传文件的需求更为强烈。客户端存在有大量的文件需要上传至服务器,以实现数据处理、解析与存储备份及文件归档存储与备份等。常规的文件传输系统有以下缺点:一、上行与下行不对等,更注重下行传输;二、传输权限不易控制,权限认证手段种类繁多,步骤繁琐,例如FTP模式;三、对于大量小文件和频繁传输的场景,文件传输效率低下,多数情况下需要验证请求再传输。
1.实现目标
本文针对现有企业生产过程实时监测与应用平台中,基层单位小文件,多客户端,安全高效频繁传输的应用需求,设计一种基于TCP协议的远程高效文件传输系统,达到数据及时、高效、稳定传输,主要实现基于文件夹、文件创建事件的监听触发上传机制;一次握手,終身传输机制;自定义分发机制,满足多种业务应用;分块多线程传输机制提高传输效率;分级故障诊断等系统功能,同时该系统的核心技术亦可作为企业网盘的核心技术。
2.设计实现
系统基于TCP/IP技术,采用Socket方式进行设计,面向SOA的架构思路,利用windows服务实现在服务端提供服务,定义好数据传输方式,传输协议,数据格式,同时通过ip地址和端口进行服务访问。客户端通过连接服务器指定的端口进行消息交互。程序拓扑结构如图1所示。
图1 系统架构图
系统设计实现主要利用.Net Remoting技术,在windows 服务中注册文件传输服务,客户端利用Windows应用程序实现,在实现中利用分布式的设计思想,便于程序与系统功能扩展。
.NET远程处理(.NET Remoting)是微软 .NET Framework 中的一种网络通信技术,提供了一种允许对象通过应用程序域与另一对象进行交互的框架。可以使用 SOAP 以外的协议来通信,而在服务端和客户端之间所操作的方法近乎相同,客户端可以不必考虑使用的协议,即可访问服务端所开放的对象。
在Remoting中是通过通道(channel)来实现两个应用程序域之间对象的通信的。
客户端通过Remoting访问通道以获得服务端对象,再通过代理解析为客户端对象,远程对象代码运行在服务器上,然后客户端再通过Remoting连接服务器,获得该服务对象并通过序列化在客户端运行。
3.研究内容
3.1 统一权限认证体系的设计与实现
建立统一的权限认证体系,以控制文件传输权限,权限认证主要通过客户端调用服务器接口进行权限认证,如果正常登陆,则进行文件同步及创建监听事件。
3.2 大文件分块传输与算法设计
针对大文件传输特殊性要求,需要考虑对文件进行分块多线程进行传输,因此需要设定文件块大小的阈值,如512kb,小于等于512K时为小文件,反之为大文件;大文件分为多块之后,在传输之前每块均提取自身校验码;同时向服务器发送对应的文件基本信息及分块信息,校验码与文件均进行传输;同时系统根据文件分块个数分配多个线程的传输;单块数据传输后,仍使用同样的算法提取校验码,与原始校验码对比验证以确定当前数据块是否正确接收。各分块传输完成后,根据文件块索引,实现文件合并。
图2 文件分块传输逻辑图
3.3 文件转换库的设计
在某些特殊情况下,需要考虑规定接收文件的格式,比如图片类仅支持bmp、jpg、png和gif;客户端能够获取格式规定,并对本地的相关文件实现文件转换算法,例如传输图片文件时,客户端生成tiff格式的文件,则必须将该文件转换为bmp、jpg、png或gif中的一种才可以上传。对于客户端本身操作的文件,不符合格式的文件都可以通过算法转换为标准格式的文件。
因此在文件版传输版本过程中,需要考虑文件转换库的设计,即记录客户端文件名称、文件特征码、文件扩展名、服务端文件名称、转换后文件特征码、文件扩展名,服务器在启动过程中,扫描服务器某目录下的文件列表名称及校验码,与客户端对应目录文件校验码进行第一次比对,对服务器端不存在或不一致的文件名及校验码进行同步上传,文件信息比对主要用在客户端启动时,其他时间主要通过文件夹或文件事件进行同步更新。
3.4 敏捷传输机制的设计
在传统的传输设计过程中,主要通过时间轮询的方式判断某目录下文件是否发生了变化,同时对于某些文件处于变化状态中,然后进行对应的事件,在这种情况下既不利于文件的及时传输与数据的更新,也不利于程序的设计实现,变化中的状态文件需要加锁进行处理,否则会造成文件半个的传输或者传输异常。
系统在设计过程中采用C#中的FileSystem Watcher组件,实现对文件系统的监视,当目录或者文件发生增加、修改、删除等事件完成时,进行相关的事件驱动,快速地启动业务处理。系统主要针对FileSystemWatcher的Changed,Created,Deleted,Renamed等FileSystemEventArgs事件,实现当客户端创建目录或文件时,通过文件夹或文件创建成功事件,激发客户端通过服务器端接口创建对应目录或文件;当客户端更改目录时,通过文件夹更改成功事件,激发客户端通过服务器端接口更改对应目录;当客户端删除目录时,通过文件夹删除成功事件,激发客户端通过服务器端接口删除对应目录及目录中文件;
3.5 故障处理及重传方法的设计
系统基于网络传输,在传输过程中,难免因为网络故障而导致的传输网络中断,在公司集成化信息平台中,需要考虑不间断运行,因此需要及时对网络传输进行诊断,并提供一定的定位功能,可通过提示窗、控制台输出、日志记录等多种功能提供故障定位信息,例如网络中断异常、文件转换失败等故障均有记录可查,可辅助解决故障,同时根据故障状态或故障类型将故障划分类别,根据持续时间进行分级报警,进行窗體闪烁或语音报警提醒。
在传输过程中,网络中断,在传输中间过程会导致部分文件的中断或不完整,在服务器端通过文件校验对文件块进行检查,当发现文件块出现传输错误则向客户端发出错误回执,进行重发。
3.6 断点续传的设计
由于实时监测平台数据完整性要求,需要对传输的数据保持完整性,因此需要考虑文件时间戳标识对文件进行本地化存储,当发生网络中断时,文件暂存到本地,网络通断时,根据文件列表,依据文件的创建时间进行顺序上传,以保证数据有序性。
4.功能测试
测试环境采用局域网内的三台机器,一台作为服务器,两台作为客户端,分别实现对服务端与客户端程序部署。
4.1 测试准备
(1)建立客户端信息目录库:客户端目录库存储服务器地址、登录账号、密码、共享路径、是否自定验证登陆。如在客户端程序配置文件中服务器地址(192.168.1.1)、登陆账户(ABC)、密码(加密源码:123456)、共享路径为D:\F1;D:\F2。
(2)服务器初始化:设定好存放路径,如:G:\Data。在服务器上创建好实际路径,并将路径名称保存在配置文件中,加载转换对应的校验码库列表(主要与客户端转换后文件对比分析)。
(3)客户端初始化:监听共享路径为D:\F1;D:\F2下文件或者目录操作事件,同时在启动过程中,通过输入用户名、密码完成权限认证后,实现本地目录下文件监听。
4.2 过程测试
(1)初始自动同步:客户端登陆验证完成后,进行对应(举例D:\F1;D:\F2下)目录对应的服务器目录进行文件校验码的获取,如服务器对应G:\Data\ABC\F1目录下有一个文件D1.DOC,对应的文件校验码为AFCD1238,文件大小为1.32M,一个文件D2.DOC,对应的文件校验码为ABCD1238,文件大小为500K,F2目录不存在,则根据事件创建F2目录,则服务器上G:\Data\ABC\F2目录;客户端D:\F1下有文件D1.DOC,对应的文件校验码为AFFF1238,文件大小为1.32M,一个文件D2.DOC,对应的文件校验码为ABCD1238,文件大小为500K。D:\F2有一个P1.TIFF文件,根据对应的文件名和校验码进行判断,本次上传F1下的D1.DOC和F2下的P1.TIFF文件;
(2)文件传输:对于F1下的D1.DOC文件:根据前文示例,将512kb作为划分文件大小的标准,大于512kb的文件,按照每块512kb大小将整个文件分割成三个文件块之后再传输,传输完成后合成,进行保存,同时可根据服务器线程管理,启动线程资源分配,如服务器共有1000个接收线程,有空闲上传线程2个,则分配2个线程进行并行上传,服务器空闲线程为0,如先传递先两个512KB文件,文件传输完毕,则通知服务器线程回收,服务器空闲线程大于2,则单独分配1个空闲线程进行剩余数据块的传输,传输完成后,回收线程,所有块均传输完成后,合并所有块,完成大文件传输。对于F2下的P1.TIFF文件进行上传转换,采用SaveAs方式进行文件另存,同时将文件校验码记录到对应库中,以便于重传判别。
(3)故障处理及重传:传输过程中,通过停止网卡工作或断开网线方式进行,系统进行网络传输中断提醒,当中断故障持续5分钟,进行使用日志提醒或提示窗;故障持续时间超过10分钟则报警升级,通过语音报警箱进行提醒;同时对某一个特殊类型文件进行转换上传时,当文件转换失败进行记录可查。
(4)其他测试:网络中断以后,文件本地化暂存的断点续传测试,文件进行本地化暂存,当网络通以后,进行文件顺序上传。客户端对应目录下的文件、目录创建、删除、更新事件,服务端相关事件的响应。
(5)退出:当客户程序退出时,与服务端消息交互,服务端进行对应退出信息的记录,以防止客户端用户在文件数据传输过程中非法操作的追踪。
4.3 测试结果
通过测试,该文件传输系统高效的进行了文件的传输,解决了传统传输模式效率、稳定性及可控性问题,该系统更适合大量小文件频繁传输,有利于在企业集约化监测监管信息化平台中的数据共享集成。同时,服务端文件传输块的设计根据程序运行过程进行实时调整,以保证大文件所占比率在整个文件传输系统中的5%以下,从而避免过多的文件切块传输与合并另存,提高文件传输效率。
5.总结
本文就一种高效文件传输系统的设计与实现展开论述,系统就企业集约化监测监管信息化平台中的数据、文件之间共享建立了稳定高效的传输通道,在项目应用起着有至关重要的作用。在后期系统完善中尚需要考虑服务器端的可靠性,同时实现基于SOAP的多种协议的传输以满足越过代理服务器,实现SOCKET等被屏蔽的功能,以及建立统一的管理平台,支持多语言及远程管理功能。
参考文献
[1]高珍珍.跨库集成检索系统中数据源连接器的半自动生成[D].北京师范大学.
[2]赵文涛,魏红格.矿业信息异构数据库集成模型的研究[J].工矿自动化,2008(06).
[3]林怀恭,聂瑞华,等.基于ESB的共享数据中心的研究与实现[J].计算机应用与软件,2010,5.
[4]韩建国,杨汉宏,等.神华集团数字矿山建设研究[J].工矿自动化,2013(03).
[5]王渊,韩安,晁晓菲.煤炭集团公司生产安全调度指挥管理平台的建设构思[J].工矿自动化,2012(03).
作者简介:王琦(1971—),硕士,高级工程师,同煤集团机电副总工程师,主要从事矿山机电、信息化研究与应用工作。