陳 晴 楊 明 肖 云 吳京生 滕 舟 魏 爽 胡永亮 龐 俊
1(浙江省氣象信息網(wǎng)絡(luò)中心 浙江 杭州 310017)2(武漢科技大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院 湖北 武漢 430065)
隨著氣象業(yè)務(wù)現(xiàn)代化建設(shè)的深入,氣象已進(jìn)入大數(shù)據(jù)時(shí)代,表現(xiàn)在以下幾方面:1) 數(shù)據(jù)體量巨大,數(shù)據(jù)量達(dá)到PB級,不斷增加的數(shù)據(jù)量需要存儲(chǔ)容量能動(dòng)態(tài)擴(kuò)展;2) 數(shù)據(jù)種類繁多,既有地面、高空、衛(wèi)星、雷達(dá)等監(jiān)測數(shù)據(jù),又有多種數(shù)值預(yù)報(bào)產(chǎn)品以及各種氣象服務(wù)產(chǎn)品[1];3) 數(shù)據(jù)響應(yīng)速度要求快,從大量的氣象數(shù)據(jù)中獲取有效的信息是氣象服務(wù)的迫切需求[2]。
云存儲(chǔ)技術(shù)通過集群應(yīng)用、網(wǎng)格技術(shù)和分布式文件系統(tǒng)等技術(shù)手段,讓網(wǎng)絡(luò)中大量各種不同類型的存儲(chǔ)設(shè)備在應(yīng)用軟件的管理下協(xié)同工作,共同對外提供數(shù)據(jù)存儲(chǔ)和業(yè)務(wù)訪問功能[3-4]。
根據(jù)氣象部門對氣象數(shù)據(jù)的要求,對云數(shù)據(jù)存儲(chǔ)方法進(jìn)行研究和探索,針對氣象數(shù)據(jù)的特點(diǎn)設(shè)計(jì)并實(shí)現(xiàn)了一套基于云分布式存儲(chǔ)技術(shù)的數(shù)據(jù)存儲(chǔ)方法,利用云計(jì)算的分布式存儲(chǔ)和并行化處理海量數(shù)據(jù),為氣象大數(shù)據(jù)的存儲(chǔ)和計(jì)算提供支撐。
基于云分布式存儲(chǔ)技術(shù)的數(shù)據(jù)存儲(chǔ)重點(diǎn)在于解決海量氣象數(shù)據(jù)的存儲(chǔ)和處理問題,提高用戶的訪問效率。云存儲(chǔ)平臺(tái)整體架構(gòu)劃分為4個(gè)層次,自底向上依次是:數(shù)據(jù)存儲(chǔ)層、存儲(chǔ)管理層、業(yè)務(wù)服務(wù)層與用戶訪問層[5],見圖1。
圖1 云存儲(chǔ)平臺(tái)整體架構(gòu)
數(shù)據(jù)存儲(chǔ)層主要包括服務(wù)器集群以及將集群連接起來的物理鏈路,實(shí)現(xiàn)數(shù)據(jù)的統(tǒng)一管理。考慮到設(shè)計(jì)的云存儲(chǔ)平臺(tái)需可擴(kuò)展性強(qiáng)、可靠性高、成本盡量低等特點(diǎn),同時(shí)存儲(chǔ)設(shè)備要便于集中管理[6-7],方案中統(tǒng)一選擇X86服務(wù)器構(gòu)建普通機(jī)器集群,操作系統(tǒng)選擇Linux操作系統(tǒng)。
存儲(chǔ)管理層主要包括大規(guī)模的分布式計(jì)算系統(tǒng),負(fù)責(zé)管理集群系統(tǒng)資源以及資源的虛擬化、控制分布式程序運(yùn)行、隱藏下層故障恢復(fù)、數(shù)據(jù)冗余、數(shù)據(jù)備份和數(shù)據(jù)容災(zāi)等細(xì)節(jié),有效地提供彈性計(jì)算和負(fù)載均衡的服務(wù)。
業(yè)務(wù)服務(wù)層采用云分布式服務(wù)技術(shù),將不同的數(shù)據(jù)存儲(chǔ)和計(jì)算功能分解成各種微服務(wù),實(shí)現(xiàn)大規(guī)模數(shù)據(jù)的存儲(chǔ)共享、查詢及處理服務(wù)。在此之上的云引擎為第三方云應(yīng)用提供了彈性、低成本的運(yùn)行環(huán)境,幫助簡化云應(yīng)用的構(gòu)建和部署。
用戶訪問層通過用戶授權(quán)、認(rèn)證機(jī)制,使用戶對數(shù)據(jù)進(jìn)行特定權(quán)限范圍的操作。這一層具體包括一些數(shù)據(jù)搜索服務(wù)、地圖服務(wù)以及第三方服務(wù)。
根據(jù)數(shù)據(jù)結(jié)構(gòu)的差異,氣象數(shù)據(jù)主要可分為離散型數(shù)據(jù)、網(wǎng)格數(shù)據(jù)、柵格數(shù)據(jù)。自動(dòng)氣象站各種氣象要素的實(shí)時(shí)和歷史數(shù)據(jù),水利、環(huán)保、海洋等外部門單位的站點(diǎn)數(shù)據(jù)以離散型數(shù)據(jù)形式存在;各種氣象要素的網(wǎng)格化產(chǎn)品,數(shù)據(jù)以網(wǎng)格數(shù)據(jù)形式存在;云圖、雷達(dá)以及模式預(yù)報(bào)的輸出產(chǎn)品,數(shù)據(jù)以柵格數(shù)據(jù)的形式存在。其中離散型數(shù)據(jù)屬于結(jié)構(gòu)化數(shù)據(jù),網(wǎng)格數(shù)據(jù)和柵格數(shù)據(jù)屬于半/非結(jié)構(gòu)化數(shù)據(jù)。
云數(shù)據(jù)庫是部署和虛擬化在云計(jì)算環(huán)境中的數(shù)據(jù)庫,在云數(shù)據(jù)庫應(yīng)用中,客戶端無需了解云數(shù)據(jù)庫底層細(xì)節(jié),底層硬件都已被虛擬化[8]。云數(shù)據(jù)庫對用戶而言就像運(yùn)行在普通服務(wù)器上的數(shù)據(jù)庫一樣,但數(shù)據(jù)的存儲(chǔ)、處理能力與傳統(tǒng)意義的數(shù)據(jù)庫相比有了質(zhì)的飛越[9-10]。
考慮到氣象數(shù)據(jù)自身的特點(diǎn)以及數(shù)據(jù)能夠被快速訪問的需求,同時(shí)氣象數(shù)據(jù)中的實(shí)時(shí)數(shù)據(jù)與歷史數(shù)據(jù)是一體化的,因此數(shù)據(jù)量極為龐大。傳統(tǒng)的關(guān)系型數(shù)據(jù)庫存儲(chǔ)管理系統(tǒng)可以滿足數(shù)據(jù)的一致性和可用性,在小規(guī)模數(shù)據(jù)量時(shí)可以達(dá)到很好的效應(yīng),隨著數(shù)據(jù)量與應(yīng)用范圍的增長導(dǎo)致節(jié)點(diǎn)增加,需要考慮數(shù)據(jù)同步和分區(qū)失敗等開銷,性能會(huì)快速下降,因此數(shù)據(jù)分布式存儲(chǔ)是必然選擇[1]。
數(shù)據(jù)分布式存儲(chǔ)較常見的有兩種形式:分布式關(guān)系型數(shù)據(jù)庫和非關(guān)系型數(shù)據(jù)庫(NoSQL)。結(jié)構(gòu)化數(shù)據(jù)采用分布式關(guān)系型數(shù)據(jù)庫存儲(chǔ),半/非結(jié)構(gòu)化數(shù)據(jù)采用NoSQL數(shù)據(jù)庫存儲(chǔ)。具體如表1所示。
表1 數(shù)據(jù)的存儲(chǔ)模型
結(jié)構(gòu)化數(shù)據(jù)采用分布式關(guān)系型數(shù)據(jù)庫存儲(chǔ),獲取低延遲與高并發(fā)吞吐能力。分布式關(guān)系型數(shù)據(jù)庫采用傳統(tǒng)的表-字段形式存儲(chǔ),將數(shù)據(jù)表水平拆分到后端的每個(gè)分?jǐn)?shù)據(jù)庫的分表中,分布式關(guān)系型數(shù)據(jù)庫中由每個(gè)分庫負(fù)責(zé)每一份數(shù)據(jù)的讀寫操作,從而有效地分散了整體的訪問壓力,提高了大型數(shù)據(jù)的訪問效率。
半結(jié)構(gòu)數(shù)據(jù)主要以網(wǎng)格化數(shù)據(jù)為主,非結(jié)構(gòu)數(shù)據(jù)以柵格數(shù)據(jù)為主,這兩種數(shù)據(jù)通常被當(dāng)作字符串或二進(jìn)制數(shù)據(jù),采用NoSQL數(shù)據(jù)庫存儲(chǔ)。NoSQL數(shù)據(jù)庫采用了鍵值(Key-Value)模型,模型中Key值指向Value的鍵值。該結(jié)構(gòu)主要分為主鍵、屬性和值三部分,基于值存儲(chǔ)的數(shù)據(jù)相對較大的特點(diǎn),對數(shù)據(jù)進(jìn)行切分與壓縮相結(jié)合的技術(shù)處理可以大幅提升數(shù)據(jù)傳輸能力。
2.2.1 主鍵表及屬性列表設(shè)計(jì)
(1) 網(wǎng)格數(shù)據(jù)的設(shè)計(jì) 氣象數(shù)據(jù)中的網(wǎng)格化數(shù)據(jù)通常Micaps4類格式數(shù)據(jù)文件的形式存在。Micaps4類格式數(shù)據(jù)文件包括3個(gè)維度的信息:時(shí)間、經(jīng)度和緯度。根據(jù)氣象要素和查詢的時(shí)刻能夠快速獲取到相應(yīng)的經(jīng)緯數(shù)據(jù)。表2為網(wǎng)格數(shù)據(jù)的主鍵設(shè)計(jì)表,表3為數(shù)據(jù)的屬性列設(shè)計(jì)表。
表2 網(wǎng)格數(shù)據(jù)主鍵設(shè)計(jì)表
表3 網(wǎng)格數(shù)據(jù)屬性列設(shè)計(jì)表
續(xù)表3
(2) 柵格數(shù)據(jù)的設(shè)計(jì) 氣象數(shù)據(jù)中的柵格數(shù)據(jù)通常以二進(jìn)制文件的形式存在,這類數(shù)據(jù)沒有對其中某一片段的單獨(dú)讀取需求,通常會(huì)讀取整個(gè)文件進(jìn)行解析。對于這類數(shù)據(jù),每一行只有一個(gè)屬性列用來存放壓縮后的二進(jìn)制文件數(shù)據(jù),整個(gè)文件具有較高的壓縮比。由于每天產(chǎn)生的文件較多,較為適合壓縮后存儲(chǔ)在表格存儲(chǔ)上。表4為網(wǎng)格化數(shù)據(jù)的主鍵設(shè)計(jì)表,表中主鍵二為兼容Micaps 4數(shù)據(jù)格式增加的一列主鍵,無實(shí)際意義,可以恒為0。表5為數(shù)據(jù)的屬性列設(shè)計(jì)表。
表4 柵格數(shù)據(jù)主鍵設(shè)計(jì)表
表5 柵格數(shù)據(jù)屬性列設(shè)計(jì)表
2.2.2 半/非結(jié)構(gòu)化數(shù)據(jù)的分塊與壓縮技術(shù)
半/非結(jié)構(gòu)化數(shù)據(jù)以網(wǎng)格數(shù)據(jù)或柵格數(shù)據(jù)為主,可對數(shù)據(jù)進(jìn)行分塊與壓縮進(jìn)行存儲(chǔ)。NoSQL對象存儲(chǔ)一般采用面向列的存儲(chǔ)方式,其存儲(chǔ)結(jié)構(gòu)保證了數(shù)據(jù)表列的擴(kuò)展性及I/O的高吞吐量,避免了表結(jié)構(gòu)改變帶來的維護(hù)壓力,有效提高了數(shù)據(jù)分析的吞吐性能。
基于半/非結(jié)構(gòu)化氣象數(shù)據(jù)的特點(diǎn),對屬性列的數(shù)據(jù)進(jìn)行一定比例的行列切分。切分規(guī)則如下:按照行切分成M份,按照列切分成N份,即將數(shù)據(jù)切分成M×N個(gè)方格。假設(shè)數(shù)據(jù)的latitude_point=X,longitude_point =Y,我們使切分后的方格rowsCount=X/M+1, colsCount=Y/N+1,切分后屬性列data擴(kuò)展為M×N個(gè)屬性列,如表6所示。
表6 屬性列數(shù)據(jù)的分塊
為了提高數(shù)據(jù)的存儲(chǔ)、傳輸和使用效率,降低數(shù)據(jù)維護(hù)的成本,特別是對數(shù)據(jù)量龐大、時(shí)間序列長的氣象數(shù)據(jù),根據(jù)氣象數(shù)據(jù)類型的不同選擇不同的存儲(chǔ)系統(tǒng)。將使用頻率較高,數(shù)據(jù)生成時(shí)間與當(dāng)前時(shí)次臨近的熱、溫?cái)?shù)據(jù)存放在在NoSQL對象存儲(chǔ)中,如實(shí)時(shí)的格點(diǎn)數(shù)據(jù)、柵格數(shù)據(jù)等;將使用頻率較低,數(shù)據(jù)生成時(shí)間與當(dāng)前時(shí)次間隔時(shí)間較長的冷數(shù)據(jù)存放在NoSQL文件存儲(chǔ)中,如歷史文件數(shù)據(jù)、長序列數(shù)據(jù)等;將關(guān)系型數(shù)據(jù)存放在關(guān)系結(jié)構(gòu)型存儲(chǔ)中,如存儲(chǔ)文件元數(shù)據(jù)信息和離散站點(diǎn)數(shù)據(jù)等。熱、溫、冷數(shù)據(jù)之間的轉(zhuǎn)換策略遵循時(shí)間度及數(shù)據(jù)使用度的原則。各存儲(chǔ)系統(tǒng)之間數(shù)據(jù)的轉(zhuǎn)換如圖2所示。
圖2 熱、溫、冷數(shù)據(jù)之間的轉(zhuǎn)換
對結(jié)構(gòu)化數(shù)據(jù)以及半/非結(jié)構(gòu)化數(shù)據(jù)在云存儲(chǔ)平臺(tái)上的讀取效率進(jìn)行測試。本文實(shí)驗(yàn)采用的數(shù)據(jù)為雷達(dá)降水產(chǎn)品、風(fēng)廓線雷達(dá)產(chǎn)品、循環(huán)同化10米風(fēng)、5分鐘最大風(fēng)場等半/非結(jié)構(gòu)化數(shù)據(jù),存儲(chǔ)類型選擇NoSQL數(shù)據(jù)庫;降水、溫度、風(fēng)、能見度等結(jié)構(gòu)化數(shù)據(jù),存儲(chǔ)類型選擇分布式關(guān)系型數(shù)據(jù)庫。
半/非結(jié)構(gòu)化數(shù)據(jù)測試,對網(wǎng)絡(luò)狀態(tài)相同情況下兩種數(shù)據(jù)環(huán)境中調(diào)用數(shù)據(jù)所耗的時(shí)間進(jìn)行測試對比。場景1:將數(shù)據(jù)存儲(chǔ)在開放結(jié)構(gòu)化數(shù)據(jù)服務(wù)(OTS)中,對數(shù)據(jù)進(jìn)行調(diào)用,獲取數(shù)據(jù)傳輸?shù)娇蛻舳说臅r(shí)間。場景2:常規(guī)數(shù)據(jù)服務(wù)中對數(shù)據(jù)進(jìn)行調(diào)用,獲取數(shù)據(jù)傳輸?shù)娇蛻舳说臅r(shí)間。測試結(jié)果如圖3所示。
圖3 常規(guī)數(shù)據(jù)服務(wù)與開放結(jié)構(gòu)化數(shù)據(jù)服務(wù)性能測試結(jié)果對比圖
結(jié)構(gòu)化數(shù)據(jù)測試,對網(wǎng)絡(luò)狀態(tài)相同情況下兩種數(shù)據(jù)環(huán)境中調(diào)用數(shù)據(jù)所耗的時(shí)間進(jìn)行測試對比。場景1:將數(shù)據(jù)存儲(chǔ)在分布式關(guān)系型數(shù)據(jù)庫(RDS)中,對數(shù)據(jù)進(jìn)行調(diào)用,獲取數(shù)據(jù)傳輸?shù)娇蛻舳说臅r(shí)間。場景2:利用SQL server對數(shù)據(jù)進(jìn)行調(diào)用,獲取數(shù)據(jù)傳輸?shù)娇蛻舳说臅r(shí)間。測試結(jié)果如圖4所示。
圖4 SQL server數(shù)據(jù)庫與分布式關(guān)系型數(shù)據(jù)庫性能測試結(jié)果對比圖
結(jié)果顯示,借助云存儲(chǔ)平臺(tái)氣象數(shù)據(jù)的讀取性能有了一定的提高。其中NoSQL數(shù)據(jù)庫中數(shù)據(jù)讀取性能與常規(guī)數(shù)據(jù)服務(wù)中數(shù)據(jù)讀取性能做比較,性能上有了很大提高。分布式關(guān)系型數(shù)據(jù)庫中數(shù)據(jù)讀取性能比SQL server數(shù)據(jù)庫中數(shù)據(jù)讀取性能做比較,性能上也有提高,但提高幅度沒有前者大。
本文針對氣象數(shù)據(jù)的特點(diǎn),對云數(shù)據(jù)存儲(chǔ)方法進(jìn)行探索和研究,基于云分布式存儲(chǔ)技術(shù)設(shè)計(jì)了一套數(shù)據(jù)存儲(chǔ)方法實(shí)現(xiàn)氣象大數(shù)據(jù)的存儲(chǔ)。
(1) 根據(jù)氣象數(shù)據(jù)結(jié)構(gòu)的不同分成結(jié)構(gòu)化數(shù)據(jù)與半/非結(jié)構(gòu)化數(shù)據(jù),針對不同結(jié)構(gòu)類型的數(shù)據(jù)選擇云存儲(chǔ)模型,結(jié)構(gòu)化數(shù)據(jù)采用分布式關(guān)系型數(shù)據(jù)庫存儲(chǔ),半/非結(jié)構(gòu)化數(shù)據(jù)采用NoSQL數(shù)據(jù)庫存儲(chǔ)。
(2) 在對半/非結(jié)構(gòu)化數(shù)據(jù)存儲(chǔ)設(shè)計(jì)中,對數(shù)據(jù)進(jìn)行主鍵表及屬性表設(shè)計(jì),并對屬性表中的數(shù)據(jù)進(jìn)行分塊壓縮,提高數(shù)據(jù)的存儲(chǔ)讀取性能。
(3) 根據(jù)氣象數(shù)據(jù)時(shí)間度及數(shù)據(jù)使用度的不同,將數(shù)據(jù)分成熱、溫、冷三種類型的數(shù)據(jù),并闡述了不同類型數(shù)據(jù)間的轉(zhuǎn)換規(guī)則。
實(shí)驗(yàn)證明借助云存儲(chǔ)平臺(tái),氣象數(shù)據(jù)的存儲(chǔ)讀取性能有了顯著的提高。本文對氣象數(shù)據(jù)的云存儲(chǔ)方法的設(shè)計(jì)思路是可行的, 為氣象數(shù)據(jù)的云化建設(shè)提供一定的借鑒和參考。