向筱銘,徐曉莉,蔣麗娟
(1.四川省氣象探測數(shù)據(jù)中心,四川 成都 610072;2.高原與盆地旱澇災(zāi)害四川省重點實驗室,四川 成都 610072)
數(shù)值預(yù)報產(chǎn)品多線程下載軟件的設(shè)計與實現(xiàn)
向筱銘1,2,徐曉莉1,2,蔣麗娟1,2
(1.四川省氣象探測數(shù)據(jù)中心,四川 成都 610072;2.高原與盆地旱澇災(zāi)害四川省重點實驗室,四川 成都 610072)
針對數(shù)值預(yù)報產(chǎn)品數(shù)據(jù)量較大以及傳統(tǒng)業(yè)務(wù)中使用FTP下載數(shù)據(jù)耗時較長、時效性較低等問題,研究并實現(xiàn)了基于FTP協(xié)議的數(shù)值預(yù)報產(chǎn)品多線程下載軟件。軟件基于Linux操作系統(tǒng),通過對任務(wù)隊列的管理實現(xiàn)數(shù)據(jù)的及時下載,通過多線程的方式提高數(shù)據(jù)的下載速度,縮短下載時間。此外,軟件還具有數(shù)據(jù)緩沖區(qū)管理功能和斷點續(xù)傳功能。實驗結(jié)果表明,使用該軟件可有效減少數(shù)值預(yù)報產(chǎn)品在傳輸環(huán)節(jié)所花費的時間,提高資料的時效性。
數(shù)值預(yù)報;FTP;多線程;任務(wù)隊列
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
隨著氣象業(yè)務(wù)的快速發(fā)展和預(yù)報技術(shù)手段的逐漸豐富,數(shù)值預(yù)報作為一種通過高性能計算機進行數(shù)值計算來預(yù)測未來一定時段的大氣運動狀態(tài)和天氣現(xiàn)象的方法[1],已經(jīng)表現(xiàn)出客觀定量預(yù)報的巨大潛力,成為目前預(yù)報業(yè)務(wù)領(lǐng)域最具影響力的方法[2-5]。目前在業(yè)務(wù)中使用的數(shù)值預(yù)報產(chǎn)品主要包括T639全球中期天氣數(shù)值預(yù)報系統(tǒng)模式產(chǎn)品、GRAPES區(qū)域中尺度數(shù)值預(yù)報系統(tǒng)模式產(chǎn)品、歐洲中心天氣模式產(chǎn)品、日本天氣模式產(chǎn)品、德國天氣模式產(chǎn)品以及部分省份研發(fā)的區(qū)域數(shù)值模式產(chǎn)品等。數(shù)值模式產(chǎn)品一般表現(xiàn)為較大的數(shù)據(jù)量,以歐洲中心集合預(yù)報產(chǎn)品為例,該產(chǎn)品每時次文件大小超過20GB。
目前,常規(guī)數(shù)值模式產(chǎn)品主要通過CMACast衛(wèi)星通信系統(tǒng)下發(fā),但受限于系統(tǒng)容量,下發(fā)的產(chǎn)品種類有限,大多依賴于用戶的主動調(diào)取,省級主要使用國內(nèi)氣象通信系統(tǒng)向國家級調(diào)取各類數(shù)值模式產(chǎn)品,并將傳統(tǒng)FTP調(diào)取作為一種并行或備用手段;而各市州氣象局或縣氣象局則根據(jù)所在省級數(shù)據(jù)共享方式采取相應(yīng)措施,如基于省級提供的數(shù)據(jù)共享目錄獲取,或通過傳統(tǒng)FTP調(diào)取。
傳統(tǒng)FTP下載是通過Linux操作系統(tǒng)提供的FTP客戶端和Shell腳本實現(xiàn)。在Shell腳本中依次調(diào)用ftp、user、prompt、passive、mget和quit等命令進行下載,下載方式為單線程方式,為避免將服務(wù)器上未完成接收的文件下載到本地以及重復(fù)下載等問題,下載任務(wù)的開始時間設(shè)定為服務(wù)器上完成數(shù)據(jù)接收之后的某個時間。傳統(tǒng)FTP方式進行數(shù)據(jù)下載,主要表現(xiàn)為以下幾個問題:
1.1 帶寬利用率不高
數(shù)值預(yù)報產(chǎn)品文件較大,以業(yè)務(wù)中常用的集合預(yù)報產(chǎn)品為例,日本00Z(世界時)時次數(shù)值預(yù)報產(chǎn)品的文件大小約為1.2 GB,12 Z(世界時)時次數(shù)值預(yù)報產(chǎn)品的文件約為2.1 GB。歐洲數(shù)值預(yù)報產(chǎn)品每天獲取兩時次的數(shù)據(jù),每次20.2 GB。將傳統(tǒng)FTP下載模式用于數(shù)值預(yù)報產(chǎn)品下載時,下載的速度約為1.1 MB/s,而經(jīng)過實際測試,該類業(yè)務(wù)最高帶寬可達1.4 MB/s,因此,采用傳統(tǒng)FTP方式下載,帶寬利用率不高。
1.2 資料時效性較差
傳統(tǒng)下載方式需等待服務(wù)器端該時次所有文件到達后再開始下載,而服務(wù)器端數(shù)值預(yù)報產(chǎn)品的到達時間較產(chǎn)品的發(fā)布時間具有一定的延時,且到達過程也具有一定的時延,待服務(wù)器端文件全部到達后再下載,會使得資料的時效性更差,因此需考慮一種新的下載機制,待服務(wù)器到達一個文件時,軟件再開始下載,從而提高其時效性。
1.3 缺乏斷點續(xù)傳功能
傳統(tǒng)的下載方式不具有斷點續(xù)傳的功能,當(dāng)文件下載失敗時,只能重新下載,效率不高,需要增加斷點續(xù)傳的功能,以減少資料下載所用的時間。
針對以上問題,遵循氣象信息化的設(shè)計思路[6],設(shè)計并實現(xiàn)了基于FTP協(xié)議的數(shù)值預(yù)報產(chǎn)品下載軟件,并以目前業(yè)務(wù)中使用的日本和歐洲集合預(yù)報產(chǎn)品為例,對軟件的性能進行了分析。軟件采用隊列方式對下載任務(wù)進行管理,確保數(shù)據(jù)能夠被及時下載。使用多線程下載數(shù)據(jù),并支持斷點續(xù)傳和緩沖區(qū)管理等功能。
主要包括體系結(jié)構(gòu)、下載任務(wù)管理、多線程下載和斷點續(xù)傳、緩沖區(qū)管理和軟件界面等幾方面的內(nèi)容。
2.1 體系結(jié)構(gòu)
為了更好適應(yīng)業(yè)務(wù)體系的發(fā)展,降低軟件的維護開銷,提供較高的擴展性,數(shù)值預(yù)報產(chǎn)品下載軟件設(shè)計為多層框架結(jié)構(gòu)體系,軟件開發(fā)語言為C語言,通過NetBeans及SSH協(xié)議實現(xiàn)集成化的軟件開發(fā)環(huán)境,軟件的體系結(jié)構(gòu)如圖1所示。
圖1 體系結(jié)構(gòu)Fig.1 System architecture
應(yīng)用層:該層主要提供任務(wù)下載功能,在用戶界面上,基于命令行模式,通過循環(huán)輸出的字符界面,顯示當(dāng)前下載任務(wù)的進度、各線程下載速度、進度等詳細信息。用戶通過crontab命令配置任務(wù)的運行周期,即可實現(xiàn)任務(wù)的自動執(zhí)行。軟件的執(zhí)行參數(shù)如表1所示,其中t參數(shù)對應(yīng)字符串代表任務(wù)配置文件,包含下載文件的服務(wù)器路徑、本地保存路徑、文件名稱、文件大小以及文件名的變化規(guī)則等。
表1 參數(shù)列表Tab.1 The parameter list
業(yè)務(wù)邏輯層:業(yè)務(wù)邏輯層由提供基本功能的基礎(chǔ)模塊和提供功能邏輯模塊的業(yè)務(wù)組件組成。基礎(chǔ)模塊不完成具體業(yè)務(wù),為業(yè)務(wù)組件提供操作系統(tǒng)級接口的封裝,便于業(yè)務(wù)組件調(diào)用,包括TCP通信的封裝和FTP協(xié)議的封裝。業(yè)務(wù)組件完成文件下載過程中各步驟的具體實現(xiàn),包括下載任務(wù)管理組件、配置文件管理組件、日志管理組件和連接管理組件。其中下載任務(wù)管理組件實現(xiàn)對任務(wù)狀態(tài)的動態(tài)管理,提高下載文件的時效性;配置文件管理組件主要用于實現(xiàn)對配置的文件的讀取;日志管理組件實現(xiàn)日志的文件級輸出;連接管理組件實現(xiàn)對FTP會話連接的管理。采用上述設(shè)計的原因是在于提高模塊的內(nèi)聚性和降低模塊間的耦合性,當(dāng)系統(tǒng)邏輯變化或者需進行改進時,只需對相應(yīng)業(yè)務(wù)組件進行修改即可,從而提高軟件的可擴展性。
底層平臺:底層平臺主要由異構(gòu)硬件平臺和Linux操作系統(tǒng)組成。軟件的功能很多依賴于GNU C LIB,因此也將其作為底層平臺的一部分。
2.2 下載任務(wù)管理
為實現(xiàn)任務(wù)的高效下載,提高任務(wù)的時效性,任務(wù)管理的機制顯得尤為重要。國家氣象信息中心資料共享平臺每天從日本和歐洲獲取數(shù)據(jù),服務(wù)器端的文件是逐個達到的,且整個過程持續(xù)一定時間。根據(jù)服務(wù)器端文件達到的特點,數(shù)值預(yù)報產(chǎn)品下載軟件采用雙隊列分級管理的機制對下載任務(wù)進行管理,如圖2所示。
圖2 任務(wù)管理流程Fig.2 Task management plan
任務(wù)管理的機制如下:
①軟件根據(jù)配置文件中所列出的下載文件列表,將任務(wù)分別存放于兩個隊列中,一個為未就緒任務(wù)隊列,一個為已就緒任務(wù)隊列,未就緒任務(wù)隊列中存放當(dāng)前服務(wù)器尚未完成達到的文件列表,已就緒任務(wù)隊列中存放著服務(wù)器端已經(jīng)到達,但尚未下載到本地的文件列表。
②軟件運行時首先對服務(wù)器文件列表進行掃描,并將匹配的文件放入已就緒任務(wù)隊列,然后逐個對已就緒任務(wù)隊列的文件進行下載。當(dāng)已就緒任務(wù)隊列為空時,將對服務(wù)器文件列表進行掃描,并將匹配的文件放入已就緒文件隊列,然后進行下載。
③為避免將正在發(fā)生更改的文件下載到本地,對于大小固定的文件,軟件會將服務(wù)器端文件大小和期望文件大小(配置文件所配置的文件大小)進行匹配,只有大小匹配后,才將該任務(wù)放入已就緒隊列中。而對于大小不固定的文件,軟件會間隔一段時間進行兩次掃描,并將其大小進行對比,兩次大小一樣,才將其放入已就緒任務(wù)隊列中。
④為降低對服務(wù)器資源的占用,兩次服務(wù)器列表掃描時間的間隔的初始值配置為1 min,并隨著對服務(wù)器掃描次數(shù)的增加而逐漸增大至上限值。
2.3 多線程下載和斷點續(xù)傳
多線程下載是提高任務(wù)下載速度的有效手段,而斷點續(xù)傳則可以在任務(wù)由于意外情況停止的情況下,繼續(xù)下載未完成的部分。在實現(xiàn)時,它們具有緊密的聯(lián)系,因此將其合并進行介紹。
要基于FTP協(xié)議實現(xiàn)斷點續(xù)傳,需要服務(wù)器支持REST指令,該指令并非標(biāo)準(zhǔn)FTP服務(wù)器必須支持的指令,因此需要在下載前,通過REST 指令進行測試,如果服務(wù)器正常執(zhí)行該命令,則服務(wù)器支持該指令,REST后的數(shù)字即表示文件的偏移位置。
為了支持多線程下載,需要根據(jù)文件的大小和線程的數(shù)量進行分塊,從而使得各線程的下載可同時進行,加快下載速度。同時,為支持斷點續(xù)傳,尤其是在重新啟動下載任務(wù)后線程數(shù)量改變的情況,特設(shè)計了如圖3的結(jié)構(gòu)來記錄線程所對應(yīng)的分散數(shù)據(jù)塊。
圖3 文件分塊下載結(jié)構(gòu)Fig.3 The structure of file block
線程使用動態(tài)數(shù)組管理,其中包含一個指向待下載數(shù)據(jù)塊結(jié)構(gòu)體的指針,數(shù)據(jù)塊結(jié)構(gòu)體中記錄著相對于文件起始位置的偏移量、數(shù)據(jù)塊的大小、占用標(biāo)志和指向下一個數(shù)據(jù)塊的指針,當(dāng)新建立一個任務(wù)時,將文件大小按照線程數(shù)量進行平分。當(dāng)任務(wù)暫停時,數(shù)據(jù)塊信息將和線程信息一起寫入文件中,待任務(wù)重新啟動時,若線程數(shù)量不變,則讀取各個線程的信息和數(shù)據(jù)塊信息,繼續(xù)進行下載,如果線程數(shù)量改變,將按照現(xiàn)有線程數(shù)量進行數(shù)據(jù)塊的重新分配,實現(xiàn)任務(wù)的平均分配[7]。
2.4 緩沖區(qū)管理
由于文件被分塊下載,每接收一次數(shù)據(jù)就進行一次數(shù)據(jù)寫入的機制將導(dǎo)致反復(fù)多次的磁頭啟動和寫硬盤,帶來較大的磁盤開銷,因此需設(shè)置緩沖區(qū),待接收的數(shù)據(jù)達到一定數(shù)量時,再一次性寫入磁盤。軟件使用基于鏈表實現(xiàn)的隊列進行緩沖區(qū)管理,如圖4所示。
圖4 緩沖區(qū)管理Fig.4 Buffer management
每個線程接收到一定量的數(shù)據(jù)后,并不立刻寫入硬盤,而是將其掛靠在隊列中,并更新隊列所管理的緩沖區(qū)大小,待緩沖區(qū)數(shù)據(jù)大小達到所設(shè)置的緩沖區(qū)大小時,軟件開啟一個新的緩沖區(qū)隊列頭,然后將放滿的緩沖區(qū)數(shù)據(jù)寫入硬盤,并釋放對應(yīng)的內(nèi)存塊。
2.5 軟件界面
軟件界面主要用于軟件與使用者之間進行信息交互,由于該軟件的應(yīng)用場景是在后臺定期運行,根據(jù)任務(wù)列表下載相應(yīng)的數(shù)值預(yù)報產(chǎn)品文件,因此其界面顯示是在Linux終端中,通過程序輸出的字符界面來呈現(xiàn)。界面主要包括歷次下載的詳情,當(dāng)前正在下載文件的文件名、文件大小,下載進度,下載速度以及各個下載線程的下載進度。使用者可以通過該界面獲取當(dāng)前下載的詳細情況。
測試工作在四川省氣象探測數(shù)據(jù)中心機房進行,通過從國家級下載日本和歐洲數(shù)值模式產(chǎn)品,獲取測試下載的平均速度、耗時和資源占用情況,并對測試數(shù)據(jù)加以分析。
為了檢測隨著線程數(shù)量變化對系統(tǒng)下載速度和資源占用的影響,對不同數(shù)量線程情況下從國家級下載集合預(yù)報產(chǎn)品下載速度和CPU占用率進行測試,最終結(jié)果如圖5所示。
從圖中可以看出,隨著線程的增加,下載速度有所增加,但是當(dāng)線程數(shù)為3及其以上時,速度基本不變,由此可推測該速度已經(jīng)達到了該類業(yè)務(wù)在QoS[7]下的最高速度。另外,從CPU占用率的曲線可以看出,隨著線程數(shù)量的增加,系統(tǒng)開銷也會相應(yīng)增大。綜合考慮業(yè)務(wù)對時效性的要求,將下載線程數(shù)設(shè)置為2,此時可達到最高下載速度,且資源占用相對較少。
圖5 資源占用測試Fig.5 The test of resources occupancy
將下載線程數(shù)設(shè)置為2之后,分別使用傳統(tǒng)FTP方式和數(shù)值預(yù)報產(chǎn)品下載軟件對所需的日本和歐洲集合預(yù)報產(chǎn)品進行了下載,統(tǒng)計每天下載的結(jié)果,并計算相關(guān)數(shù)據(jù)平均值,最終結(jié)果如表2所示。其中“平均啟動延時”指服務(wù)器上出現(xiàn)該時次資料的時間和本地開始下載該時次資料時間的差值。
從表中可以看出,相對于傳統(tǒng)FTP的單線程下載方式,數(shù)值預(yù)報產(chǎn)品下載軟件不僅通過使用多線程方式提高了資料的下載速度,還從任務(wù)管理的角度入手,在設(shè)置的間隔時間內(nèi)訪問服務(wù)器,以獲取最新資料的到達情況,一旦發(fā)現(xiàn)有到達的文件,即立即啟動下載,相對于傳統(tǒng)方式需等待文件全部到達完成再下載的模式,在很大程度上降低了任務(wù)的啟動延時,從而進一步提高了資料的時效性。
表2 數(shù)值預(yù)報產(chǎn)品下載測試結(jié)果Tab.2 The test results of numerical forecast products download
各時次資料使用兩種下載手段的延時對比結(jié)果如圖6所示,該延時是指從服務(wù)器上具有該時次資料文件開始,到本地服務(wù)器下載完成該時次資料為止,兩個時間的時間差。從圖從可以看出,數(shù)值預(yù)報產(chǎn)品下載軟件降低了資料的延時。若某時次資料的數(shù)據(jù)量越大,則使用數(shù)值預(yù)報產(chǎn)品下載軟件提高資料時效性的作用越明顯。
圖6 資料延時對比結(jié)果Fig.6 The comparison result of data delay
軟件基于FTP協(xié)議,設(shè)計了擴展性較強的系統(tǒng)架構(gòu),使用雙隊列分級管理機制對任務(wù)進行管理,提高了下載效率。引入多線程下載方式,縮短任務(wù)的下載時間,并支持斷點續(xù)傳。使用緩沖區(qū)對下載數(shù)據(jù)進行管理,降低磁盤的讀寫開銷。軟件作為四川省氣象探測數(shù)據(jù)中心數(shù)值模式產(chǎn)品調(diào)取的并行方案,已經(jīng)投入到業(yè)務(wù)運行中,取得良好效果??赏ㄟ^修改配置文件,作為市州級或縣級調(diào)取數(shù)值模式產(chǎn)品的下載軟件。在擴展研究方面,由于對服務(wù)器的訪問頻率有所增加,會增加服務(wù)器端的開銷,需要對服務(wù)器的訪問機制進行進一步的優(yōu)化研究。
[1] 馮芝祥,朱同生,曹書濤,等.數(shù)值天氣預(yù)報在風(fēng)電場發(fā)電量預(yù)報中的應(yīng)用[J].風(fēng)能,2010(04):56-59.
[2] 王強,張驍,王起喚.基于EC細網(wǎng)格產(chǎn)品對懷化地區(qū)日最高氣溫的預(yù)報及訂正分析[J].貴州氣象,2016,40(5):32-37.
[3] 朱文達,萬雪麗,彭芳,等.2015年5—8月貴州區(qū)域中尺度WRF模式降水檢驗[J].貴州氣象,2016,40(3):24-30.
[4] 白慧,段瑩,王興菊,等.基于DERF2.0模式產(chǎn)品對單站旬、月極端降水日數(shù)的預(yù)測[J].貴州氣象,2016,40(1):1-6.
[5] 王紅麗,廖留峰.WRF模式對西南地區(qū)干旱事件的模擬研究[J].貴州氣象,2015,39(6):1-5.
[6] 田蘭.對貴州氣象信息化工作的理解和思考[J].貴州氣象,2016,40(6):1-4.
[7] 董元元,鄧浩江,倪宏,等.多業(yè)務(wù)網(wǎng)絡(luò)中支持QoS保證的最優(yōu)定價機制[J].北京郵電大學(xué)學(xué)報,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-),男,工程師,主要從事氣象信息系統(tǒng)研發(fā)工作,E-mail: micxiang@foxmail.com。
四川省氣象局“省級氣象數(shù)據(jù)支撐環(huán)境及應(yīng)用系統(tǒng)建設(shè)創(chuàng)新團隊”資助。