向筱铭,徐晓莉,蒋丽娟
(1.四川省气象探测数据中心,四川 成都 610072;2.高原与盆地旱涝灾害四川省重点实验室,四川 成都 610072)
数值预报产品多线程下载软件的设计与实现
向筱铭1,2,徐晓莉1,2,蒋丽娟1,2
(1.四川省气象探测数据中心,四川 成都 610072;2.高原与盆地旱涝灾害四川省重点实验室,四川 成都 610072)
针对数值预报产品数据量较大以及传统业务中使用FTP下载数据耗时较长、时效性较低等问题,研究并实现了基于FTP协议的数值预报产品多线程下载软件。软件基于Linux操作系统,通过对任务队列的管理实现数据的及时下载,通过多线程的方式提高数据的下载速度,缩短下载时间。此外,软件还具有数据缓冲区管理功能和断点续传功能。实验结果表明,使用该软件可有效减少数值预报产品在传输环节所花费的时间,提高资料的时效性。
数值预报;FTP;多线程;任务队列
Abstract:This paper introduces a multi-thread download software for numerical forecasting products based on FTP protocol,which is based on the long time and low timeliness of downloading large amount of data of numerical forecasting products by traditional FTP command.The software is developed under Linux operating system,and improves the download speed through the task queue management and multi-threaded way.In addition,the software also incorporates a data buffer management and breakpoint resume functions.The experimental results show that the software can effectively reduce the time it takes for the numerical forecast products to be transmitted and improve the timeliness of the data.
Keywords:numerical forecast products;FTP;multi-thread;task queue
随着气象业务的快速发展和预报技术手段的逐渐丰富,数值预报作为一种通过高性能计算机进行数值计算来预测未来一定时段的大气运动状态和天气现象的方法[1],已经表现出客观定量预报的巨大潜力,成为目前预报业务领域最具影响力的方法[2-5]。目前在业务中使用的数值预报产品主要包括T639全球中期天气数值预报系统模式产品、GRAPES区域中尺度数值预报系统模式产品、欧洲中心天气模式产品、日本天气模式产品、德国天气模式产品以及部分省份研发的区域数值模式产品等。数值模式产品一般表现为较大的数据量,以欧洲中心集合预报产品为例,该产品每时次文件大小超过20GB。
目前,常规数值模式产品主要通过CMACast卫星通信系统下发,但受限于系统容量,下发的产品种类有限,大多依赖于用户的主动调取,省级主要使用国内气象通信系统向国家级调取各类数值模式产品,并将传统FTP调取作为一种并行或备用手段;而各市州气象局或县气象局则根据所在省级数据共享方式采取相应措施,如基于省级提供的数据共享目录获取,或通过传统FTP调取。
传统FTP下载是通过Linux操作系统提供的FTP客户端和Shell脚本实现。在Shell脚本中依次调用ftp、user、prompt、passive、mget和quit等命令进行下载,下载方式为单线程方式,为避免将服务器上未完成接收的文件下载到本地以及重复下载等问题,下载任务的开始时间设定为服务器上完成数据接收之后的某个时间。传统FTP方式进行数据下载,主要表现为以下几个问题:
1.1 带宽利用率不高
数值预报产品文件较大,以业务中常用的集合预报产品为例,日本00Z(世界时)时次数值预报产品的文件大小约为1.2 GB,12 Z(世界时)时次数值预报产品的文件约为2.1 GB。欧洲数值预报产品每天获取两时次的数据,每次20.2 GB。将传统FTP下载模式用于数值预报产品下载时,下载的速度约为1.1 MB/s,而经过实际测试,该类业务最高带宽可达1.4 MB/s,因此,采用传统FTP方式下载,带宽利用率不高。
1.2 资料时效性较差
传统下载方式需等待服务器端该时次所有文件到达后再开始下载,而服务器端数值预报产品的到达时间较产品的发布时间具有一定的延时,且到达过程也具有一定的时延,待服务器端文件全部到达后再下载,会使得资料的时效性更差,因此需考虑一种新的下载机制,待服务器到达一个文件时,软件再开始下载,从而提高其时效性。
1.3 缺乏断点续传功能
传统的下载方式不具有断点续传的功能,当文件下载失败时,只能重新下载,效率不高,需要增加断点续传的功能,以减少资料下载所用的时间。
针对以上问题,遵循气象信息化的设计思路[6],设计并实现了基于FTP协议的数值预报产品下载软件,并以目前业务中使用的日本和欧洲集合预报产品为例,对软件的性能进行了分析。软件采用队列方式对下载任务进行管理,确保数据能够被及时下载。使用多线程下载数据,并支持断点续传和缓冲区管理等功能。
主要包括体系结构、下载任务管理、多线程下载和断点续传、缓冲区管理和软件界面等几方面的内容。
2.1 体系结构
为了更好适应业务体系的发展,降低软件的维护开销,提供较高的扩展性,数值预报产品下载软件设计为多层框架结构体系,软件开发语言为C语言,通过NetBeans及SSH协议实现集成化的软件开发环境,软件的体系结构如图1所示。
图1 体系结构Fig.1 System architecture
应用层:该层主要提供任务下载功能,在用户界面上,基于命令行模式,通过循环输出的字符界面,显示当前下载任务的进度、各线程下载速度、进度等详细信息。用户通过crontab命令配置任务的运行周期,即可实现任务的自动执行。软件的执行参数如表1所示,其中t参数对应字符串代表任务配置文件,包含下载文件的服务器路径、本地保存路径、文件名称、文件大小以及文件名的变化规则等。
表1 参数列表Tab.1 The parameter list
业务逻辑层:业务逻辑层由提供基本功能的基础模块和提供功能逻辑模块的业务组件组成。基础模块不完成具体业务,为业务组件提供操作系统级接口的封装,便于业务组件调用,包括TCP通信的封装和FTP协议的封装。业务组件完成文件下载过程中各步骤的具体实现,包括下载任务管理组件、配置文件管理组件、日志管理组件和连接管理组件。其中下载任务管理组件实现对任务状态的动态管理,提高下载文件的时效性;配置文件管理组件主要用于实现对配置的文件的读取;日志管理组件实现日志的文件级输出;连接管理组件实现对FTP会话连接的管理。采用上述设计的原因是在于提高模块的内聚性和降低模块间的耦合性,当系统逻辑变化或者需进行改进时,只需对相应业务组件进行修改即可,从而提高软件的可扩展性。
底层平台:底层平台主要由异构硬件平台和Linux操作系统组成。软件的功能很多依赖于GNU C LIB,因此也将其作为底层平台的一部分。
2.2 下载任务管理
为实现任务的高效下载,提高任务的时效性,任务管理的机制显得尤为重要。国家气象信息中心资料共享平台每天从日本和欧洲获取数据,服务器端的文件是逐个达到的,且整个过程持续一定时间。根据服务器端文件达到的特点,数值预报产品下载软件采用双队列分级管理的机制对下载任务进行管理,如图2所示。
图2 任务管理流程Fig.2 Task management plan
任务管理的机制如下:
①软件根据配置文件中所列出的下载文件列表,将任务分别存放于两个队列中,一个为未就绪任务队列,一个为已就绪任务队列,未就绪任务队列中存放当前服务器尚未完成达到的文件列表,已就绪任务队列中存放着服务器端已经到达,但尚未下载到本地的文件列表。
②软件运行时首先对服务器文件列表进行扫描,并将匹配的文件放入已就绪任务队列,然后逐个对已就绪任务队列的文件进行下载。当已就绪任务队列为空时,将对服务器文件列表进行扫描,并将匹配的文件放入已就绪文件队列,然后进行下载。
③为避免将正在发生更改的文件下载到本地,对于大小固定的文件,软件会将服务器端文件大小和期望文件大小(配置文件所配置的文件大小)进行匹配,只有大小匹配后,才将该任务放入已就绪队列中。而对于大小不固定的文件,软件会间隔一段时间进行两次扫描,并将其大小进行对比,两次大小一样,才将其放入已就绪任务队列中。
④为降低对服务器资源的占用,两次服务器列表扫描时间的间隔的初始值配置为1 min,并随着对服务器扫描次数的增加而逐渐增大至上限值。
2.3 多线程下载和断点续传
多线程下载是提高任务下载速度的有效手段,而断点续传则可以在任务由于意外情况停止的情况下,继续下载未完成的部分。在实现时,它们具有紧密的联系,因此将其合并进行介绍。
要基于FTP协议实现断点续传,需要服务器支持REST指令,该指令并非标准FTP服务器必须支持的指令,因此需要在下载前,通过REST 指令进行测试,如果服务器正常执行该命令,则服务器支持该指令,REST后的数字即表示文件的偏移位置。
为了支持多线程下载,需要根据文件的大小和线程的数量进行分块,从而使得各线程的下载可同时进行,加快下载速度。同时,为支持断点续传,尤其是在重新启动下载任务后线程数量改变的情况,特设计了如图3的结构来记录线程所对应的分散数据块。
图3 文件分块下载结构Fig.3 The structure of file block
线程使用动态数组管理,其中包含一个指向待下载数据块结构体的指针,数据块结构体中记录着相对于文件起始位置的偏移量、数据块的大小、占用标志和指向下一个数据块的指针,当新建立一个任务时,将文件大小按照线程数量进行平分。当任务暂停时,数据块信息将和线程信息一起写入文件中,待任务重新启动时,若线程数量不变,则读取各个线程的信息和数据块信息,继续进行下载,如果线程数量改变,将按照现有线程数量进行数据块的重新分配,实现任务的平均分配[7]。
2.4 缓冲区管理
由于文件被分块下载,每接收一次数据就进行一次数据写入的机制将导致反复多次的磁头启动和写硬盘,带来较大的磁盘开销,因此需设置缓冲区,待接收的数据达到一定数量时,再一次性写入磁盘。软件使用基于链表实现的队列进行缓冲区管理,如图4所示。
图4 缓冲区管理Fig.4 Buffer management
每个线程接收到一定量的数据后,并不立刻写入硬盘,而是将其挂靠在队列中,并更新队列所管理的缓冲区大小,待缓冲区数据大小达到所设置的缓冲区大小时,软件开启一个新的缓冲区队列头,然后将放满的缓冲区数据写入硬盘,并释放对应的内存块。
2.5 软件界面
软件界面主要用于软件与使用者之间进行信息交互,由于该软件的应用场景是在后台定期运行,根据任务列表下载相应的数值预报产品文件,因此其界面显示是在Linux终端中,通过程序输出的字符界面来呈现。界面主要包括历次下载的详情,当前正在下载文件的文件名、文件大小,下载进度,下载速度以及各个下载线程的下载进度。使用者可以通过该界面获取当前下载的详细情况。
测试工作在四川省气象探测数据中心机房进行,通过从国家级下载日本和欧洲数值模式产品,获取测试下载的平均速度、耗时和资源占用情况,并对测试数据加以分析。
为了检测随着线程数量变化对系统下载速度和资源占用的影响,对不同数量线程情况下从国家级下载集合预报产品下载速度和CPU占用率进行测试,最终结果如图5所示。
从图中可以看出,随着线程的增加,下载速度有所增加,但是当线程数为3及其以上时,速度基本不变,由此可推测该速度已经达到了该类业务在QoS[7]下的最高速度。另外,从CPU占用率的曲线可以看出,随着线程数量的增加,系统开销也会相应增大。综合考虑业务对时效性的要求,将下载线程数设置为2,此时可达到最高下载速度,且资源占用相对较少。
图5 资源占用测试Fig.5 The test of resources occupancy
将下载线程数设置为2之后,分别使用传统FTP方式和数值预报产品下载软件对所需的日本和欧洲集合预报产品进行了下载,统计每天下载的结果,并计算相关数据平均值,最终结果如表2所示。其中“平均启动延时”指服务器上出现该时次资料的时间和本地开始下载该时次资料时间的差值。
从表中可以看出,相对于传统FTP的单线程下载方式,数值预报产品下载软件不仅通过使用多线程方式提高了资料的下载速度,还从任务管理的角度入手,在设置的间隔时间内访问服务器,以获取最新资料的到达情况,一旦发现有到达的文件,即立即启动下载,相对于传统方式需等待文件全部到达完成再下载的模式,在很大程度上降低了任务的启动延时,从而进一步提高了资料的时效性。
表2 数值预报产品下载测试结果Tab.2 The test results of numerical forecast products download
各时次资料使用两种下载手段的延时对比结果如图6所示,该延时是指从服务器上具有该时次资料文件开始,到本地服务器下载完成该时次资料为止,两个时间的时间差。从图从可以看出,数值预报产品下载软件降低了资料的延时。若某时次资料的数据量越大,则使用数值预报产品下载软件提高资料时效性的作用越明显。
图6 资料延时对比结果Fig.6 The comparison result of data delay
软件基于FTP协议,设计了扩展性较强的系统架构,使用双队列分级管理机制对任务进行管理,提高了下载效率。引入多线程下载方式,缩短任务的下载时间,并支持断点续传。使用缓冲区对下载数据进行管理,降低磁盘的读写开销。软件作为四川省气象探测数据中心数值模式产品调取的并行方案,已经投入到业务运行中,取得良好效果。可通过修改配置文件,作为市州级或县级调取数值模式产品的下载软件。在扩展研究方面,由于对服务器的访问频率有所增加,会增加服务器端的开销,需要对服务器的访问机制进行进一步的优化研究。
[1] 冯芝祥,朱同生,曹书涛,等.数值天气预报在风电场发电量预报中的应用[J].风能,2010(04):56-59.
[2] 王强,张骁,王起唤.基于EC细网格产品对怀化地区日最高气温的预报及订正分析[J].贵州气象,2016,40(5):32-37.
[3] 朱文达,万雪丽,彭芳,等.2015年5—8月贵州区域中尺度WRF模式降水检验[J].贵州气象,2016,40(3):24-30.
[4] 白慧,段莹,王兴菊,等.基于DERF2.0模式产品对单站旬、月极端降水日数的预测[J].贵州气象,2016,40(1):1-6.
[5] 王红丽,廖留峰.WRF模式对西南地区干旱事件的模拟研究[J].贵州气象,2015,39(6):1-5.
[6] 田兰.对贵州气象信息化工作的理解和思考[J].贵州气象,2016,40(6):1-4.
[7] 董元元,邓浩江,倪宏,等.多业务网络中支持QoS保证的最优定价机制[J].北京邮电大学学报,2011(01):116-120.
DesignandImplementationofMulti-threadDownloadSoftwareforNumericalForecastProducts
XIANG Xiaoming1,2,XU Xiaoli1,2,JIANG Lijuan1,2
(1.Sichuan Meteorological Observation and Data Centre,Chengdu 610072,China;2.The Heavy Rain and Drought-Flood Disasters in Plateau and Basin Key Laboratory of Sichuan Province,Chengdu 610072.China)
TP311.52
B
1003-6598(2017)04-0072-05
2017-02-06
向筱铭(1985-),男,工程师,主要从事气象信息系统研发工作,E-mail: micxiang@foxmail.com。
四川省气象局“省级气象数据支撑环境及应用系统建设创新团队”资助。