廖婷婷,王 彪,肖衛(wèi)青,李從英,郭 茜
(1.貴州省氣象信息中心,貴州 貴陽(yáng) 550002;2.國(guó)家氣象信息中心,北京 100081)
氣象觀測(cè)數(shù)據(jù)采集于各類氣象儀器,通過(guò)各級(jí)別的氣象業(yè)務(wù)工作人員通過(guò)氣象業(yè)務(wù)標(biāo)準(zhǔn)觀測(cè)得來(lái)[1]。地面自動(dòng)氣象站經(jīng)過(guò)多年的建設(shè),目前已經(jīng)建成2 000多個(gè)國(guó)家級(jí)自動(dòng)站,5萬(wàn)多個(gè)省級(jí)的區(qū)域自動(dòng)站,用來(lái)傳輸全國(guó)的氣溫、氣壓、雨量、蒸發(fā)、風(fēng)速風(fēng)向等基本氣象要素資料[2-3]。其中國(guó)家級(jí)自動(dòng)站傳輸?shù)孛娣昼姾托r(shí)數(shù)據(jù),且不同于過(guò)去的TXT傳輸方式,未來(lái)趨向于使用BUFR消息傳輸,分鐘資料從現(xiàn)在的5 min發(fā)展到1 min采集,區(qū)域站的數(shù)量也會(huì)有翻倍式的增長(zhǎng)。在這樣的發(fā)展背景下,資料在解碼入庫(kù)處理過(guò)程中的穩(wěn)定性、及時(shí)性、拓展性方面有了更多的要求。采用“云計(jì)算”方式進(jìn)行分布式實(shí)時(shí)大數(shù)據(jù)處理是解決的方法之一,其中Apache Storm是一個(gè)開(kāi)源的分布式實(shí)時(shí)計(jì)算系統(tǒng),可以簡(jiǎn)單可靠地處理大量數(shù)據(jù)流,具有高容錯(cuò)性和處理速度,在一個(gè)小的 Storm 集群中,每個(gè)節(jié)點(diǎn)可以達(dá)到每秒數(shù)以百萬(wàn)計(jì)來(lái)處理消息的速度[4]。本文使用Storm分布式框架實(shí)現(xiàn)了地面氣象數(shù)據(jù)實(shí)時(shí)解碼入庫(kù)處理程序,相對(duì)于傳統(tǒng)的簡(jiǎn)約流程各方面性能有了顯著提高。
本文系統(tǒng)部署于國(guó)家氣象信息中心實(shí)時(shí)的地面氣象站觀測(cè)數(shù)據(jù),其中以rabbit MQ消息格式傳輸?shù)膰?guó)家站小時(shí)數(shù)據(jù)1 600站/h,國(guó)家站分鐘數(shù)據(jù)1 600條/5 min,以文件格式傳輸?shù)膰?guó)家站2 400站/h,區(qū)域站和雨量站58 500站/h。本文立足于信息中心原有的業(yè)務(wù)解碼入庫(kù)軟件基礎(chǔ)上,制定標(biāo)準(zhǔn)的數(shù)據(jù)解碼規(guī)范,建立統(tǒng)一的可擴(kuò)展的數(shù)據(jù)解碼集和分布式快速入庫(kù)框架,將解碼功能和入庫(kù)功能解耦,通過(guò)對(duì)不同格式資料的解碼進(jìn)行API封裝以及不同數(shù)據(jù)庫(kù)類型入庫(kù)接口的封裝,實(shí)現(xiàn)對(duì)資料類型和數(shù)據(jù)庫(kù)類型的獨(dú)立擴(kuò)展。
本文采用Storm分布式實(shí)時(shí)計(jì)算系統(tǒng)框架下進(jìn)行數(shù)據(jù)解碼入庫(kù),并實(shí)時(shí)將監(jiān)控消息發(fā)送至氣象綜合業(yè)務(wù)實(shí)時(shí)監(jiān)控系統(tǒng)(天境)[5],Storm部署采用了多臺(tái)服務(wù)器,設(shè)置了主節(jié)點(diǎn)(Master)和工作節(jié)點(diǎn)(Worker)。主節(jié)點(diǎn)運(yùn)行了Nimbus程序,負(fù)責(zé)發(fā)送代碼到Storm集群、分配工作任務(wù)給節(jié)點(diǎn),并使用Zookeeper程序記錄分配情況。工作節(jié)點(diǎn)運(yùn)行了狀態(tài)監(jiān)控程序(Supervisior程序),負(fù)責(zé)監(jiān)聽(tīng)Nimbus分配的任務(wù)[6]。當(dāng)一個(gè)任務(wù)被提交給主節(jié)點(diǎn),Nimbus對(duì)其進(jìn)行校驗(yàn)和工作量計(jì)算(計(jì)算Task數(shù)量),進(jìn)而給工作節(jié)點(diǎn)的處理過(guò)程程序(Spout/Bolt)設(shè)定相應(yīng)的Task數(shù)量,記錄到Zookeeper當(dāng)中。
將Storm技術(shù)結(jié)合到解碼入庫(kù)系統(tǒng),由主節(jié)點(diǎn)負(fù)責(zé)任務(wù)分配,工作節(jié)點(diǎn)負(fù)責(zé)消息監(jiān)聽(tīng)與傳遞、解碼入庫(kù)處理、進(jìn)程狀態(tài)通知這幾項(xiàng)重要功能。主節(jié)點(diǎn)收到MQ消息之后,將消息發(fā)給消息傳遞程序(Spout程序)傳遞給某個(gè)工作節(jié)點(diǎn),工作節(jié)點(diǎn)的Supervisior監(jiān)聽(tīng)到主節(jié)點(diǎn)發(fā)來(lái)的Spout消息內(nèi)容之后,獲取氣象解碼消息(包含資料名稱、四級(jí)編碼、氣象數(shù)據(jù)等),然后傳輸給不同的處理程序(Bolt程序)進(jìn)行處理。如圖1所示,在工作節(jié)點(diǎn)監(jiān)聽(tīng)到一個(gè)個(gè)Spout任務(wù)后,將任務(wù)交給某個(gè)Bolt-解碼進(jìn)行處理;Bolt-解碼的LIST實(shí)體類得到該MQ消息體內(nèi)各個(gè)要素的值,或者該文件內(nèi)各個(gè)要素的值,然后再將這些要素值重新進(jìn)行組合輸出給Bolt-入庫(kù)進(jìn)行入庫(kù)操作;在整個(gè)過(guò)程中,Bolt-DIEI負(fù)責(zé)發(fā)送EIDI信息給綜合監(jiān)控接口,為天鏡報(bào)告解碼入庫(kù)的實(shí)時(shí)狀態(tài)。可通過(guò)配置調(diào)整服務(wù)器上Spout和bolt的數(shù)量及分布,按需分配資源執(zhí)行工作。
圖1 Storm解碼入庫(kù)流程圖Fig.1 Storm decoding and warehousing flow chart
由于地面資料類型不同,他們的數(shù)據(jù)庫(kù)表結(jié)構(gòu)也不同,在Bolt-入庫(kù)操作過(guò)程中需要根據(jù)資料類型來(lái)啟動(dòng)相應(yīng)的入庫(kù)程序。如圖2所示,Spout程序?qū)⑾鬏斀oBolt解碼程序,解碼完成后根據(jù)消息的格式和地面數(shù)據(jù)的類型(地面分鐘BUFR資料、地面小時(shí)BUFR資料、報(bào)文類型資料),判斷其為分鐘Tuple、小時(shí)Tuple、報(bào)文Tuple,并將Tuple作為數(shù)據(jù)進(jìn)行發(fā)射,發(fā)射給3類分別處理不同種類的Bolt入庫(kù)函數(shù):Bolt-分鐘數(shù)據(jù)入庫(kù)、Bolt-小時(shí)數(shù)據(jù)入庫(kù)、Bolt-報(bào)文數(shù)據(jù)入庫(kù)進(jìn)行處理。
采用貴州省的地面氣象站觀測(cè)數(shù)據(jù),分別利用Storm解碼入庫(kù)和簡(jiǎn)約流程入庫(kù)[7]的入庫(kù)時(shí)效進(jìn)行對(duì)比,采用的數(shù)據(jù)包括BUFR格式國(guó)家站小時(shí)數(shù)據(jù)、BUFR格式國(guó)家站分鐘數(shù)據(jù),以及文本格式下的國(guó)家站、區(qū)域站、雨量站數(shù)據(jù),采用的服務(wù)器為3臺(tái)linux集群,每臺(tái)的處理器為2.6 GHz/8cores,最多每臺(tái)支持16線程數(shù)。Storm解碼入庫(kù)的數(shù)據(jù)庫(kù)為MySQL,簡(jiǎn)約流程為Oracle數(shù)據(jù)庫(kù)。
圖2 Bolt-入庫(kù)程序流程圖Fig.2 Bolt-warehouse program flow chart
Storm集群配置了3個(gè)Worker、6個(gè)Spout、18個(gè)Bolt,對(duì)應(yīng)Bolt-解碼、Bolt-DIEI、Bolt-入庫(kù)程序。簡(jiǎn)約流程分別由BUFR分鐘解碼入庫(kù)、BUFR小時(shí)解碼入庫(kù)、報(bào)文解碼入庫(kù)3個(gè)入庫(kù)進(jìn)程進(jìn)行處理。可以看出Storm時(shí)效均比簡(jiǎn)約流程提高5倍以上。
表1 Storm程序與簡(jiǎn)約流程時(shí)效對(duì)比Tab.1 Time Efficiency Comparison between Storm Program and Simple Process
在國(guó)家氣象信息中心的3臺(tái)Storm集群中,用Storm實(shí)現(xiàn)了文件格式的國(guó)家站、區(qū)域站、雨量站等近6萬(wàn)自動(dòng)站數(shù)據(jù)的實(shí)時(shí)解碼。實(shí)現(xiàn)了CTS2上傳的國(guó)家站rabbit MQ消息解碼,截止測(cè)試時(shí)間為止,Storm連續(xù)運(yùn)行了138 d,相比簡(jiǎn)約流程時(shí)效同樣提高了5倍以上。
表2 在大數(shù)據(jù)量下的Storm處理時(shí)效Tab.2 The Processing Aging of Storm Program in Big Data
在非功能性性能方面,Storm采用多項(xiàng)技術(shù)達(dá)到地面觀測(cè)數(shù)據(jù)入庫(kù)的要求,時(shí)效性上需要達(dá)到所有該時(shí)次站點(diǎn)在1 min內(nèi)入庫(kù)的要求,可靠性和穩(wěn)定性上要達(dá)到每條數(shù)據(jù)準(zhǔn)確入庫(kù)、記載錯(cuò)誤、及時(shí)處理的流程,可拓展性上達(dá)到方便的應(yīng)對(duì)業(yè)務(wù)及數(shù)據(jù)庫(kù)的分布式拓展,可靈活調(diào)整入庫(kù)配置。在這方面,采用Storm的技術(shù)可以進(jìn)行實(shí)現(xiàn)。Storm的實(shí)現(xiàn)方式及與簡(jiǎn)約流程的實(shí)現(xiàn)方式見(jiàn)表3。
表3 Storm程序與簡(jiǎn)約流程的非功能性對(duì)比Tab.3 Non-functional comparison between Storm Program and Simple Process
隨著社會(huì)生活的豐富,人們對(duì)氣象與環(huán)境的關(guān)注度越來(lái)越高,在氣象行業(yè)內(nèi)部,海量氣象數(shù)據(jù)的存儲(chǔ)共享與應(yīng)用顯得越來(lái)越重要,用戶對(duì)氣象數(shù)據(jù)訪問(wèn)的實(shí)時(shí)性、高效性要求也越來(lái)越高。本文通過(guò)對(duì)Storm解碼入庫(kù)進(jìn)行理論設(shè)計(jì)與應(yīng)用,并與簡(jiǎn)約流程進(jìn)行對(duì)比,進(jìn)一步驗(yàn)證了Storm解碼入庫(kù)的處理性能。
①采用Storm分布式框架,使用Spout節(jié)點(diǎn)連接外部數(shù)據(jù)源,將數(shù)據(jù)轉(zhuǎn)化為Tuple,傳遞給解碼Bolt、入庫(kù)Bolt和DI/EI消息Bolt,分別進(jìn)行實(shí)時(shí)的入庫(kù)和監(jiān)控,提高了入庫(kù)性能。
②優(yōu)化解碼入庫(kù)的處理流程,將解碼和入庫(kù)解耦。當(dāng)某一過(guò)程出現(xiàn)故障的情況下,可以進(jìn)行靈活切換,切換的節(jié)點(diǎn)可以從消息源頭(Spout)、處理進(jìn)程(Bolt)來(lái)進(jìn)行,且每個(gè)節(jié)點(diǎn)故障后能自動(dòng)重啟,減少運(yùn)維壓力和入庫(kù)遲鈍。
③實(shí)際應(yīng)用的效果顯示,Storm解碼入庫(kù)流程比簡(jiǎn)約流程普遍時(shí)效提高了5倍以上,穩(wěn)定性大有提高,這與Storm主要采用MySQL數(shù)據(jù)庫(kù)有一定關(guān)系,探討在不同數(shù)據(jù)庫(kù)下的Storm入庫(kù)性能優(yōu)化也是未來(lái)的一個(gè)方向。