文/張新禹
隨著氣象信息現代化的發展,氣象資料種類不斷的增加及氣象資料傳輸時效要求的提高,在已有氣象傳輸系統發生故障時,為了滿足時效性要求需要一種輕量級的資料傳輸工具代替并恢復氣象業務,本文介紹了基于Python語言的氣象資料傳輸工具的設計,為氣象資料傳輸系統故障時提供必要的應急方法。
氣象資料的產生方式為部署在縣級或市級氣象局觀測場內部的氣象觀測儀器采集天氣信息,采集溫度、氣壓、濕度、風速、風向、太陽輻射等,數據通過串口形式接收在氣象觀測臺站服務器中,通過氣象專用ISOS軟件生成對應文件格式的文件,其中自動站、酸雨文件格式以文本格式為主,高空等文件具有其特定的文件格式。
市級、縣級氣象觀測觀測臺站通過氣象寬帶網絡將氣象資料發送至省級氣象局,省級氣象局對收到的報文進行格式檢查后發送到下一級目的主機,本設計部署位置在省級氣象局的互聯網DMZ區,作為與氣象內網與互聯網單向通信的服務器,其目的是作為主要氣象資料傳輸系統的備用方案,在市級、縣級氣象專網發生故障時,以互聯網為渠道,接收互聯網特定端口的報文信息,保障氣象資料的順利傳輸以及資料傳輸的時效性。
本設計將FTP的落地的文件經過處理后發送到國家氣象信息中心服務器中保存、共享,處理過程主要包含資料分類及打包功能、實時傳輸功能、日志功能、程序守護功能。資料分類、打包功能通過匹配報文文件的名稱實現資料文件的分類,打包功能主要是對氣象資料內容進行打包操作,實時傳輸功能將氣象文件通過FTP方式按照不同入口目錄發送到國家氣象信息中心的服務上,期間程序運行及發送報文產生的信息將通過日志功能記錄,以便后續運維人員的查看和資料的補調,程序守護功能主要作用是在程序的運行過程中保障程序主要進程的正常運行,防止掉線進程影響業務。具體傳輸流程如圖1。

圖1:氣象資料傳輸流程圖
根據氣象資料傳輸要求,主要分為地面氣象資料、高空氣象資料、大氣成分資料、酸雨資料、輻射資料、雷達資料、精細化預報產品等幾大類資料,針對以上大類資料,程序設計中分別編寫的不同文件類型的入口目錄,針對大類資料下面的小類資料采用子目錄級別設計了小類資料的入口目錄。互聯網接收的資料通過名稱的特征匹配,將結果分配到不同類資料的存放文件夾,其中小類資料通過第二次資料分類后放至小類資料文件夾中。整個資料分類需要的模板名稱存儲在指定的配置文件中,軟件提供有UI界面功能,如要調整文件名模板的格式及打包方式可以通過軟件界面及修改后臺配置文件實現,修改配置后無需重啟軟件即可完成配置的調整。
本設計中資料入口目錄收集來自氣象臺站上傳的文件,經過分類后,對文件內容進行打包處理,地面類型包含txt類型的文件采用內容打包方式,將文件內容重新遍歷至文本內完成打包,其中重新打包后的文件名稱按照中國氣象局資料打包要求,報文名稱中原站號名稱更換為省級名稱,時間格式更改為打包之后的國際時,時間要求精確到秒級。針對高空氣象資料、酸雨資料特殊格式文件的打包方法,按照中國氣象局對特殊氣象資料文件規則的要求進行打包,與常規打包方式不同的,特殊格式報文打包過程中需要加入特殊分隔符進行站點區分。
基于氣象資料傳輸渠道多種多樣,傳輸過程中每時每秒都會有新的文件落到服務器中,在程序編輯中,需要定時對其中文件進行處理,防止資料文件增多導致處理效率變慢,引用了Pyhton資源庫中time函數編寫定時器模塊,以此實現定時監測功能,利用文件掃描函數監測入口目錄下是否有資料保存,統計文件數量,若有未發送的文件,程序將文件名放入待發送文件隊列,啟動文件傳輸進程,使用FTP方式將文件發送到指定目錄,如果在掃描文件過程中發現非氣象資料的文件或者可以病毒文件,程序對未知文件啟動刪除程序,完成對資料入口目錄的清理。

圖2:實時傳輸流程圖
程序提供了分發目的配置功能,業務運行人員可以在過程中對不同資料配置不同的目的主機,實現自定義文件轉發功能,在資料保存后的共享業務中,需要對多個目的主機提供資料共享服務。傳輸過程中,為了防止發送到目的文件夾的過程中目標服務器對沒有發送完成的報文進行操作,程序設計中在發送報文時對名稱的后綴名進行更改,待文件發送完成時將名稱替換為正常格式,保障傳輸報文的完整性。為了防止同名氣象資料重復傳輸,影響資料中數據的準確性,設計中加入監視器,監測目標文件夾下面的文件是否與待發送文件名相同,發現相同則刪除該文件。具體流程如圖2。
氣象資料在采集中產生的傳輸日志有很大的參考價值,在傳輸流程中如果某一環節發生故障,可以通過傳輸日志發現故障所在位置及故障發生的時間,日志功能主要采集資料的文件名、收集時間及位置、發送時間及位置,在傳輸流程的每一個環節中將每類氣象資料所經過的節點信息記錄到日志中,程序設計中對每個程序代碼塊中設置了日志輸出選項,在發生故障時拋出相應錯誤信息,日志文件在檢索時在每行的開始提供日志信息的標槍,標明了輸出日志屬于正常傳輸日志或者故障拋出日志。日志文件每大于一定容量大小時將日志文件重定向到新的日志文件中,日志文件可連續存放一年的傳輸日志。對于已經發送的文件,日志功能保留了文件備份功能,將已傳輸的文件備份到本地備份目錄下,便于協助日志文件相互核實業務傳輸情況。
程序在后臺運行中,通過進程名查詢即可獲得程序的進程端口號,對于不存在的進程即沒有進程端口號的存在,利用這一點,在實時傳輸程序運行中,通過定時觸發掃描器掃描后臺進程端口號,確認后臺的正常運行,通過此方法實現對后臺程序的監控作用。守護程序的設計可以對傳輸的運行得到有力保障,也可以在程序所在服務器發生重啟等故障后主動拉起主要應用,并且守護程序的運行過程會生成特定的日志,負責業務運維的人員通過此日志可以在后續的維護中修改程序出現的問題。
在資料傳輸的整個過程中,補充上傳氣象資料是傳輸過程中總會發生的情況,當氣象臺站到省級信息中心內網鏈路中斷時,需要通過互聯網方式發送氣象資料,鑒于其中一部分氣象資料屬于國家保密信息,不可以通過公共渠道流通,需使用獨自開發的傳輸工具完成這一過程。氣象資料傳輸工具部署在氣象專網區到互聯網區的DMZ環境下,利用互聯網DMZ區的網絡策略實現其功能,在非內網傳輸過程中,氣象資料由氣象臺站到國家氣象信息中心傳輸時間為3分鐘之內,完全符合氣象傳輸過程中要求的時間區間。
省級氣象部門在收集了大量氣象數據之后,資料需要以共享文件方式提供到氣象臺、氣象服務中心等產品制作單位進行進一步處理,整個過程中需要一個流轉的過程,在氣象業務發展的初期,主要通過人為定期復制資料到共享服務器中進行資料服務業務,這種行為無法保障業務的實時性,在時間的角度極大拖延了氣象資料的傳輸周期,通過將傳輸工具配置特定的目的地址代替了人工操作的業務,避免了人為操作過程中的失誤,為資料共享提供一個無人值守的便捷方式。
在云計算的發展下氣象業務實現了集約化管理,從之前單獨服務器提供業務服務到現在的云主機上運行墻業務,云主機靈活的操作性及快照備份的特性保障了氣象業務在故障發生的情況下能夠第一時間恢復業務的運行。大數據的發展使得現在氣象數據對存儲的要求越來越高,存儲的數量級別由TB級增長到現在的PB級別,數據處理的任務量也在提高,在龐大的業務系統面前氣象系統運維人員承擔著守護氣象業務正常運行的保障任務。隨著信息時代的不斷發展,伴隨著大數據、人工智能的不斷成熟,天氣預報準確率已經可以達到80%以上,這使得各行各業都開始關注起氣象信息,對氣象信息的精準度要求也不斷提高,超高的精準度需要氣象算法軟件不斷升級,在此期間,對氣象資料傳輸的時間效率要求也越來越高,為了在更短時間內順利將氣象資料由觀測場到預報員桌面,保障天氣預報的準確性,氣象信息中心的運維人員對資料傳輸系統也在不斷更新,為了提高預報準確率不斷學習新的技術,開拓新的領域。