Cassandra 是 一 套 開 源 分 布 式 No -SQL 數據庫系統, 基於一致性哈希算法的 P2P 環形結構。 這種結構 各節點功能徹底相 同, 可靈活添加節點來完成系 統的擴充或刪除節點, 且無需大規模轉移數據, 同 時完全避免系 統因 單點故障算法
致使的不穩定性; 每一個節點經過 Gossip 機制進行消息同步; 每 個 數據 項 都 會 被 復 制 到 N 個節 點( N 是經過參數配置的副本因 子), 系 統利 用 數據數據庫
的複製機將存儲在各節點上的數據複製到其餘節點上, 實現了數據的高度可得到性與安全性。安全
Cassandra 使用 寬 列 存 儲 模 型, 每 行 數 據 記錄是以 Key - Value 形式進行存儲, 其中 Key爲 惟一標識。 每 個Key- Value 其 中 的 Value 也 稱 爲Column, 做 爲 一 個 三 元 組, 包 含 有服務器
Column Name 、 Column Value 與 timestamp ; 每 個 CF 由一個 Key及其對應的若干個 Column 標識組成。一個網絡
keyspace 包含若干 個 CF , 相似關係 型數據庫中一個架構
database 可有 多 個table 。併發
下 圖 爲 一 個Column 型數據模型。運維
NoSQL 典 型 遵 循 由 Eric Brewer 提 出 的CAP 理論 , 依據此理論, 在一個大規模的分佈式數據系統中, 有三個需求是彼此循環依賴的, 一致性( consistency ) 、 可 用 性 ( availability ) 、 分 區 耐受性( partition tolerance ) 。分佈式
一致性: 對全部數據庫客戶 端 使 用 同 樣 查 詢 都 可 得 到 相 同 的 數 據;性能
可用性: 所 有 數 據 庫 客 戶 端 都 可 讀 寫 數 據;
分區耐受性: 數 據 庫 分 散 到 多 個 服 務 器 上, 即便發生 網 絡 故 障, 仍 可 提 供 服 務。
CAP 理 論 可簡單描述 爲 :
一 個 分 布 式 系 統 不 能 同 時 滿 足 以上三個 特 性, 最 多 只 能 同 時 滿 足 兩 個。
Cassandra 主要支持 可 用 性 和 分 區 耐 受 性。
在 Cassandra 中 , 數據 具 備 最 終 一 致 性, 集 羣 整 體 的 完 全
可用 性。
Cassandra 依賴本地的文件系統經過內存與磁盤的雙重存儲機制來保證數 據的持久性 。
Cassandra 有三 個重 要 的 數 據 結 構, 記錄 於 內 存
的 Memtable , 保 存 在 磁 盤 中 的 Commit Log和
SSTable 。
Memtable 記 錄 最 近 的 修 改, 而SSTable 記錄着數據庫 所承載的 絕大部分數據。一般 情 況 下, 一 個 Cassandra 表 會 對 應 着 一 個
Memtable 和多 個SSTable 。
Cassandra 接收到 客戶端發送來的數據, 首先將寫操做記錄到 位於磁
盤的 CommitLog 中; 上述操做成功 後, 更新位於內存中 的 Memtable 數 據 結 構。 持 續 的 寫 入 數據, 使得 Memtable 逐漸增加, 當 其數據量到 達某個閾 值時, Cassandra 的數據遷移被觸發, 一 方面將
Memtable 刷 寫 到 本 地 磁 盤 上 成 爲 永 久 的SSTable , 另外一方面將 CommitLog 中 的 寫 入記錄移除。 對於讀操做, 客 戶 端 先 查 詢
Memtable 中的數據, 若沒法獲取所需信息, 則 檢索本地磁盤。
Cassandra 會按期執行壓緊compact 操做, 將同一條數據不一樣的版本進行合併, 過期數據也會在此過程當中被刪除; 分層數據壓縮, 有效減小數據體積
及磁盤 I / O 。
針對實時氣象數據存儲系統, 用戶對該系統讀取的性能需求遠遠高於寫入數據。 經過對副本數進行合理設置, 可分散讀取壓力 。 對於5 節點集羣, 將副本數設置爲 3 ;
Row 分區 模式:
採用自動分區方式, 使不一樣的 Row Key 均勻分佈在各節點上, 有利於數據讀取壓力的分散。
做爲典型的非結構化數據,氣象數據能夠由多維索引 來肯定一個惟一的數據。
業務用戶常見的操做包括「最新數據」「左右翻頁」「上下翻頁」等。
數據表
根據不一樣數據類型創建相應數據表, 用於存儲數據內容, 包括:
ECMWFHR(高分辨率數值預報產品 )、
SATELLITE ( 衛 星 資料)、
UPPERAIR (高空站點資料)、
SINGLERADAR (雷達資料) 等。
以「 T639 」爲 例 說明 數據表結構(表 1 )。
建表 語 句: CREATE TABLE "T639 "
( "dataPath " text , column1 text ,
value blob , PRIMARY KEY (" dataPath " ,
column1 ) ) ;
層次表
用於存儲全部模式或實況的層次信息, 表名爲level ; 用 戶 在 客戶 端進行上下翻頁操做, 從level 表中獲取當前層次的上一層或下一層信息; 利用層次表與數據表, 可檢索到不一樣層次的數據(表2 )。
建表語 句: CREATE TABLE level (
"dataPath " text , column1 int , value int , PRIMARY KEY (" dataPath " , column1 )) ;
最新時刻表
用於存儲各種數據的最新時刻信息, 表名 爲latestdatatime 。 利 用 最新時刻表, 用戶能經過客戶端快速查找到最新數據文件名。 用戶根據完整索引 (文件路徑與最新數據文件名), 例: T639 / WIND / 500 / 17030108. 000 , 便可在「數據表」中獲取到對應數據(表 3 )。
建表語句: CREATE TABLE latestdatatime
( " dataPath " text , column1 text , value text ,PRIMARY KEY (" dataPath " , column1 )) ;
存儲系統性能測試
測試環境
選用5臺相同配置的服務器用來搭建分佈式存儲系統。 服 務 器 操做 系 統 爲 Red Hat Enter -prise Linux Server release 7. 1 , 處理器參數爲Intel ( R ) Xeon ( R ) CPU E5 - 2620 v2 @ 2. 10GHz , 主頻爲2. 1 GHz ; 內 存大小爲 256 GB ;6 塊4TB SATA 硬盤; 服務器間經過萬兆光纖鏈接。Cassandra 數據庫版本爲2. 2. 5 。
高可用性測試
由 5 個節點所組成分佈式存儲系統, 其結構上具備以下特色。
( 1 )服務器雙網卡綁定, 即將兩個物理網卡虛擬成一個邏輯網卡; 提高服務器之間的傳輸帶寬,實現網卡冗餘。
( 2 )用於集羣內部數據交換的兩臺萬兆光纖交換機, 採起級聯方式, 可互爲備份。
( 3 ) 6 塊SATA 硬盤, 其中 2 塊作 RAID1, 安裝操做 系 統 及 軟 件; 另 外 4 塊 4TB 用 做 兩 個RAID0 , 用於存儲數據。
( 4 )服務器集羣爲環形結構, 沒有 master 節點, 各節點功能徹底同樣。
按照表4中內容, 對系統的基礎設施層(包括網絡設備、存儲設備等)、 軟件層(數據庫) 進行測試, 來驗證系統的高可用 性; 從表中結論可知, 系統中用於內部數據交換的光纖或網卡、交換機及任一 Cassandra 服務器故障, 均不影響 MICAPS4客戶端調取數據。
讀取性能測試
經過讀取數據的腳本文件(可獲取數據字節數信息, 表5中 ECMWF _ HR / TMP / 100 目 錄下數 據 字 節 數 爲 132642 字 節, SATELLITE /
FY2E / L1 / IR3 / EQUAL 下數據字節數爲554944字節,
T639 / WIND / 100 下數據字節數爲1449052字節), 模擬單用戶及50 用 戶 、 100 用 戶 客戶 端對同一類型數據進行讀取, 共分 3 組, 即對三種不一樣類型的數據進行測試, 測試性能見表5 , 注意測試結果包含網絡傳輸時間。
從數據讀取的測試結果能夠看出 :
( 1 )50 用戶併發和100 用 戶 併發 客戶 端 同 時 對 同 一 類 型數據進行 讀 取 的 時 間 與 單 用 戶 讀 取 時 間 相 當 。以 T639 / WIND/100 爲 例, 50 用 戶 並 發 和 100用 戶 併發與單用 戶 讀取相 關數據 所 花 費 的 平 均時間 均在20 ms 左右。
( 2 ) 在100 用 戶 併發狀況下, 從數據庫 中 調 取數據 所消 耗 的 時 間 均 以 ms量級爲 單 位 ( 包 含 網 絡 傳 輸 時 間 ) , 時 間 遠 遠 小於在samba 服 務 器 上 讀 取 數 據 的 時 間 。
( 3) 數據讀取時 間 和 單 個 數 據 的 字 節 數 近 似 成 正 比,即單個數 據 文 件 字 節 數 越 大, 讀 取 數 據 所 花 費的時間 則 越長。
結語
利用 Cassandra 分佈式數據庫搭建的存儲環境, 提升了實時氣象數據存儲效率與檢索速度, 經過統一的數據平臺, 實現了運維人員對該系統「零」維護。 經過在實際業務環境中進行測試, 驗證了該分佈式數據環境的高可用性; 以毫秒級爲單位的數據讀取時間, 能很好地知足業務對數據時效性的需求。