■ 張來恩 王鵬 韓鑫強
國內(nèi)氣象通信軟件系統(tǒng)第二版(CTS2.0)在國內(nèi)通信系統(tǒng)現(xiàn)有能力的基礎(chǔ)上增加了消息和流兩種通信傳輸模式,提升了實時氣象數(shù)據(jù)高時效傳輸能力,為統(tǒng)一國家級、省級及省以下通信傳輸技術(shù)體制,提升對氣象綜合觀測系統(tǒng)、氣象預(yù)報預(yù)測系統(tǒng)和氣象公共氣象服務(wù)系統(tǒng)的通信傳輸支撐和保障能力提供了有效的技術(shù)保障。
國內(nèi)氣象通信系統(tǒng)是承擔(dān)國內(nèi)氣象資料和產(chǎn)品收集、以及國內(nèi)外氣象資料和產(chǎn)品的國內(nèi)分發(fā)的業(yè)務(wù)系統(tǒng)。隨著現(xiàn)代氣象業(yè)務(wù)快速發(fā)展,氣象數(shù)據(jù)的種類、數(shù)量日益增加,關(guān)鍵業(yè)務(wù)資料觀測、更新頻次達到分鐘級,傳輸時效要求達到秒級?,F(xiàn)有國內(nèi)氣象通信系統(tǒng)(CTS1.0)僅支持國家級和省級間基于文件的數(shù)據(jù)傳輸,難以滿足未來統(tǒng)一省以下通信傳輸技術(shù)體制,支持多種類、高頻次、大容量實時氣象資料的高時效傳輸。國內(nèi)氣象通信軟件系統(tǒng)第二版(CTS2.0)在國內(nèi)通信系統(tǒng)現(xiàn)有能力的基礎(chǔ)上增加了消息和流兩種通信傳輸模式,提升了實時氣象數(shù)據(jù)高時效傳輸能力,為統(tǒng)一國家級、省級及省以下通信傳輸技術(shù)體制,提升對氣象綜合觀測系統(tǒng)、氣象預(yù)報預(yù)測系統(tǒng)和氣象公共氣象服務(wù)系統(tǒng)的通信傳輸支撐和保障能力提供了有效的技術(shù)保障。
本文針對CTS2.0系統(tǒng)中消息通信傳輸模式進行說明,并對氣象數(shù)據(jù)如何使用消息中間件進行傳輸、消息中間件技術(shù)選型、消息中間件工作模式選擇、以及觀測數(shù)據(jù)消息封裝、消息中間件交換控制策略等內(nèi)容做出較為詳細的介紹。
隨著科技的發(fā)展氣象要素觀測逐漸由人工觀測轉(zhuǎn)變?yōu)樽詣佑^測,觀測數(shù)據(jù)產(chǎn)生的頻次也大幅提升,表1為國家級地面自動站觀測數(shù)據(jù)類型和頻次。
表1 地面自動站觀測數(shù)據(jù)類型
可以看出,目前國家級地面自動站至少每分鐘會產(chǎn)生三條報文,分別是地面分鐘觀測數(shù)據(jù)、氣象輻射分鐘觀測數(shù)據(jù)和地面自動站運行狀態(tài)設(shè)備信息。在每小時00分會產(chǎn)生兩條報文,分別是地面小時觀測數(shù)據(jù)和氣象輻射小時觀測數(shù)據(jù),同時還會不定時產(chǎn)生酸雨數(shù)據(jù)和臺站元數(shù)據(jù);這些觀測數(shù)據(jù)的大小都在1KB左右。使用消息中間件技術(shù)進行觀測數(shù)據(jù)的傳輸,在保證傳輸可靠性的同時,還能較大提高觀測數(shù)據(jù)從觀測臺站到國家級的傳輸時效,而且整個過程均不需落盤形成文件,減少了磁盤I/O等中間環(huán)節(jié)。
1)消息中間件
消息中間件是利用高效可靠的消息傳遞機制進行平臺無關(guān)的數(shù)據(jù)交流,并基于數(shù)據(jù)通信來進行分布式系統(tǒng)的集成。消息中間件適用于需要可靠的數(shù)據(jù)傳送的分布式環(huán)境,能在不同平臺之間通信,可用來屏蔽掉各種平臺及協(xié)議之間的特性,實現(xiàn)應(yīng)用程序之間的協(xié)同,其優(yōu)點在于能夠在客戶和服務(wù)器之間提供同步和異步的連接,并且在任何時刻都可以將消息進行傳送或者存儲轉(zhuǎn)發(fā)。
2)RabbitMQ
高級消息隊列協(xié)議(Advanced Message Queuing Protocol,AMQP),是應(yīng)用層協(xié)議的一個開放標準,為面向消息的中間件設(shè)計。AMQP的主要特征是面向消息、隊列、路由(包括點對點和發(fā)布/訂閱)、可靠性、安全。RabbitMQ是一個開源的AMQP實現(xiàn),服務(wù)器端用Erlang語言編寫,支持多種客戶端,如:Python、Java、JMS、C等。在分布式系統(tǒng)中存儲轉(zhuǎn)發(fā)消息的場景,其易用性、擴展性、高可用性等方面表現(xiàn)不俗。RabbitMQ采用TCP Socket傳輸協(xié)議,服務(wù)端支持消息隊列持久化能有效保證數(shù)據(jù)在各個環(huán)節(jié)的完整性,同時RabbitMQ提供靈活的路由控制轉(zhuǎn)發(fā)功能符合氣象數(shù)據(jù)傳輸?shù)臉I(yè)務(wù)需求。
RabbitMQ 服務(wù)端主要由主題(Exchange)和隊列(Queue)組成,客戶端通常有發(fā)布者(Producer)和消費者(Consumer)兩種類型。服務(wù)端主題負責(zé)接收消息和路由信息,然后將消息按照某種策略分配給隊列。隊列是一個緩沖區(qū),消息隊列可以代表消費者應(yīng)用程序保存信息,應(yīng)用程序在其權(quán)限范圍之內(nèi)可以自由創(chuàng)建、共享、使用和消費消息隊列。消息隊列提供有限制的先進先出機制,服務(wù)端會將從某一個發(fā)布者發(fā)出的同等優(yōu)先級的消息按照它們進入隊列的順序傳送給某一個消費者。主題和隊列可以進行配置,實現(xiàn)不同的工作模式,消息隊列也可以選擇是否進行持久化、設(shè)置消息隊列長度等配置。發(fā)布者P向主題X發(fā)送帶有標識(RoutingKey)的消息,在服務(wù)端根據(jù)消息標識將消息轉(zhuǎn)發(fā)到對應(yīng)的隊列中,消費者從隊列中獲取消息,傳輸模式如下圖1所示。
圖1 RabbitMQ消息傳輸模式
結(jié)合國家級地面自動站觀測數(shù)據(jù)的特點和消息中間件RabbitMQ技術(shù)特點,利用消息中間件進行觀測數(shù)據(jù)的傳輸,需要制定數(shù)據(jù)在傳輸過程中的格式。好比傳統(tǒng)文件傳輸,需要制定數(shù)據(jù)的文件名命名規(guī)范一樣,消息傳輸需要設(shè)計消息的封裝格式。
RabbitMQ傳輸格式包括消息頭和消息體,消息頭中可用Key-Value鍵值對的形式存放信息,根據(jù)這一技術(shù)特點,在CTS2.0中將觀測數(shù)據(jù)的傳輸屬性放入消息頭中,報文信息放入消息體。傳輸環(huán)節(jié)中無需對報文進行解碼,而僅需通過讀取消息頭中的屬性信息即可完成站號、觀測時間等監(jiān)視信息的提取,減少在傳輸環(huán)節(jié)的處理成本。
消息屬性信息采用鍵值對的模式放入到消息頭(Message Header)中,在設(shè)計消息屬性時,遵循以下幾個原則:(1)屬性內(nèi)有唯一標識,可以進行唯一性區(qū)分,用于排查重復(fù)客戶端的重復(fù)報,唯一標識采用隨機編碼方式(UUID);(2)可根據(jù)消息屬性進行路由轉(zhuǎn)發(fā),通過讀取屬性就能知道消息來自哪里,可根據(jù)業(yè)務(wù)需求進行轉(zhuǎn)發(fā);(3)可根據(jù)消息屬性完成監(jiān)視信息讀取,屬性中包含站號IIiii、資料類型type、觀測時間OBSTime等監(jiān)視信息;(4)可根據(jù)消息屬性完成傳輸過程中的部分統(tǒng)計工作,屬性中包含觀測時間OBSTime,接口調(diào)用時間SendTime,消息發(fā)送時間MQ_SendTime等,可以根據(jù)屬性信息進行傳輸時效統(tǒng)計,數(shù)據(jù)完整性統(tǒng)計等,詳細設(shè)計如表2。
表2 消息屬性封裝設(shè)計
報文正文以字符串的形式放入到消息體(Message Body)中,一條消息由消息頭和消息體封裝完成,即可發(fā)送到消息中間件中了。
RabbitMQ 核心組件是主題和隊列,發(fā)布者將消息發(fā)布到某主題之后,服務(wù)端通過消息中含有的路由鍵值(RoutingKey)信息對主題中的消息進行交換控制,將路由鍵值中包含某些特定標識的消息綁定到某個隊列之中,消費者從對應(yīng)的隊列中接收消息。
根據(jù)氣象資料傳輸?shù)臉I(yè)務(wù)特性,制定了傳輸相關(guān)的交換控制的三個基本原則:(1)發(fā)送采用主題方式,主題名以“X.”開頭,每個主題對應(yīng)一類接入對象,比如目前國家級地面自動站標準格式試點的臺站都將消息發(fā)送到本省X.OBS;(2)接收采用隊列方式,隊列名以“Q.”開頭,隊列名需要明確接收者,如國家級CIMISS數(shù)據(jù)環(huán)境接收臺站數(shù)據(jù)的隊列為Q.OBS.BABJ.CIMISS;(3)主題到隊列的轉(zhuǎn)發(fā)過程使用路由鍵值來進行控制,路由鍵值名稱以“R.”開頭,路由鍵值大類在前小類在后,R.OBS.CCCC.N/P.IIiii.TYPE,CCCC表示消息發(fā)送者所在省份的省級代碼,N/P表示消息發(fā)送者的級別N代表國家站,P代表區(qū)域站,TYPE表示為CIMISS四級編碼。國家級地面自動站數(shù)據(jù)上行策略如圖2所示。
圖2 國家級地面自動站數(shù)據(jù)上行策略
探測中心綜合觀測一體化平臺下行設(shè)備控制指令的模型,發(fā)送時帶的路由鍵值為R.OBS_CTL.CCCC.N.IIiii.TYPE,發(fā)送主題為X.OBS_CTL,通過路由鍵值將不同省份的控制消息放入各省的下行隊列中,下行隊列推送到省級消息服務(wù)器,省級消息服務(wù)器再按照路由鍵值將控制指令推送到個臺站的接收隊列。國家級控制指令下行策略如圖3所示。
圖3 國家級控制指令下行策略
根據(jù)本文介紹的消息封裝和交換控制策略設(shè)計研發(fā)的CTS2.0系統(tǒng)消息傳輸模型,目前已在12個省的253個臺站進行了試點試驗。在試點臺站部署了消息傳輸客戶端,試點省份部署了消息傳輸服務(wù)端,自動站觀測數(shù)據(jù)從臺站經(jīng)省級消息服務(wù)器到達國家級消息服務(wù)器。
對2016年12月、2017年1月和2017年2月的傳輸情況進行了統(tǒng)計,數(shù)據(jù)自臺站輸出和到達國家級的時間均集中在觀測后20~25 s,其中,臺站大多在20 s之后開始輸出消息數(shù)據(jù),90%的數(shù)據(jù)消息在25 s以內(nèi)能夠生成并傳輸?shù)絿壹墶E_站輸出率與國家級到報率非常接近,通信系統(tǒng)在2 s之內(nèi)就能將消息從臺站傳輸?shù)絿壹墸瑪?shù)據(jù)平均傳輸用時在1 s以內(nèi)。
從應(yīng)用情況可以看出,使用該模型能高效的完成國家級地面自動站數(shù)據(jù)從臺站到省到國家的傳輸,數(shù)據(jù)從臺站經(jīng)省級到達國家級的平均傳輸用時在1s以內(nèi)。通過從消息屬性中提取傳輸環(huán)節(jié)所需的監(jiān)視和路由信息,減少了傳輸環(huán)節(jié)解碼開銷,優(yōu)化了傳輸流程,提高了傳輸效率。同時采用該種交換控制策略能實現(xiàn)觀測數(shù)據(jù)可配置定制化收集分發(fā),比如在國家級對不同資料類型(地面/輻射)、不同數(shù)據(jù)來源(湖北/上海)的數(shù)據(jù)進行分類轉(zhuǎn)發(fā)等。
試點過程中也存在一些問題,后續(xù)將在服務(wù)器端集群架構(gòu)設(shè)計、節(jié)點自動運維管理等方面繼續(xù)進行探索。
深入閱讀
王力, 韓笑, 劉培寧, 等, 2015. 基于MQ的氣象數(shù)據(jù)采集與監(jiān)控系統(tǒng)設(shè)計. 氣象科技, 43(3): 451-457.
熊安元, 趙芳, 王穎, 等, 2015. 全國綜合氣象信息共享系統(tǒng)的設(shè)計與實現(xiàn). 應(yīng)用氣象學(xué)報, 26(4):500-512.
魚朝偉, 詹舒波, 2016. 基于RabbitMQ的異步全雙工消息總線的實現(xiàn). 軟件, (2): 139-146.
張煜, 姜虎, 2016. 基于消息的遺留資源服務(wù)化適配與集成. 計算機工程與設(shè)計, 37(10): 2844-2850.
Advances in Meteorological Science and Technology2018年1期