向筱銘,徐曉莉,蔣麗娟
(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。
四川省氣象局“省級氣象數據支撐環境及應用系統建設創新團隊”資助。