■ 張來(lái)恩 王鵬 韓鑫強(qiáng)
國(guó)內(nèi)氣象通信軟件系統(tǒng)第二版(CTS2.0)在國(guó)內(nèi)通信系統(tǒng)現(xiàn)有能力的基礎(chǔ)上增加了消息和流兩種通信傳輸模式,提升了實(shí)時(shí)氣象數(shù)據(jù)高時(shí)效傳輸能力,為統(tǒng)一國(guó)家級(jí)、省級(jí)及省以下通信傳輸技術(shù)體制,提升對(duì)氣象綜合觀測(cè)系統(tǒng)、氣象預(yù)報(bào)預(yù)測(cè)系統(tǒng)和氣象公共氣象服務(wù)系統(tǒng)的通信傳輸支撐和保障能力提供了有效的技術(shù)保障。
國(guó)內(nèi)氣象通信系統(tǒng)是承擔(dān)國(guó)內(nèi)氣象資料和產(chǎn)品收集、以及國(guó)內(nèi)外氣象資料和產(chǎn)品的國(guó)內(nèi)分發(fā)的業(yè)務(wù)系統(tǒng)。隨著現(xiàn)代氣象業(yè)務(wù)快速發(fā)展,氣象數(shù)據(jù)的種類、數(shù)量日益增加,關(guān)鍵業(yè)務(wù)資料觀測(cè)、更新頻次達(dá)到分鐘級(jí),傳輸時(shí)效要求達(dá)到秒級(jí)。現(xiàn)有國(guó)內(nèi)氣象通信系統(tǒng)(CTS1.0)僅支持國(guó)家級(jí)和省級(jí)間基于文件的數(shù)據(jù)傳輸,難以滿足未來(lái)統(tǒng)一省以下通信傳輸技術(shù)體制,支持多種類、高頻次、大容量實(shí)時(shí)氣象資料的高時(shí)效傳輸。國(guó)內(nèi)氣象通信軟件系統(tǒng)第二版(CTS2.0)在國(guó)內(nèi)通信系統(tǒng)現(xiàn)有能力的基礎(chǔ)上增加了消息和流兩種通信傳輸模式,提升了實(shí)時(shí)氣象數(shù)據(jù)高時(shí)效傳輸能力,為統(tǒng)一國(guó)家級(jí)、省級(jí)及省以下通信傳輸技術(shù)體制,提升對(duì)氣象綜合觀測(cè)系統(tǒng)、氣象預(yù)報(bào)預(yù)測(cè)系統(tǒng)和氣象公共氣象服務(wù)系統(tǒng)的通信傳輸支撐和保障能力提供了有效的技術(shù)保障。
本文針對(duì)CTS2.0系統(tǒng)中消息通信傳輸模式進(jìn)行說(shuō)明,并對(duì)氣象數(shù)據(jù)如何使用消息中間件進(jìn)行傳輸、消息中間件技術(shù)選型、消息中間件工作模式選擇、以及觀測(cè)數(shù)據(jù)消息封裝、消息中間件交換控制策略等內(nèi)容做出較為詳細(xì)的介紹。
隨著科技的發(fā)展氣象要素觀測(cè)逐漸由人工觀測(cè)轉(zhuǎn)變?yōu)樽詣?dòng)觀測(cè),觀測(cè)數(shù)據(jù)產(chǎn)生的頻次也大幅提升,表1為國(guó)家級(jí)地面自動(dòng)站觀測(cè)數(shù)據(jù)類型和頻次。

表1 地面自動(dòng)站觀測(cè)數(shù)據(jù)類型
可以看出,目前國(guó)家級(jí)地面自動(dòng)站至少每分鐘會(huì)產(chǎn)生三條報(bào)文,分別是地面分鐘觀測(cè)數(shù)據(jù)、氣象輻射分鐘觀測(cè)數(shù)據(jù)和地面自動(dòng)站運(yùn)行狀態(tài)設(shè)備信息。在每小時(shí)00分會(huì)產(chǎn)生兩條報(bào)文,分別是地面小時(shí)觀測(cè)數(shù)據(jù)和氣象輻射小時(shí)觀測(cè)數(shù)據(jù),同時(shí)還會(huì)不定時(shí)產(chǎn)生酸雨數(shù)據(jù)和臺(tái)站元數(shù)據(jù);這些觀測(cè)數(shù)據(jù)的大小都在1KB左右。使用消息中間件技術(shù)進(jìn)行觀測(cè)數(shù)據(jù)的傳輸,在保證傳輸可靠性的同時(shí),還能較大提高觀測(cè)數(shù)據(jù)從觀測(cè)臺(tái)站到國(guó)家級(jí)的傳輸時(shí)效,而且整個(gè)過(guò)程均不需落盤(pán)形成文件,減少了磁盤(pán)I/O等中間環(huán)節(jié)。
1)消息中間件
消息中間件是利用高效可靠的消息傳遞機(jī)制進(jìn)行平臺(tái)無(wú)關(guān)的數(shù)據(jù)交流,并基于數(shù)據(jù)通信來(lái)進(jìn)行分布式系統(tǒng)的集成。消息中間件適用于需要可靠的數(shù)據(jù)傳送的分布式環(huán)境,能在不同平臺(tái)之間通信,可用來(lái)屏蔽掉各種平臺(tái)及協(xié)議之間的特性,實(shí)現(xiàn)應(yīng)用程序之間的協(xié)同,其優(yōu)點(diǎn)在于能夠在客戶和服務(wù)器之間提供同步和異步的連接,并且在任何時(shí)刻都可以將消息進(jìn)行傳送或者存儲(chǔ)轉(zhuǎn)發(fā)。
2)RabbitMQ
高級(jí)消息隊(duì)列協(xié)議(Advanced Message Queuing Protocol,AMQP),是應(yīng)用層協(xié)議的一個(gè)開(kāi)放標(biāo)準(zhǔn),為面向消息的中間件設(shè)計(jì)。AMQP的主要特征是面向消息、隊(duì)列、路由(包括點(diǎn)對(duì)點(diǎn)和發(fā)布/訂閱)、可靠性、安全。RabbitMQ是一個(gè)開(kāi)源的AMQP實(shí)現(xiàn),服務(wù)器端用Erlang語(yǔ)言編寫(xiě),支持多種客戶端,如:Python、Java、JMS、C等。在分布式系統(tǒng)中存儲(chǔ)轉(zhuǎn)發(fā)消息的場(chǎng)景,其易用性、擴(kuò)展性、高可用性等方面表現(xiàn)不俗。RabbitMQ采用TCP Socket傳輸協(xié)議,服務(wù)端支持消息隊(duì)列持久化能有效保證數(shù)據(jù)在各個(gè)環(huán)節(jié)的完整性,同時(shí)RabbitMQ提供靈活的路由控制轉(zhuǎn)發(fā)功能符合氣象數(shù)據(jù)傳輸?shù)臉I(yè)務(wù)需求。
RabbitMQ 服務(wù)端主要由主題(Exchange)和隊(duì)列(Queue)組成,客戶端通常有發(fā)布者(Producer)和消費(fèi)者(Consumer)兩種類型。服務(wù)端主題負(fù)責(zé)接收消息和路由信息,然后將消息按照某種策略分配給隊(duì)列。隊(duì)列是一個(gè)緩沖區(qū),消息隊(duì)列可以代表消費(fèi)者應(yīng)用程序保存信息,應(yīng)用程序在其權(quán)限范圍之內(nèi)可以自由創(chuàng)建、共享、使用和消費(fèi)消息隊(duì)列。消息隊(duì)列提供有限制的先進(jìn)先出機(jī)制,服務(wù)端會(huì)將從某一個(gè)發(fā)布者發(fā)出的同等優(yōu)先級(jí)的消息按照它們進(jìn)入隊(duì)列的順序傳送給某一個(gè)消費(fèi)者。主題和隊(duì)列可以進(jìn)行配置,實(shí)現(xiàn)不同的工作模式,消息隊(duì)列也可以選擇是否進(jìn)行持久化、設(shè)置消息隊(duì)列長(zhǎng)度等配置。發(fā)布者P向主題X發(fā)送帶有標(biāo)識(shí)(RoutingKey)的消息,在服務(wù)端根據(jù)消息標(biāo)識(shí)將消息轉(zhuǎn)發(fā)到對(duì)應(yīng)的隊(duì)列中,消費(fèi)者從隊(duì)列中獲取消息,傳輸模式如下圖1所示。

圖1 RabbitMQ消息傳輸模式
結(jié)合國(guó)家級(jí)地面自動(dòng)站觀測(cè)數(shù)據(jù)的特點(diǎn)和消息中間件RabbitMQ技術(shù)特點(diǎn),利用消息中間件進(jìn)行觀測(cè)數(shù)據(jù)的傳輸,需要制定數(shù)據(jù)在傳輸過(guò)程中的格式。好比傳統(tǒng)文件傳輸,需要制定數(shù)據(jù)的文件名命名規(guī)范一樣,消息傳輸需要設(shè)計(jì)消息的封裝格式。
RabbitMQ傳輸格式包括消息頭和消息體,消息頭中可用Key-Value鍵值對(duì)的形式存放信息,根據(jù)這一技術(shù)特點(diǎn),在CTS2.0中將觀測(cè)數(shù)據(jù)的傳輸屬性放入消息頭中,報(bào)文信息放入消息體。傳輸環(huán)節(jié)中無(wú)需對(duì)報(bào)文進(jìn)行解碼,而僅需通過(guò)讀取消息頭中的屬性信息即可完成站號(hào)、觀測(cè)時(shí)間等監(jiān)視信息的提取,減少在傳輸環(huán)節(jié)的處理成本。
消息屬性信息采用鍵值對(duì)的模式放入到消息頭(Message Header)中,在設(shè)計(jì)消息屬性時(shí),遵循以下幾個(gè)原則:(1)屬性內(nèi)有唯一標(biāo)識(shí),可以進(jìn)行唯一性區(qū)分,用于排查重復(fù)客戶端的重復(fù)報(bào),唯一標(biāo)識(shí)采用隨機(jī)編碼方式(UUID);(2)可根據(jù)消息屬性進(jìn)行路由轉(zhuǎn)發(fā),通過(guò)讀取屬性就能知道消息來(lái)自哪里,可根據(jù)業(yè)務(wù)需求進(jìn)行轉(zhuǎn)發(fā);(3)可根據(jù)消息屬性完成監(jiān)視信息讀取,屬性中包含站號(hào)IIiii、資料類型type、觀測(cè)時(shí)間OBSTime等監(jiān)視信息;(4)可根據(jù)消息屬性完成傳輸過(guò)程中的部分統(tǒng)計(jì)工作,屬性中包含觀測(cè)時(shí)間OBSTime,接口調(diào)用時(shí)間SendTime,消息發(fā)送時(shí)間MQ_SendTime等,可以根據(jù)屬性信息進(jìn)行傳輸時(shí)效統(tǒng)計(jì),數(shù)據(jù)完整性統(tǒng)計(jì)等,詳細(xì)設(shè)計(jì)如表2。

表2 消息屬性封裝設(shè)計(jì)
報(bào)文正文以字符串的形式放入到消息體(Message Body)中,一條消息由消息頭和消息體封裝完成,即可發(fā)送到消息中間件中了。
RabbitMQ 核心組件是主題和隊(duì)列,發(fā)布者將消息發(fā)布到某主題之后,服務(wù)端通過(guò)消息中含有的路由鍵值(RoutingKey)信息對(duì)主題中的消息進(jìn)行交換控制,將路由鍵值中包含某些特定標(biāo)識(shí)的消息綁定到某個(gè)隊(duì)列之中,消費(fèi)者從對(duì)應(yīng)的隊(duì)列中接收消息。
根據(jù)氣象資料傳輸?shù)臉I(yè)務(wù)特性,制定了傳輸相關(guān)的交換控制的三個(gè)基本原則:(1)發(fā)送采用主題方式,主題名以“X.”開(kāi)頭,每個(gè)主題對(duì)應(yīng)一類接入對(duì)象,比如目前國(guó)家級(jí)地面自動(dòng)站標(biāo)準(zhǔn)格式試點(diǎn)的臺(tái)站都將消息發(fā)送到本省X.OBS;(2)接收采用隊(duì)列方式,隊(duì)列名以“Q.”開(kāi)頭,隊(duì)列名需要明確接收者,如國(guó)家級(jí)CIMISS數(shù)據(jù)環(huán)境接收臺(tái)站數(shù)據(jù)的隊(duì)列為Q.OBS.BABJ.CIMISS;(3)主題到隊(duì)列的轉(zhuǎn)發(fā)過(guò)程使用路由鍵值來(lái)進(jìn)行控制,路由鍵值名稱以“R.”開(kāi)頭,路由鍵值大類在前小類在后,R.OBS.CCCC.N/P.IIiii.TYPE,CCCC表示消息發(fā)送者所在省份的省級(jí)代碼,N/P表示消息發(fā)送者的級(jí)別N代表國(guó)家站,P代表區(qū)域站,TYPE表示為CIMISS四級(jí)編碼。國(guó)家級(jí)地面自動(dòng)站數(shù)據(jù)上行策略如圖2所示。

圖2 國(guó)家級(jí)地面自動(dòng)站數(shù)據(jù)上行策略
探測(cè)中心綜合觀測(cè)一體化平臺(tái)下行設(shè)備控制指令的模型,發(fā)送時(shí)帶的路由鍵值為R.OBS_CTL.CCCC.N.IIiii.TYPE,發(fā)送主題為X.OBS_CTL,通過(guò)路由鍵值將不同省份的控制消息放入各省的下行隊(duì)列中,下行隊(duì)列推送到省級(jí)消息服務(wù)器,省級(jí)消息服務(wù)器再按照路由鍵值將控制指令推送到個(gè)臺(tái)站的接收隊(duì)列。國(guó)家級(jí)控制指令下行策略如圖3所示。

圖3 國(guó)家級(jí)控制指令下行策略
根據(jù)本文介紹的消息封裝和交換控制策略設(shè)計(jì)研發(fā)的CTS2.0系統(tǒng)消息傳輸模型,目前已在12個(gè)省的253個(gè)臺(tái)站進(jìn)行了試點(diǎn)試驗(yàn)。在試點(diǎn)臺(tái)站部署了消息傳輸客戶端,試點(diǎn)省份部署了消息傳輸服務(wù)端,自動(dòng)站觀測(cè)數(shù)據(jù)從臺(tái)站經(jīng)省級(jí)消息服務(wù)器到達(dá)國(guó)家級(jí)消息服務(wù)器。
對(duì)2016年12月、2017年1月和2017年2月的傳輸情況進(jìn)行了統(tǒng)計(jì),數(shù)據(jù)自臺(tái)站輸出和到達(dá)國(guó)家級(jí)的時(shí)間均集中在觀測(cè)后20~25 s,其中,臺(tái)站大多在20 s之后開(kāi)始輸出消息數(shù)據(jù),90%的數(shù)據(jù)消息在25 s以內(nèi)能夠生成并傳輸?shù)絿?guó)家級(jí)。臺(tái)站輸出率與國(guó)家級(jí)到報(bào)率非常接近,通信系統(tǒng)在2 s之內(nèi)就能將消息從臺(tái)站傳輸?shù)絿?guó)家級(jí),數(shù)據(jù)平均傳輸用時(shí)在1 s以內(nèi)。
從應(yīng)用情況可以看出,使用該模型能高效的完成國(guó)家級(jí)地面自動(dòng)站數(shù)據(jù)從臺(tái)站到省到國(guó)家的傳輸,數(shù)據(jù)從臺(tái)站經(jīng)省級(jí)到達(dá)國(guó)家級(jí)的平均傳輸用時(shí)在1s以內(nèi)。通過(guò)從消息屬性中提取傳輸環(huán)節(jié)所需的監(jiān)視和路由信息,減少了傳輸環(huán)節(jié)解碼開(kāi)銷,優(yōu)化了傳輸流程,提高了傳輸效率。同時(shí)采用該種交換控制策略能實(shí)現(xiàn)觀測(cè)數(shù)據(jù)可配置定制化收集分發(fā),比如在國(guó)家級(jí)對(duì)不同資料類型(地面/輻射)、不同數(shù)據(jù)來(lái)源(湖北/上海)的數(shù)據(jù)進(jìn)行分類轉(zhuǎn)發(fā)等。
試點(diǎn)過(guò)程中也存在一些問(wèn)題,后續(xù)將在服務(wù)器端集群架構(gòu)設(shè)計(jì)、節(jié)點(diǎn)自動(dòng)運(yùn)維管理等方面繼續(xù)進(jìn)行探索。
深入閱讀
王力, 韓笑, 劉培寧, 等, 2015. 基于MQ的氣象數(shù)據(jù)采集與監(jiān)控系統(tǒng)設(shè)計(jì). 氣象科技, 43(3): 451-457.
熊安元, 趙芳, 王穎, 等, 2015. 全國(guó)綜合氣象信息共享系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn). 應(yīng)用氣象學(xué)報(bào), 26(4):500-512.
魚(yú)朝偉, 詹舒波, 2016. 基于RabbitMQ的異步全雙工消息總線的實(shí)現(xiàn). 軟件, (2): 139-146.
張煜, 姜虎, 2016. 基于消息的遺留資源服務(wù)化適配與集成. 計(jì)算機(jī)工程與設(shè)計(jì), 37(10): 2844-2850.
Advances in Meteorological Science and Technology2018年1期