黃劉松 張 飛 宋 坤 周明琴
(1、馬鞍山師范高等專科學校 軟件學院,安徽 馬鞍山243041 2、安徽工業大學 信息化處,安徽 馬鞍山243032 3、國電南京自動化股份有限公司,江蘇 南京211100)
在傳統應用領域,傳統數據庫以其嚴格的數學基礎、簡單清晰的概念、易于操作的優勢獲得了巨大的成功。但在電力、化工、能源等流程工業生產領域(最主要的特點是生產連續進行、不發生中斷)會產生大量的時序數據,隨著生產設備的數字化和智能化以及物聯網技術的發展,實際生產中采集的實時數據呈現出爆發式的增長趨勢。傳統數據庫難以滿足數據的實時限制和高流量需求,存在的問題主要表現為:傳統的數據庫系統旨在處理永久、穩定的數據,強調維護數據的完整性、一致性,其目標是高系統吞吐量和付出低代價,而不考慮數據及其處理的定時限制。與此相對,時序數據管理系統針對的是結構關系簡單、變化幅度穩定數據,可以很好的應對高實時性、大數據容最和訪問量大的挑戰。時序數據庫的出現,以其超大規模數據處理能力和高比例壓縮能力,實現海量數據的高效壓縮存儲、查詢檢索和統計分析,為應用系統進行數據挖掘、分析計算的提供數據基礎,提升了企業在實時監控、數據處理與存儲、生產信息的集成與共享等方面的信息化程度。
目前電力企業時序數據存儲主要是基于集中部署方式。一些市面上主流的實序數據庫存在使用和學習成本過高、維護困難、系統依賴控件過多、擴展性不足、安裝部署卸載過程復雜等問題。還有些時序數據庫的客戶端的并發數不足,支持的點位量有限,在數據容量變大時,會出現讀、寫性能的顯著下降。
本文基于Hbase 的實時數據庫設計,數據庫并發訪問量高、可擴展性好、可靠性高、學習使用維護成本低、數據訪問接口豐富靈活,支持幾乎所有語言訪問數據庫,支持和大數據生態圈對接,能有效應對傳統實時庫在海量數據時讀寫效率變慢的問題。
利用大數據和云計算的分布式技術,針對電力行業時序數據特性,設計并開發出時序數據庫。該數據庫主要包括數據讀寫服務、熱數據存儲、歷史數據存儲以及安全管理等幾大部分。主要用到了目前大數據領域主流的分布式技術,系統的技術棧如圖1 所示。
其中,Kafka 屬于消息中間件的一種,主要用于消息緩存,應對客戶端高速、大量的數據讀寫請求。尤其在數據交互的尖峰時刻,Kafka 能有效的起到緩沖作用,防止消息的丟失,保證消息的完整性。在本系統中,kafka 緩沖的數據包含實時數據,歷史數據,緩存格式為Byte 字節數組。

圖1 基于分布式技術的實時數據存儲技術棧
計算服務模塊(對DataApi 的服務請求進行實時響應,請求類型包含實時數據、歷史數據的讀寫)以Storm 為載體,利用Storm 高效的并行計算能力,能迅速的處理數據請求。本系統對實時數據的讀寫速度要求非常高,Redis 是一個分布式內存數據庫,可以滿足實時數高速存取的要求。
Redis 作為本系統的實時數據存儲模塊,存儲的內容包含DataApi 寫入的實時值,暫時未被轉存到Hbase 的部分歷史值,和測點參數表的信息快照。Redis 是一個k-v 型內存數據庫其中實時值、歷史值,存儲格式:key 為測點號,value 為側點值,測點狀態,時間戳組成的byte 數組;參數快照表存儲格式:key 為測點號,value 為參數屬性包含(死區,存庫間隔,測點描述等)組成的byte 數組。
分布式協調模塊主要作用于同步、配置維護及分組和命名,包括統一命名服務、統一配置管理、統一集群管理,通過zookeeper 實現。
安全管理模塊從主機層、組件層、網絡層(網關)、接口API層進行管理:
(1)主機層:主機層的安全認證通過身份鑒別、訪問控制、安全審計、入侵防范、惡意代碼防范、資源控制來實現。
(2)組件層:組件層的安全認證通過Ranger 框架來實現。
(3)網絡層:網絡層的安全認證通過Kerberos 協議來實現。

圖2 基于分布式實時數據存儲系統流程框圖
(4)接口API 層:接口API 層的安全認證通過用戶登錄和JWT 認證來實現。
HBase 數據庫中表結構如表1。

表1 歷史存儲表結構
其中rowkey 為行鍵具有唯一性標識由測點號和當前小時數(起始時間為2000/1/1 00:00:00)組成,Column Family 為列簇為分組標識(可自定義)tagkey 為當前毫秒數與當前小時數的差值時間,tagvalue 為該時刻測點值和測點狀態的組合。
本系統的流程框架圖如圖2。
系統的整體流程為:
(1)DataApi 的客戶端發送數據讀寫請求到kafka 的消息中間件, 讀寫請求被分配到 kafka 的 SNAPSHOT_D,SNAPSHOT_U, HIST_D, HIST _U 等不同主題當中,其中SNAPSHOT_D 表示寫入實時測點值消息隊列,SNAPSHOT_U 表示讀取實時測點值消息隊列,HIST_D 表示寫入歷史測點值消息隊列,HIST _U 表示讀取歷史測點值消息隊列。
(2)承載DataServ 的Storm 數據服務模塊,實時消費kafka相應隊列的消息根據請求內容進行相應的Redis 或者Hbase 的讀寫操作。其中Redis 存儲的內容為測點實時值數據、近5 分鐘未被轉存的歷史數據。Hbase 種存儲內容為測點歷史數據。
(3)DataServ 完成后將操作結果通過Kafka 反饋給客戶端DataApi。反饋通過唯一標識碼UUID 標識與之對應的客戶端請求。
(4)數據轉存服務DataArch 可以定時每五分鐘從redis 的實時緩存表、歷史緩存表中轉存數據寫入Hbase。
(5)數據同步服務DataSend 可以將數據從一區實時同步到三區。同步內容包含:DataApi 寫入的實時數據和歷史數據。
(6)配置服務DataCnfg 可以對存儲系統進行管理。管理內容包含:測點信息的增加、刪除、修改。RPC 服務對外提供修改配置的服務接口,當接收到修改配置的服務請求時,則更新redis 快照表和hbase 參數表。
(7)該時序數據庫通過對外提供接口的方式提供數據服務,對外接口主要分為:實時數據讀操作、熱數據寫操作、歷史數據讀操作、歷史數據寫操作、其他邏輯檢索接口。
綜上所述,基于Hbase 的時序數據庫是基于開源分布式組件,可以靈活添加計算節點。計算節點越多,帶來的并行計算能力就越強。這樣,相對傳統實時數據庫嚴格限制點位數量的情況,本系統可擴展性強,基于分布式部署方式,組件之間都是冗余部署,安全性相應提高。依托安全管理組件,提高了其綜合安全性,同時具有支持多種操作系統(國產系統)等優點。