1引言
随着民航空管气象业务不断发展,各地区气象中心和机场气象台对气象数据的需求不断增加,气象业务需要下载的数据也日益递增。由于气象部门内部各业务系统均有需求获取数据,目前民航西南空管局气象中心每日下载后在各系统之间同步的数据量在1T以上,数据种类有50余类,对数据同步软件需求非常高。
现在市场上成熟的商用数据同步软件有Goodsync,Bestsync等,都具有数据同步和数据验证等丰富的功能,但是这些软件存在一个问题,即耗费大量时间在数据验证阶段,导致同步数据的时间耗时较长。而这个问题由于气象行业的特殊性影响非常大,因为在实际工作中,气象业务对数据实时性要求非常高,比如气象雷达数据,平均每六分钟生成,而西南地区雷达拼图产品需要处理西南地区二十多家机场的数据再生成产品,如果在同步阶段耗费太多时间的话,会影响产品的及时性和用户的体验度。在这种情况下,民航气象部门急需一个能快速同步数据,同时也能保证数据完整性的数据同步软件。
2软件设计
2.1软件设计原则
2.1.1快速同步原则
本软件设计应该具有快速同步两端数据的功能,保证气象数据能够快速完整地从数据源服务器传输到目标服务器。数据传输时间应尽可能短,尽量缩短数据验证的时间。
2.1.2 多任务原则
本软件设计应该具有多任务运行的功能,保证不同数据源不同数据种类的任务能够同时运行,并且任务之间互相不影响,平均分配带宽,不互相挤占资源。
2.1.3 数据完整性原则
本软件设计应该保证传输数据的完整性,数据源服务器和目标服务器的数据应该完全一致。传输方式采用ftp方式,TCP/IP协议保证数据传输过程。传输完成后采用MD5校验码和文件大小对比的算法来保证数据同步两边的一致性,MD5校验码和文件大小对比既可以快速完成数据验证,也可以较准确的保证数据的完整性。
2.1.4 易用性原则
本软件设计采用配置文件的方式进行配置数据同步的ip地址,用户名密码,及数据文件夹等要素,系统启动后读取当前配置文件然后进行启动同步任务。
2.2 软件平台设计
本软件设计使用c#语言基于.net平台开发,适用于运行在Windows系统上
2.3 软件流程设计
本软件流程设计采用迭代架构,首先软件从数据源服务器通过ftp获取数据源服务器文件列表和文件大小,然后同样方式获取目标服务器上的文件列表和文件大小,将两个列表进行比对,排查出不一样的文件形成数据同步列表。然后依据数据同步列表一次从数据源服务器将文件通过ftp方式下载到目标服务器,命名为临时文件,然后与源文件进行MD5校验和文件大小对比,校验对比一致后将临时文件重命名后覆盖目标文件。如果MD5校验和大小对比不通过,则重新下载。最后完成数据同步,再依据数据同步列表开始进行下一个文件同步,依次进行。
2.4 软件功能设计
本软件设计具有以下功能:
2.4.1 数据同步:通过ftp方式将数据源服务器文件系统里的数据传输到目标服务器文件系统相应文件夹下,并保证两边服务器的数据一致。
2.4.2 数据校验: 每次数据传输完成后将数据源服务器的数据和目标服务器里的数据进行MD5校验比对,同时对比文件大小是否完全一样,如果MD5校验和文件大小对比均通过则视为两边数据一致
2.4.3. 配置文件:通过设置配置文件,可以设置多个数据同步任务,可以设置数据源服务器和目标服务器地址和相应数据文件夹,数据文件的格式,数据文件的时间等配置,灵活生成不同的数据同步任务。
3软件实现
3.1 数据同步关键代码
outputStream = new FileStream(filename, FileMode.Create);//创建数据流
FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();//获取返回值
Stream ftpStream = response.GetResponseStream();//获取返回列表
while (readCount > 0) { outputStream.Write(buffer, 0, readCount);//写入数据流
readCount = ftpStream.Read(buffer, 0, bufferSize);//读取源数据流}
3.2 数据校验关键代码
FileStream = new System.IO.FileStream(pathName, System.IO.FileMode.Open,
System.IO.FileAccess.Read, System.IO.FileShare.ReadWrite));//打开文件流
HashValue = MD5Hasher.ComputeHash(FileStream);//计算哈希值
HashData = System.BitConverter.ToString(HashValue);//转换为MD5码
HashData = HashData.Replace("-", "");//去除-符号
4结语
本文设计并实现了一套民航空管气象数据同步软件,本软件实现了将数据源服务器和目标服务器两边数据同步并保持一致,软件同步速度加快,数据完整性较好,界面简单易懂,使用方便快捷,解决了目前民航空管气象部门各个系统间数据同步较慢的问题。
本软件于2021年在民航西南空管局气象中心上线使用,主要负责气象数值预报数据文件的同步任务。截止目前软件运行稳定,能圆满完成数据同步任务,并且比之前的数据同步软件提高了30%的同步时间,提高了数据到达各系统的及时性,提高了气象产品生成效率。
参考文献
[1]李扬, 耿昌宇, 张丽芬. 基于Socket通讯模式下的跨平台数据同步[J]. 北京理工大学学报, 2002, 22(1):81-84.
[2]黄序鑫, 聂瑞华, 罗辉琼,等. 基于SOA的数据同步技术研究与实现[J]. 计算机工程与设计, 2009(14):84-86+181.
[3]鲍婷婷, 陈鹏, 李玉涛. 基于消息中间件技术的分布式气象数据同步系统设计和实现[J]. 气象科技, 2018, 046(006):1124-1129.
[4]高峰, 王国复, 喻雯,等. 气象数据文件快速下载服务系统的设计与实现[J]. 应用气象学报, 2010(02):117-123.
[5]冯冬霞, 张晓澜. 自动气象站数据同步的实现[J]. 黑龙江气象, 2012, 29(004):35-35.