楊 芳,金 琪,邢麗平,楊代才
(湖北省氣象信息與技術保障中心,武漢 430074)
基于Cassandra的實時氣象數據分布式存儲系統
楊 芳,金 琪,邢麗平,楊代才
(湖北省氣象信息與技術保障中心,武漢 430074)
介紹了Cassandra關鍵技術、實時氣象數據存儲模型。湖北省運行MICAPS4采用基于Cassandra的分布式數據存儲環境。對分布式存儲系統高可用性、讀取性能的測試結果表明,系統提高了MICAPS客戶端對實時氣象數據的檢索效率,并極大減輕了各級臺站的維護壓力。
MICAPS4;氣象數據;分布式;存儲;Cassandra
隨著氣象觀測資料種類的增加、觀測頻次的增多,在氣象數據存儲技術領域,基于目錄樹結構的文件系統難以承受文件數量的急劇增長,在管理大量的結構化與非結構化數據方面,也不能較好地滿足業務人員對數據進行按序訪問的需求。中國氣象局推出的MICAPS(meteorological information comprehensive analysis processing system)4.0版本, 充分發揮了觀測資料的作用, 滿足了不斷發展的預報業務和氣象服務需求。湖北作為全國氣象部門首家省級試點單位,2016年將MICAPS4.0投入測試運行。其后臺數據環境引入非結構數據庫Cassandra;采用多維索引數據模型的實時氣象數據存儲系統,在保證MICAPS客戶端快速調用(毫秒級別)實時氣象數據的同時,可為全省各級氣象部門預報業務系統提供基于氣象衛星、天氣雷達和數值預報、站點實況等數據支撐,實現數據在省級單點更新,極大減輕臺站的維護壓力;可靈活地添加節點來實現存儲系統擴充,而不給系統帶來較大的性能抖動;與Spark結合,利用Spark來實現復雜數據分析與處理功能,如處理集合預報資料等。
1.1 系統架構
ApacheCassandra是一套開源分布式NoSQL數據庫系統,基于一致性哈希算法的P2P環形結構。這種結構各節點功能完全相同,可靈活添加節點來完成系統的擴充或刪除節點,且無需大規模轉移數據,同時徹底避免系統因單點故障導致的不穩定性;每個節點通過Gossip機制進行消息同步;每個數據項都會被復制到N個節點(N是通過參數配置的副本因子),系統利用數據的復制機將存儲在各節點上的數據復制到其他節點上,實現了數據的高度可獲得性與安全性[1]。
1.2 數據模型
Cassandra使用寬列存儲模型,每行數據記錄是以Key-Value形式進行存儲,其中Key為唯一標識。每個Key-Value其中的Value也稱為Column[2-3],作為一個三元組,包含有Column Name、Column Value與timestamp;每個CF由一個Key 及其對應的若干個Column標識組成。一個keyspace包含若干個CF,類似關系型數據庫中一個database可有多個table。圖1為一個Column型數據模型。
1.3 CAP理論
NoSQL典型遵循由Eric Brewer 提出的CAP理論[4-5],依據此理論,在一個大規模的分布式數據系統中,有三個需求是彼此循環依賴的,一致性(consistency)、可用性(availability)、分區耐受性(partition tolerance)。一致性為對所有數據庫客戶端使用同樣查詢都可得到相同的數據;可用性即所有數據庫客戶端都可讀寫數據;分區耐受性是指數據庫分散到多個服務器上,即使發生網絡故障,仍可提供服務。CAP理論可簡單描述為,一個分布式系統不能同時滿足以上三個特性,最多只能同時滿足兩個。Cassandra主要支持可用性和分區耐受性。在Cassandra中,數據具備最終一致性,集群整體的完全可用性。

圖1 基于Key-Value的數據模型
1.4 存儲機制
Cassandra依賴本地的文件系統通過內存與磁盤的雙重存儲機制來保證數據的持久性[5-6]。Cassandra有三個重要的數據結構,記錄于內存的Memtable,保存在磁盤中的Commit Log和SSTable。Memtable記錄最近的修改,而SSTable記錄著數據庫所承載的絕大部分數據。通常情況下,一個Cassandra表會對應著一個Memtable和多個SSTable。Cassandra接收到客戶端發送來的數據,首先將寫操作記錄到位于磁盤的CommitLog中;上述操作成功后,更新位于內存中的Memtable數據結構。持續的寫入數據,使得Memtable逐漸增長,當其數據量到達某個閾值時,Cassandra的數據遷移被觸發,一方面將Memtable刷寫到本地磁盤上成為永久的SSTable,另一方面將CommitLog中的寫入記錄移除。對于讀操作,客戶端先查詢Memtable中的數據,若無法獲取所需信息,則檢索本地磁盤。Cassandra會定期執行壓緊compact操作,將同一條數據不同的版本進行合并,過時數據也會在此過程中被刪除;分層數據壓縮,有效減少數據體積及磁盤I/O。
預報員在分析天氣形勢時,需通過MICAPS4客戶端獲取實時地面、高空觀探測數據以及氣象衛星、天氣雷達、模式數據等;以這些數據為主所構成的“氣象大數據”,都可歸屬于非結構化數據,具有多維、維度有序或無序等特點。基于Key-Value分布式數據庫Cassandra在存儲海量小文件、多維數據索引等方面有明顯的優勢[7-8];故采用Cassandra作為存儲實時氣象數據的解決方案。
2.1 系統設置
針對實時氣象數據存儲系統,用戶對該系統讀取的性能需求遠遠高于寫入數據。通過對副本數進行合理設置,可分散讀取壓力。對于5節點集群,將副本數設置為3;Row分區模式:采用自動分區方式,使不同的Row Key均勻分布在各節點上,有利于數據讀取壓力的分散。
2.2 Cassandra表設計
作為典型的非結構化數據,氣象數據可以由多維索引來確定一個唯一的數據。業務用戶常見的操作包括“最新數據”“左右翻頁”“上下翻頁”等。
2.2.1 數據表 根據不同數據類型建立相應數據表,用于存儲數據內容,包括:ECMWF_HR(高分辨率數值預報產品)、SATELLITE(衛星資料)、UPPER_AIR(高空站點資料)、SINGLERADAR(雷達資料)等。以“T639”為例說明數據表結構(表1)。
建表語句:CREATE TABLE "T639" ( "dataPath" text, column1 text, value blob, PRIMARY KEY ("dataPath", column1) ) ;
2.2.2 層次表 用于存儲所有模式或實況的層次信息,表名為level;用戶在客戶端進行上下翻頁操作,從level表中獲取當前層次的上一層或下一層信息;利用層次表與數據表,可檢索到不同層次的數據(表2)。
建表語句:CREATE TABLE level ("dataPath" text,column1 int,value int,PRIMARY KEY ("dataPath", column1)) ;
2.2.3 最新時刻表 用于存儲各類數據的最新時刻信息,表名為latestdatatime。利用最新時刻表,用戶能通過客戶端快速查找到最新數據文件名。用戶根據完整索引(文件路徑與最新數據文件名),例:T639/WIND/500/17030108.000,即可在“數據表”中獲取到對應數據(表3)。
建表語句:CREATE TABLE latestdatatime ( "dataPath" text,column1 text, value text,PRIMARY KEY ("dataPath", column1)) ;

表1 Cassandra數據表結構

表2 Cassandra層次表結構

表3 Cassandra最新時刻表結構
3.1 測試環境
選用5臺相同配置的服務器用來搭建分布式存儲系統。服務器操作系統為Red Hat Enterprise Linux Server release 7.1,處理器參數為Intel(R) Xeon(R) CPU E5-2620 v2 @ 2.10 GHz,主頻為2.1 GHz;內存大小為256 GB;6塊4 TB SATA硬盤;服務器間通過萬兆光纖連接。Cassandra數據庫版本為2.2.5。
3.2 高可用性測試
由5個節點所組成分布式存儲系統,其結構上具有如下特點。
(1)服務器雙網卡綁定,即將兩個物理網卡虛擬成一個邏輯網卡;提升服務器之間的傳輸帶寬,實現網卡冗余。
(2)用于集群內部數據交換的兩臺萬兆光纖交換機,采取級聯方式,可互為備份。
(3)6塊SATA硬盤,其中2塊做RAID1,安裝操作系統及軟件;另外4塊4 TB用作兩個RAID0,用于存儲數據。
(4)服務器集群為環形結構,沒有master節點,各節點功能完全一樣。
按照表4中內容,對系統的基礎設施層(包括網絡設備、存儲設備等)、軟件層(數據庫)進行測試,來驗證系統的高可用性;從表中結論可知,系統中用于內部數據交換的光纖或網卡、交換機及任一Cassandra服務器故障,均不影響MICAPS4客戶端調取數據。

表4 Cassandra集群系統高可用性測試
3.3 讀取性能測試
通過讀取數據的腳本文件(可獲取數據字節數信息,表5中ECMWF_HR/TMP/100目錄下數據字節數為132 642字節,SATELLITE/FY2E/L1/IR3/EQUAL下數據字節數為554 944字節,T639/WIND/100下數據字節數為1 449 052字節),模擬單用戶及50用戶、100用戶客戶端對同一類型數據進行讀取,共分3組,即對三種不同類型的數據進行測試,測試性能見表5,注意測試結果包含網絡傳輸時間。

表5 三種不同類型的數據在不同壓力下傳輸時間測試 ms
從數據讀取的測試結果可以看出:(1)50用戶并發和100用戶并發客戶端同時對同一類型數據進行讀取的時間與單用戶讀取時間相當。以T639/WIND/100為例,50用戶并發和100用戶并發與單用戶讀取相關數據所花費的平均時間均在20 ms左右。(2)在100用戶并發情況下,從數據庫中調取數據所消耗的時間均以ms量級為單位(包含網絡傳輸時間),時間遠遠小于在samba服務器上讀取數據的時間。(3)數據讀取時間和單個數據的字節數近似成正比,即單個數據文件字節數越大,讀取數據所花費的時間則越長。
利用Cassandra分布式數據庫搭建的存儲環境,提高了實時氣象數據存儲效率與檢索速度,通過統一的數據平臺,實現了市縣兩級運維人員對該系統“零”維護。通過在實際業務環境中進行測試,驗證了該分布式數據環境的高可用性;以毫秒級為單位的數據讀取時間,能很好地滿足業務對數據時效性的需求。
[1] 王意潔,孫偉東,周松,等.云計算環境下的分布存儲關鍵技術[J].軟件學報,2012,23(4):971-975.
[2] 申德榮,于戈,王習特,等.支持大數據管理的NoSQL系統研究綜述[J].軟件學報,2013,24(8):1789-1792.
[3] 秦苻珂.Cassandra應用研究[J].電腦知識與技術,2016,12(9):14-16.
[4] 孟小峰,慈祥.大數據管理:概念、技術與挑戰[J].計算機研究與發展,2013,50(1):154-157.
[5] Eben Hewitt.Cassandra:The Definitive Guide[M].北京:人民郵電出版社,2011.
[6] 覃雄派,王會舉,李芙蓉,等.數據管理技術的新格局[J].軟件學報,2013,24(2):179-185.
[7] 王若曈,黃向東,張博等.海量氣象數據實時解析與存儲系統的設計與實現[J].計算機工程與科學,2015,37(11):2045-2054.
[8] 鐘雨,黃向東,劉丹,等.大規模裝備檢測數據的NoSQL存儲方案[J].計算機集成制造系統,2013(12):3008-3016.
1006-4354(2017)04-0026-05
2016-11-29
楊芳(1982—),女,湖北洪湖人,學士,高工,從事氣象信息通信研究。
湖北省氣象局科技發展基金重點項目(2015Z02)
P409
B
楊芳,金琪,邢麗平,等.基于Cassandra的實時氣象數據分布式存儲系統[J].陜西氣象,2017(4):26-30.