王若曈,黃向東,張 博,王建民,羅 兵
(1.國家氣象中心,北京100081;2,清華大學(xué)軟件學(xué)院,北京100084)
實時氣象數(shù)據(jù)種類繁多,并具有非常大的數(shù)量和容量,是名副其實的領(lǐng)域大數(shù)據(jù)。據(jù)統(tǒng)計,在天氣預(yù)報中,服務(wù)器每天都要新存儲約1 500 萬個500KB至10 MB大小不等的數(shù)據(jù)文件,未來則會達到每天1億個新文件,日增量50TB 以上,預(yù)報員使用這些海量數(shù)據(jù)時,通常需要達到至少每秒10個文件的連續(xù)閱讀速度以產(chǎn)生視覺動畫效果,方可進行高效率天氣預(yù)報。
氣象數(shù)據(jù)中很重要的一種數(shù)據(jù)稱為“模式數(shù)據(jù)”。模式數(shù)據(jù)是由高性能計算機根據(jù)當前天氣實況數(shù)據(jù)通過物理方程計算而成的,模式數(shù)據(jù)每天計算2~4次或更多次,每次生成大概1 000個物理量從當前時刻至未來240小時時效(或更長)的一系列二進制網(wǎng)格數(shù)據(jù),時效通常3小時間隔,每個網(wǎng)格值代表經(jīng)緯度網(wǎng)格上的一個物理量值,一個文件大小通常在1 MB~2 MB 之間。由于模式物理量多,每天多次起報,預(yù)報時效密集,模式種類多,存儲時間較長,因此在氣象數(shù)據(jù)中,無論從數(shù)據(jù)個數(shù)還是數(shù)據(jù)存儲量來說,模式數(shù)據(jù)是比重最大的“大數(shù)據(jù)”。
根據(jù)國家氣象中心(中央氣象臺)的統(tǒng)計,預(yù)報員常用的實時氣象數(shù)據(jù)在服務(wù)器端的快照平均約等于5千萬個,總?cè)萘看蟾艦?00TB,其中70%為模式數(shù)據(jù)。
隨著氣象數(shù)據(jù)規(guī)模的持續(xù)高速增長,全國天氣預(yù) 報 平 臺MICAPS(Meteorological Information Comprehensive Analysis Processing System)[1]3.0版自2010年起就開始面臨嚴峻的性能和存儲壓力。
(1)海量氣象數(shù)據(jù)在解析、寫入方面存在挑戰(zhàn)。
氣象數(shù)據(jù)對時間、可靠性非常敏感。除模式數(shù)據(jù),氣象數(shù)據(jù)還包括衛(wèi)星、雷達、地面、探空等實況數(shù)據(jù)。每一個數(shù)據(jù)對預(yù)報的準確率都具有至關(guān)重要的作用。因此,任何由于原始數(shù)據(jù)解析/寫入系統(tǒng)故障導(dǎo)致的數(shù)據(jù)丟失或延遲都是不能容忍的。
(2)海量氣象數(shù)據(jù)的存儲面臨訪問與查詢緩慢的問題。
以MICAPS 3.0 為例,目前國內(nèi)外氣象數(shù)據(jù)存儲技術(shù)仍多以基于目錄樹形結(jié)構(gòu)的文件系統(tǒng)進行組織。而傳統(tǒng)文件系統(tǒng)往往難以承受每日百萬級的文件數(shù)量增長,且文件目錄的樹形結(jié)構(gòu)不能很好地滿足預(yù)報員對數(shù)據(jù)進行按序訪問的特點,比如按照時間順序瀏覽數(shù)據(jù)。據(jù)測量,在現(xiàn)有的基于文件系統(tǒng)的天氣預(yù)報系統(tǒng)中,當系統(tǒng)存儲數(shù)據(jù)文件個數(shù)達到2 000萬個時,僅服務(wù)器端文件定位時間就要耗時500ms,按序訪問時間將更長,無法很好地滿足應(yīng)用需求。傳統(tǒng)關(guān)系型數(shù)據(jù)庫雖然具有排序和索引能力,但其固定的關(guān)系表模式使得系統(tǒng)設(shè)計十分復(fù)雜,其磁盤存儲結(jié)構(gòu)也限制了其有序訪問的優(yōu)化。因此,無論文件系統(tǒng)還是傳統(tǒng)數(shù)據(jù)庫技術(shù)的存儲和查詢方式都無法很好地滿足氣象數(shù)據(jù)的高性能查詢。
圖1為氣象數(shù)據(jù)處理流程圖,原始數(shù)據(jù)經(jīng)采集、分發(fā)、解析、存儲,最終在預(yù)報員工作平臺上進行可視化,經(jīng)過預(yù)報員的分析判斷,制作天氣預(yù)報結(jié)果,向公眾發(fā)布。
Figure 1 Meteorological data processing flow圖1 氣象數(shù)據(jù)處理流程
為提升海量氣象數(shù)據(jù)的實時處理能力,實現(xiàn)MICAPS客戶端對于氣象數(shù)據(jù)更高效的應(yīng)用,中國自2013年正式啟動MICAPS第4版(簡稱MICAPS 4)的研發(fā)工作,其中海量氣象數(shù)據(jù)實時解析與存儲系統(tǒng)是MICAPS 4的核心系統(tǒng)之一。該系統(tǒng)必須能夠?qū)崿F(xiàn)海量數(shù)據(jù)實時、可靠的解析與寫入,支撐上百TB 級的數(shù)據(jù)存儲,客戶端毫秒級延遲訪問以及7*24小時的穩(wěn)定運行。
目前MICAPS 4 已經(jīng)投入運行,有力支撐著全國天氣預(yù)報業(yè)務(wù)。本文將針對氣象數(shù)據(jù)模型的特點以及用戶行為,詳細描述MICAPS海量氣象數(shù)據(jù)實時解析與存儲系統(tǒng)的設(shè)計原理、構(gòu)架與實現(xiàn)細節(jié)。
本文第2節(jié)介紹對氣象數(shù)據(jù)解析和存儲的相關(guān)研究工作;第3節(jié)介紹海量氣象數(shù)據(jù)實時解析系統(tǒng)的設(shè)計與實現(xiàn),詳細描述了該子系統(tǒng)的所有關(guān)鍵模塊及實現(xiàn)原理;第4節(jié)介紹基于非關(guān)系型分布式Key-Value數(shù)據(jù)庫,以及多維索引數(shù)據(jù)模型的海量氣象數(shù)據(jù)存儲系統(tǒng)的設(shè)計實現(xiàn),該存儲系統(tǒng)可以滿足全體MICAPS用戶毫秒級查詢;第5 節(jié)實際測量解析系統(tǒng)和存儲系統(tǒng)的性能,并加以分析;第6節(jié)進行總結(jié)。
在氣象數(shù)據(jù)存儲技術(shù)領(lǐng)域,當前業(yè)界仍以基于傳統(tǒng)文件系統(tǒng)的技術(shù)為主。
文獻[1]描述了針對MICAPS 3.0 客戶端進行性能優(yōu)化的方案,但僅限于客戶端圖形渲染算法的改進,對于如何提升服務(wù)端數(shù)據(jù)獲取性能并沒有給出解決方案。
文獻[2]指出,由于以氣象數(shù)據(jù)為例的多維數(shù)據(jù)文件的復(fù)雜性和海量性,一般商業(yè)數(shù)據(jù)庫的適應(yīng)性受到很大限制,而文件系統(tǒng)則成為較為經(jīng)濟的存儲方法。
文獻[3]以天氣預(yù)報行業(yè)為例,提出采用傳統(tǒng)文件系統(tǒng)進行多維數(shù)據(jù)的存儲,并在上層使用Samba等協(xié)議工具提供遠程存取服務(wù)。實際應(yīng)用中使用文件系統(tǒng)時,往往以不同維度作為目錄,構(gòu)建出一個樹形結(jié)構(gòu)存儲。每種維度作為目錄樹的一層內(nèi)部節(jié)點,數(shù)據(jù)文件作為樹的葉子節(jié)點。為了形成樹形結(jié)構(gòu),需要人為規(guī)定數(shù)據(jù)文件維度的層次關(guān)系。這種方式簡化了系統(tǒng)設(shè)計,對于數(shù)據(jù)文件的存儲交由服務(wù)器的文件系統(tǒng)完成。然而由于文件系統(tǒng)本身并不考慮不同文件的邏輯順序,對于維度的有序訪問時,只能通過獲取某一目錄下所有文件,并進行手動排序,即對葉子節(jié)點進行排序。當對其他維度進行排序時,則需要過濾不同中間節(jié)點的葉子節(jié)點,并進行合并和排序。當文件數(shù)量達到百萬、千萬級時,文件定位的速度將出現(xiàn)顯著下降。
文獻[4]給出了基于SAN(Storage Area Network)和GPFS(General Parallel File System)的高性能氣象數(shù)據(jù)存儲集群架構(gòu),能夠很好地解決海量存儲、容災(zāi)備份等特點,然而并未對數(shù)據(jù)有序獲取進行優(yōu)化。
文獻[5]提出了利用NetCDF文件格式進行氣象數(shù)據(jù)的表示和存儲,這種方案可以將大量小文件打包為一個大文件,減少了小文件個數(shù)。但是,由于NetCDF文件本身并不支持索引在各個維度的按序檢索功能,無法滿足預(yù)報員快速時空翻頁的需求。此外,由于依賴傳統(tǒng)文件系統(tǒng),采用了集中式存儲,該方案在面對大規(guī)模并發(fā)訪問時也存在性能隱患。
文獻[6]提出了針對氣象數(shù)據(jù)的多維數(shù)據(jù)空間模型,并給出采用基于Key-Value 的存儲系統(tǒng)Cassandra對其進行實現(xiàn)的方法。然而文獻[6]僅給出了多維數(shù)據(jù)到Cassandra存儲結(jié)構(gòu)的轉(zhuǎn)換指導(dǎo)方法,并未給出確切的Cassandra存儲結(jié)構(gòu),此外,作者并未對數(shù)據(jù)的操作建立足夠的索引,導(dǎo)致部分查詢可能存在性能問題。并且文獻[6]中并未給出兼容傳統(tǒng)文件視圖的方法。
非關(guān)系型數(shù)據(jù)庫在處理海量數(shù)據(jù)方面具有較強優(yōu) 勢[7],以Hbase、Cassandra[8]為 代 表 的 基 于Key-Value的存儲系統(tǒng)廣泛應(yīng)用于大數(shù)據(jù)場景。文獻[9]提出了基于Cassandra的大規(guī)模裝備監(jiān)測數(shù)據(jù)的存儲模式設(shè)計,一些弱一致性存儲系統(tǒng)[10]也常常用于實現(xiàn)低延遲的存儲與讀取操作。
在數(shù)據(jù)的ETL 方面,現(xiàn)有工作往往沒有考慮分布式的實現(xiàn)[11,12],并且對非結(jié)構(gòu)化數(shù)據(jù)的討論不足。這也導(dǎo)致了現(xiàn)有工作無法很好應(yīng)用在氣象領(lǐng)域。Zhu Y 等人[13]設(shè)計了非結(jié)構(gòu)化數(shù)據(jù)管理系統(tǒng)laUD-MS,該系統(tǒng)對于音視頻等數(shù)據(jù)做了優(yōu)化,但缺少高效的數(shù)據(jù)解析模塊。有人提出使用MapReduce對文件數(shù)據(jù)進行解析[14],然而依賴MapReduce的方法無法滿足氣象數(shù)據(jù)的時效性。
一個實時解析系統(tǒng)需要具備高吞吐、高容錯、高性能、高可擴展性四個要素。本節(jié)首先從四個要素介紹解析系統(tǒng)的設(shè)計思想,然后詳細介紹解析系統(tǒng)各個模塊在氣象數(shù)據(jù)實踐中的應(yīng)用。
(1)高吞吐設(shè)計。
高吞吐是指解析系統(tǒng)輸入數(shù)據(jù)源數(shù)據(jù)量大,對于氣象數(shù)據(jù),海量數(shù)據(jù)往往集中到達,需要系統(tǒng)解析速度與數(shù)據(jù)輸入速度基本相等。此外,隨著業(yè)務(wù)的發(fā)展,需要能夠快速地擴充系統(tǒng)的吞吐量。
為此我們采用了P2P 分布式架構(gòu)。在解析系統(tǒng)中,設(shè)置多臺工作節(jié)點,每臺節(jié)點僅負責特定種類的數(shù)據(jù)。當數(shù)據(jù)到達時,不同數(shù)據(jù)會選擇不同的節(jié)點進行解析。一個節(jié)點的資源(帶寬或者CPU等)達到上限時,加入新的節(jié)點進入集群,新節(jié)點將接管資源緊張節(jié)點的部分數(shù)據(jù)解析工作。
(2)高容錯設(shè)計。
高容錯是指任意時刻,不允許系統(tǒng)暫停服務(wù)的故障。由于數(shù)據(jù)流式到達,系統(tǒng)宕機將丟失數(shù)據(jù)。
為防止單點故障,所有服務(wù)器節(jié)點均采用虛擬化技術(shù),利用IP 地址漂移,具有冗余的物理備份,發(fā)生服務(wù)器故障時,可以熱切換到備份服務(wù)器而不影響數(shù)據(jù)接收。每臺解析服務(wù)器均采用雙網(wǎng)卡,連接到兩個內(nèi)部交換機,從而避免交換機故障。
(3)高性能設(shè)計。
高性能設(shè)計是指盡可能充分利用系統(tǒng)資源,在給定硬件環(huán)境下達到盡可能好的性能。
整個解析流程劃分為數(shù)據(jù)到達、任務(wù)分發(fā)、數(shù)據(jù)解析、數(shù)據(jù)持久化四個階段,不同的階段耗時不同,例如,解碼任務(wù)耗時較久,而數(shù)據(jù)持久化耗時較短。若簡單采用多線程技術(shù)進行上述階段的執(zhí)行,會由于前一階段過慢而降低整個系統(tǒng)的性能,或由于前一階段過快、后一階段過慢而增加緩存占用。
我們采用了SEDA (Stage Event Driven Architecture)架構(gòu),將每個階段變成異步操作。每個階段都擁有自己的資源(即線程池),通過調(diào)節(jié)不同階段的資源數(shù),可以達到系統(tǒng)資源的最大利用,并使得各個階段的速度達到平衡。
此外,該架構(gòu)下可以方便地重新調(diào)節(jié)各個階段的資源,使得在數(shù)據(jù)處理速度發(fā)生變化時,系統(tǒng)能夠動態(tài)保持平衡。
(4)高可擴展性。
由于氣象數(shù)據(jù)種類多變,現(xiàn)有解碼模塊無法處理新的氣象數(shù)據(jù)類型,因此系統(tǒng)必須在不重啟的情況下擴展對于新興數(shù)據(jù)的處理能力。
我們采用Java的反射機制,進行解碼功能的動態(tài)加載。為了降低Java反射機制導(dǎo)致的性能問題,我們采用交互方式進行解碼功能的擴展。通過控制程序,JVM 動態(tài)加載新的解碼實現(xiàn),并映射該解碼器所能處理的數(shù)據(jù)類型到內(nèi)存中,當新的數(shù)據(jù)類型到達時,新的解碼器開始工作。
圖2為MICAPS 4海量氣象數(shù)據(jù)實時解析系統(tǒng)的總體設(shè)計,粗箭頭代表數(shù)據(jù)流,描述了原始氣象數(shù)據(jù)接收、解析、寫入、存儲、客戶端訪問的全過程,本節(jié)將討論實時解析系統(tǒng)的關(guān)鍵模塊。
數(shù)據(jù)觸發(fā)器:氣象數(shù)據(jù)國際標準采用FTP 協(xié)議傳送,但商業(yè)化FTP 服務(wù)器通常只具備數(shù)據(jù)接收功能,從而只能通過目錄輪詢來判斷數(shù)據(jù)是否到達,影響了處理效率。在MICAPS4實時解析系統(tǒng)中,沒有采用基于數(shù)據(jù)時間表的傳統(tǒng)輪詢策略,而是研制了經(jīng)擴展的FTP 服務(wù)器組件,每一個數(shù)據(jù)接收完成立即發(fā)送消息,保證解析程序的實時處理。
解碼執(zhí)行線程池:數(shù)據(jù)觸發(fā)器保證了數(shù)據(jù)到達即處理,為了不影響新數(shù)據(jù)接收,解析系統(tǒng)對于數(shù)據(jù)解析的過程是異步的,這樣同一時間內(nèi)可能會有大量的解析任務(wù)并發(fā)運行。實時解析系統(tǒng)利用解碼執(zhí)行線程池來保證該過程的穩(wěn)定、高效。根據(jù)處理數(shù)據(jù)類型的不同,解碼執(zhí)行線程池均被設(shè)置了不同的線程數(shù)閾值,達到這個閾值后,新任務(wù)將等待,避免過度消耗系統(tǒng)資源。對于模式數(shù)據(jù),由于GRIB[15]壓縮率較高,解碼需要消耗很大的內(nèi)存,因此處理模式的解析服務(wù)器線程閾值較小。而處理雷達、衛(wèi)星的解析服務(wù)器,數(shù)據(jù)量密集,IO 消耗大,而CPU、內(nèi)存消耗小,為盡快完成數(shù)據(jù)的寫入,在這些服務(wù)器上保持了較高的線程數(shù)閾值。
解碼任務(wù):解碼任務(wù)對應(yīng)解碼執(zhí)行線程池中的一個線程,實現(xiàn)對于一個具體氣象數(shù)據(jù)的解析。解析過程需要用到一些算法模塊,如GRIB 解碼、網(wǎng)格裁剪等,這些算法的調(diào)用方式為同步調(diào)用。
臨時文件數(shù)據(jù)池:原始數(shù)據(jù)以及氣象算法加工過程中中間結(jié)果將在解析服務(wù)器上保存一段時間,由文件清除器后臺線程定期刪除。當存儲服務(wù)器發(fā)生故障時,文件恢復(fù)器將這些數(shù)據(jù)重新加載到解碼任務(wù)分發(fā)器,就可以實現(xiàn)數(shù)據(jù)快速恢復(fù)。
Figure 2 Design of massive data realtime parsing servers圖2 海量數(shù)據(jù)實時解析服務(wù)器設(shè)計
數(shù)據(jù)寫入:原始數(shù)據(jù)解析為客戶端數(shù)據(jù)格式后,寫入任務(wù)分發(fā)器將數(shù)據(jù)派發(fā)給寫入任務(wù),放入寫入執(zhí)行線程池中向存儲服務(wù)器寫入。寫入任務(wù)利用存儲服務(wù)器連接池以及負載均衡組件保證對于每臺存儲服務(wù)器的平衡。由于存儲服務(wù)器可能出現(xiàn)硬件故障,因此連接池及負載均衡器還具備修復(fù)和切換連接的功能。
日志與監(jiān)控:解析系統(tǒng)在原始數(shù)據(jù)接收、解碼、寫入的全過程中,均記錄了不同優(yōu)先級的日志信息,既便于對系統(tǒng)故障的人工診斷,也為監(jiān)控系統(tǒng)提供了信息。部署在解析服務(wù)器上的監(jiān)控進程定時提取解析日志,向監(jiān)控服務(wù)器匯報解析系統(tǒng)的健康狀況。解析進程與監(jiān)控進程是部署在相同服務(wù)器上的兩個獨立進程,這是為了避免監(jiān)控系統(tǒng)影響解析系統(tǒng)的性能與穩(wěn)定性。
本節(jié)首先深入分析實時氣象數(shù)據(jù)的多維索引模型與用戶行為,然后介紹該模型的實現(xiàn),以及針對用戶行為的模型擴展結(jié)構(gòu)設(shè)計與實現(xiàn),該實現(xiàn)可以高性能滿足用戶的各種查詢需求。
4.1.1 多維索引空間結(jié)構(gòu)
氣象數(shù)據(jù)是典型的非結(jié)構(gòu)化數(shù)據(jù),并且具有多維索引結(jié)構(gòu)和Key-Value特點,每類數(shù)據(jù)都可以由一個多維索引唯一確定一個數(shù)據(jù)值,這個數(shù)據(jù)值可以是一個模式網(wǎng)格,也可以是一個衛(wèi)星數(shù)據(jù)等。各類數(shù)據(jù)的多維索引表示如下:
模式數(shù)據(jù):模式名、物理量、層次、起報時間、預(yù)報時效,如歐洲模式8日20 點起報,24小時之后(即9日20時)的850百帕全球溫度場。
地面數(shù)據(jù):觀測時間、觀測內(nèi)容的自然語言描述字符串,如5月13日早8點,全國國家站地面觀測實況。
高空數(shù)據(jù):觀測時間、層次、觀測內(nèi)容的自然語言描述字符串,如13日晚8點,850hPa,全國高空填圖。
衛(wèi)星數(shù)據(jù):衛(wèi)星名稱、觀測時間、通道、投影方式。
雷達數(shù)據(jù):雷達ID、觀測時間、物理量、仰角、投影方式。
地面、高空、衛(wèi)星、雷達統(tǒng)稱實況數(shù)據(jù)。
以模式數(shù)據(jù)為例進行數(shù)據(jù)模型抽象:
如表1所示,在某模式(Model)數(shù)據(jù)中,某個具體數(shù)據(jù)(File)可以通過物理量(Element)、層次(Level)、起報時間(Time)、預(yù)報時效(Period)唯一確定。因此,由五個索引可唯一確定一個文件F,即(M,E,L,T,P)→F。
Table 1 Multi-dimensional index structure of model data表1 模式數(shù)據(jù)多維索引結(jié)構(gòu)
4.1.2 用戶行為抽象
預(yù)報員常用的操作包括“指定數(shù)據(jù)”“最新數(shù)據(jù)檢索”“左右翻頁”“上下翻頁”“目錄查看”等操作,占全部操作70%以上。用戶必須通過流暢的翻頁操作形成的視覺動畫效果實現(xiàn)對于未來天氣狀況的預(yù)測。基于氣象數(shù)據(jù)多維索引結(jié)構(gòu),我們對五種高頻率用戶行為進行抽象:
(1)“指定數(shù)據(jù)”,用于直接顯示某時間點的氣象數(shù)據(jù)。即指明需要數(shù)據(jù)的全部多維索引值,直接命中該數(shù)據(jù)。
(2)“最新數(shù)據(jù)檢索”,即用戶希望通過僅部分索引得到相關(guān)數(shù)據(jù)。比如用戶不能準確指定最新時間的前提下,希望服務(wù)器返回最新觀測時間的衛(wèi)星數(shù)據(jù)。
(3)“左右翻頁”用于快速查看天氣狀況隨時間的演變情況。模式數(shù)據(jù)的“左右翻頁”操作是在保持其他維度索引固定的前提下,對于“預(yù)報時效”索引進行雙向快速連續(xù)變化。實況數(shù)據(jù)的“左右翻頁”操作是保持其他維度索引固定的前提下,對“觀測時間”索引進行雙向快速連續(xù)變化。例如,對(日本模式,相對濕度,850hPa,13日8時起報,3小時時效)右翻頁的結(jié)果為:(日本模式,相對濕度,850hPa,13日8時起報,6小時時效)。
(4)“上下翻頁”用于快速查看天氣狀況隨高度的變化狀況。模式數(shù)據(jù)、高空數(shù)據(jù)的“上下翻頁”操作是保持其他維度索引固定的前提下,對“層次”索引進行雙向快速連續(xù)變化。例如,對(日本模式,相對濕度,850hPa,13日8時起報,3小時時效)上翻頁的結(jié)果為:(日本模式,相對濕度,700hPa,13日8時起報,3小時時效)。
(5)“樹形檢索”,用戶多年來一直使用文件系統(tǒng)URL 來進行元數(shù)據(jù)瀏覽,查看服務(wù)器當前存儲了哪些氣象數(shù)據(jù),該方法方便直觀,即使不采用文件系統(tǒng)作為存儲,新的存儲系統(tǒng)也應(yīng)保留用戶基于目錄樹的訪問行為。
綜上所述,實時氣象數(shù)據(jù)模型具有多維度,部分維度有序,部分維度無序的特點。在這種數(shù)據(jù)上,常用操作包括:在有序維度上按序遍歷數(shù)據(jù),在無序維度上隨機訪問數(shù)據(jù),并且按序訪問保證高性能。
文獻[6]提到,Cassandra 是一個基于Key-Value的P2P分布式系統(tǒng),適合作為多維數(shù)據(jù)空間結(jié)構(gòu)的實現(xiàn)[6],這同氣象數(shù)據(jù)多維索引鍵值結(jié)構(gòu)相呼應(yīng)。同時,在文獻[6]中,在海量小文件場景下,對Samba、HDFS、Cassandra等存儲方案進行了詳細的理論分析和性能對比,并分析了每種方案的應(yīng)用場景。由于Cassandra在存儲具有多維空間特點的海量小數(shù)據(jù)方面具有顯著的優(yōu)勢,因此我們采用Cassandra作為實時氣象數(shù)據(jù)存儲的實現(xiàn)方案。
4.2.1 數(shù)據(jù)表
針對實時氣象數(shù)據(jù)內(nèi)容存儲,我們設(shè)計如下Column Family,見表2。
Table 2 Data table表2 數(shù)據(jù)表
這種數(shù)據(jù)存儲設(shè)計支持隨機指定數(shù)據(jù)的讀取,還可支持有序訪問。例如,在T639模式CF中,當用戶查閱WIND 的500hPa層次下15050820 時刻24小時時效的數(shù)據(jù)后,如果希望查看下一個時效的數(shù)據(jù),由于用戶并不能確定下一個預(yù)報時效的數(shù)值,傳統(tǒng)文件系統(tǒng)只能進行文件列表獲取。而在這種設(shè)計中,由于列是按序存儲在磁盤上的,在指定了15050820.024列后,利用區(qū)間查詢,即可找到下一個列:如15050820.027,也可快速命中前一個時效的數(shù)據(jù)如15050820.021。因此,這種數(shù)據(jù)庫設(shè)計是緊密切合左右翻頁應(yīng)用(即有序訪問)需求的。
4.2.2 維度索引表
針對其他維度的有序訪問,我們通過維度索引表實現(xiàn),我們設(shè)計了如下Column Family,見表3。
Table 3 Dimension index table表3 維度索引表
利用維度索引表和數(shù)據(jù)表,可以實現(xiàn)數(shù)據(jù)的上下快速翻頁,比如用戶當前正在瀏覽850hPa的T639風場數(shù)據(jù)15050820.024,希望切換至上一層(700hPa)相同時間點的數(shù)據(jù),則可利用T639/WIND/在列族level 中查找到上一層應(yīng)為700hPa,進 而 利 用T639/WIND/700/15050820.024在數(shù)據(jù)表中直接定位所需數(shù)據(jù)。
4.2.3 最新時刻表
在實時氣象數(shù)據(jù)應(yīng)用中,用戶不能確定當前系統(tǒng)中最新數(shù)據(jù)的完整名稱,因此無法指定確切的數(shù)據(jù)索引。因此,需要設(shè)計一個列族用于存儲該信息。Column Family設(shè)計如下,見表4。
Table 4 Latest data time table表4 最新時刻表
利用最新時刻表,即可實現(xiàn)最新數(shù)據(jù)的快速模糊查找,例如用戶提出請求“T639/WIND/500,*.024”,表示希望獲得T639在500hPa風場的最近一次起報的24小時預(yù)報時效的數(shù)據(jù),利用用戶傳入的參數(shù),立即可以在列族latest_data_time中找到該數(shù)據(jù)的準確名稱為15050820.024,則用戶進一步根據(jù)完整索引WIND/500/15050820.024,即可在數(shù)據(jù)表T639中檢索到對應(yīng)的網(wǎng)格數(shù)據(jù)。
4.2.4 虛擬文件視圖表
在實際生產(chǎn)系統(tǒng)中,新系統(tǒng)往往要兼容舊系統(tǒng)的使用方式。利用Cassandra來對傳統(tǒng)文件系統(tǒng)進行改造,極大提升了海量小文件的查詢性能,但造成了原始數(shù)據(jù)的瀏覽不如文件系統(tǒng)直觀,預(yù)報員無法通過資源管理器直觀看到文件系統(tǒng)的樹形目錄結(jié)構(gòu),這樣會造成用戶不知道服務(wù)器存儲了哪些數(shù)據(jù),進而需要客戶端龐大復(fù)雜的配置文件才能實現(xiàn)對于服務(wù)器的訪問。為了解決這個問題,同時為了保留現(xiàn)有用戶的使用習慣,我們設(shè)計了列族treeview,基于數(shù)據(jù)庫環(huán)境,建立模擬文件系統(tǒng)的仿真環(huán)境,用戶可以直接利用樹形控件瀏覽全部數(shù)據(jù),完全像同原有的Samba文件系統(tǒng)交互一樣。Column Family設(shè)計如下,見表5。
Table 5 View of virtual files表5 虛擬文件視圖表
用戶首先可以檢索到根元素root下全部數(shù)據(jù)的CF分類,即有幾大類氣象數(shù)據(jù),得到T639,RADAR 等列族,通過T639,可以得到T639下的物理量列表,如溫度TMP,高度HGT 等,傳入T639/HGT 又可以得到T639高度場有哪些層次,這時可以得到100,200,300,…,850,925,1000等,通過T639/HGT/500可以得到T639 模式500hPa高度場下的全部數(shù)據(jù)名稱,如15050720.000—15050720.240,15050808.000—15050808.240,15050820.000—15050820.240,利用數(shù)據(jù)名稱的完整信息即可在對應(yīng)的數(shù)據(jù)表中對該數(shù)據(jù)內(nèi)容直接進行檢索。
在MICAPS 4 數(shù)據(jù)環(huán)境中,采用機架服務(wù)器組成實時解析服務(wù)器集群以及分布式數(shù)據(jù)存儲集群,用于海量氣象數(shù)據(jù)的實時解析與存儲。各集群以及MICAPS 4客戶端均通過千兆網(wǎng)絡(luò)相連。除外部交換機外,解析集群、存儲集群還通過雙千兆內(nèi)部交換機相連,避免集群內(nèi)部網(wǎng)絡(luò)數(shù)據(jù)交換影響外部網(wǎng)絡(luò),同時避免交換機單點失效。運行經(jīng)驗表明,數(shù)據(jù)存儲副本數(shù)為3時即可獲得較優(yōu)異的訪問性能。
MICAPS 4數(shù)據(jù)環(huán)境的網(wǎng)絡(luò)拓撲結(jié)構(gòu)如圖3所示。
數(shù)據(jù)解析服務(wù)器和數(shù)據(jù)存儲服務(wù)器的硬件配置信息如表6所示。
首先,我們測量存儲集群的訪問性能。
Figure 3 MICAPS 4system topology圖3 MICAPS 4系統(tǒng)網(wǎng)絡(luò)拓撲圖
Table 6 Hardware configuration表6 硬件配置表
在真實MICAPS 4業(yè)務(wù)環(huán)境下集群的性能測量結(jié)果如表7(50并發(fā))和表8(100并發(fā))所示(輸出的時間為數(shù)據(jù)庫查詢時間+網(wǎng)絡(luò)傳輸時間的總和)??梢钥吹?,針對不同類型的數(shù)據(jù),不同的并發(fā)數(shù),最新時刻表的平均訪問時間幾乎都在1ms左右,說明隨機訪問最新數(shù)據(jù)時,查找最新數(shù)據(jù)索引值耗時代價相當小,甚至可以忽略。
從讀取數(shù)據(jù)的性能觀察,讀取時間和單個數(shù)據(jù)的字節(jié)數(shù)近似成正比,這說明大量的時間消耗在網(wǎng)絡(luò)傳輸上,而數(shù)據(jù)庫查找鍵值的定位時間很小。歐洲粗網(wǎng)格數(shù)據(jù)的最高隨機讀取時間是14.2ms,最低讀取時間為3.03ms,除去網(wǎng)絡(luò)傳輸時間,說明數(shù)據(jù)庫在模式數(shù)據(jù)定位過程的時間消耗為10 ms量級,甚至更少。所有數(shù)據(jù)最高讀取時間和平均讀取時間差別較大,但最低讀取時間和平均讀取時間相差較小,說明在第1次讀取數(shù)據(jù)時,由于數(shù)據(jù)沒有被緩存到服務(wù)器內(nèi)存,因此需要通過磁盤讀取,速度稍慢,一旦常用數(shù)據(jù)被緩存進入內(nèi)存,之后的讀取就具備了很高的性能。由于每臺服務(wù)器內(nèi)存高達128GB,基本可以滿足全部用戶常用數(shù)據(jù)的緩存。
左右翻頁操作實際上是針對Cassandra的列進行有序連續(xù)讀取,從測量數(shù)據(jù)看,大部分左右翻頁時間也消耗在網(wǎng)絡(luò)傳輸上,只有極少量(通常是前幾次)左右翻頁的操作稍慢,平均翻頁速度很快。以FY2E 衛(wèi)星數(shù)據(jù)為例,即使在最差情況下,也可以保證每秒20 幀衛(wèi)星數(shù)據(jù)的讀取性能(1000/48.6=20.6),其他數(shù)據(jù)也可以保證至少5~10幀/秒的左右翻頁性能。左右翻頁(有序訪問)的速度往往是隨機訪問的1.5倍,這個時間開銷集中在有序列的區(qū)間查找操作上。
上下翻頁(不依賴于Cassandra的有序訪問)的時間開銷近似等于隨機訪問時間加上一個很小的常量數(shù)值,這也與維度索引表+數(shù)據(jù)表的實現(xiàn)機制是吻合的。事實上,我們擴充的索引表的性能比Cassandra自身的區(qū)間查詢性能更好,保證了用戶在各個維度各個方向連續(xù)讀取都具備很好的性能。同時也說明,利用索引表+隨機訪問,可以實現(xiàn)任意數(shù)量有序維度數(shù)據(jù)的連續(xù)訪問。
Table 7 Query performance when concurrence number is 50表7 50并發(fā)下的查詢性能
當并發(fā)數(shù)在100時,系統(tǒng)并發(fā)負載量為50用戶的2倍,但是從各類數(shù)據(jù)不同操作的平均時間來看,沒有出現(xiàn)時間消耗翻倍增長的情況,大部分操作的平均時間只是略大于50用戶并發(fā)時的測量結(jié)果,個別操作甚至出現(xiàn)比50用戶并發(fā)性能更好的情況(如T639風場左右翻頁)。從單個T639風場數(shù)據(jù)大小看,100用戶的并發(fā)訪問需要的網(wǎng)絡(luò)傳輸總量已經(jīng)超過了單臺服務(wù)器的網(wǎng)絡(luò)額定帶寬,但是由于存儲集群副本的存在,并發(fā)訪問的用戶將被分配到不同的協(xié)調(diào)者節(jié)點上,這樣就會分擔每臺服務(wù)器的壓力,提升用戶訪問性能,偶爾出現(xiàn)的并發(fā)數(shù)增加性能提升,可能因為訪問請求被分配到負載較輕的節(jié)點上,或者協(xié)調(diào)者節(jié)點恰好是數(shù)據(jù)所在節(jié)點,從而避免了集群內(nèi)部的數(shù)據(jù)傳輸。
在具有2 000萬個小文件的Samba服務(wù)器上進行同樣數(shù)據(jù)的讀取和翻頁測試,歐洲細網(wǎng)格數(shù)據(jù)獲取最新文件名需要3.4s,隨機讀取需要0.9s,左右翻頁需要4s,上下翻頁需要1.5s。這是因為文件系統(tǒng)不具有按序索引的功能,在海量小文件的文件系統(tǒng)中獲取文件列表手動排序是非常大的開銷。
表9為實時解析系統(tǒng)對Cassandra的寫入性能。
Table 8 Query performance when concurrence number is 100表8 100并發(fā)下的查詢性能
Table 9 Realtime parsing system performance表9 實時解析系統(tǒng)性能
從表中看出,所有數(shù)據(jù)到Cassandra的寫入速度都較快。模式數(shù)據(jù)寫入速度慢于其他數(shù)據(jù),這是因為模式數(shù)據(jù)GRIB 解壓縮耗時較長,生成MICAPS數(shù)據(jù)格式后才能進行寫入。此外,向Cassandra集群寫入的數(shù)據(jù)均為大量的小數(shù)據(jù),這也會在一定程度上影響網(wǎng)絡(luò)總體傳輸性能。
表10為相同數(shù)據(jù)集對Samba服務(wù)器的寫入性能。
Table 10 MICAPS 3.0data parsing and writing performance表10 MICAPS 3.0數(shù)據(jù)解析與寫入性能
可見基于Cassandra的實時解析與存儲系統(tǒng)比傳統(tǒng)文件系統(tǒng)具有明顯的數(shù)據(jù)寫入優(yōu)勢,而且單個數(shù)據(jù)越小,數(shù)據(jù)個數(shù)越多,優(yōu)勢越明顯。這是因為數(shù)據(jù)庫系統(tǒng)由于內(nèi)核的大量優(yōu)化,更適合于小數(shù)據(jù)的寫入。
本文討論了海量氣象數(shù)據(jù)實時解析系統(tǒng)以及基于Cassandra的分布式氣象數(shù)據(jù)存儲系統(tǒng)。這兩大系統(tǒng)保證了氣象數(shù)據(jù)實時可靠的寫入,滿足了國家級MICAPS4預(yù)報平臺用戶的高性能數(shù)據(jù)訪問需求。該系統(tǒng)目前7*24小時支撐著全國天氣預(yù)報業(yè)務(wù)的正常運行,具有很好的穩(wěn)定性和擴展性,在實踐中得到了充分驗證。
[1] Li Yue-an,Cao Li,Gao Song,et al.The current stage and development of MICAPS[J].Meteorological Monthly,2010,36(7):50-55.(in Chinese)
[2] Wang Jing-li,Tan Xiao-guang,Zhang De-zheng,et al.Design and application of data access structure of metropolis meteorological service information system[J].Meteorological Science and Technology,2004,31(6):409-412.(in Chinese)
[3] Qi Gui-bin,Zhou Er-bin,Ju Yang.Using samba service to realize information sharing[J].Heilongjiang Meteorology,2012,28(4):40-41.(in Chinese)
[4] Zhao Chun-yan,Sun Ying-rui,Dong Feng,et al.Application of high performance meteorological data storage cluster and online extension[J].Computing Technology and Automation,2013,32(3):117-121.(in Chinese)
[5] He Zhen-fang,Zhang Yao-nan,Zhao Guo-h(huán)ui.Storing massive spatio-temporal data using parallel NetCDF[J].E-Science Technology & Application,2012,32(1):54-61.(in Chinese)
[6] Huang Xiang-dong,Wang Jian-min,Ge Si-h(huán)an,et al.A storage model for large scale multi-dimension data files[C]∥Proc of NDBC,2014:1.(in Chinese)
[7] Sakr S,Liu A,Batista D M.A survey of large scale data management approaches in cloud environments[J].IEEE Communications Surveys Tutorials,2011,13(3):311-336.
[8] Lakshman A,Malik P.Cassandra—A decentralized structured storage system[J].Operating Systems Review,2010,44(2):35.
[9] Zhong Yu,Huang Xiang-dong,Liu Dan.NoSQL storage solution for massive equipment monitoring data management[J].Computer Integrated Manufacturing Systems,2013(12):3008-3016.(in Chinese)
[10] Zhu Y,Yu P S,Wang J.Recods:Replica consistency-ondemand store[C]∥Proc of 2013IEEE 29th International Conference on Data Engineering (ICDE),2013:1360-1363.
[11] Gorawski M,Gorawska A.Research on the stream ETL process[M]∥Beyond Databases,Architectures,and Structures,2014:61-71.
[12] Bansal S K.Towards a semantic extract-transform-load(ETL)framework for big data integration[C]∥Proc of 2014IEEE International Congress on Big Data (BigData Congress),2014:522-529.
[13] Zhu Y,Du N,Tian H,et al.laUD-MS:An extensible system for unstructured data management[C]∥Proc of the 12th International Asia-Pacific Web Conference(APWEB),2010:435-440.
[14] Um J H,Jeong C H,Choi S P,et al.Fast big textual data parsing in distributed and parallel computing environment[M]∥Mobile,Ubiquitous,and Intelligent Computing.2014:267-271.
[15] Manual on Codes-International Codes,Volume I.2:Part B and Part C.[EB/OL].[2015-05-11].http://library.wmo.int.
附中文參考文獻:
[1] 李月安,曹莉,高嵩,等.MICAPS預(yù)報業(yè)務(wù)平臺現(xiàn)狀與發(fā)展[J].氣象,2010,36(7):50-55.
[2] 王京麗,譚曉光,張德政,等.大城市氣象服務(wù)信息系統(tǒng)數(shù)據(jù)存儲體系框架設(shè)計與實現(xiàn)[J].氣象科技,2004,31(6):409-412.
[3] 齊貴濱,周爾濱,鞠洋.利用samba服務(wù)實現(xiàn)信息共享[J].黑龍江氣象,2012,28(4):40-41.
[4] 趙春燕,孫英銳,董峰,等.高性能氣象數(shù)據(jù)存儲集群及在線擴展技術(shù)應(yīng)用[J].計算技術(shù)與自動化,2013,32(3):117-121.
[5] 何振芳,張耀南,趙國輝.基于Parallel NetCDF的海量時空數(shù)據(jù)存儲研究[J].科研信息化技術(shù)與應(yīng)用,2012,32(1):54-61.
[6] 黃向東,王建民,葛斯函,等,一種海量多維文件集合的存儲模型[C]∥Proc of NDBC 2014,2014:1.
[9] 鐘雨,黃向東,劉丹,等.大規(guī)模裝備監(jiān)測數(shù)據(jù)的NoSQL存儲方案[J].計算機集成制造系統(tǒng),2013(12):3008-3016.