黃劉松 張 飛 宋 坤 周明琴
(1、馬鞍山師范高等??茖W(xué)校 軟件學(xué)院,安徽 馬鞍山243041 2、安徽工業(yè)大學(xué) 信息化處,安徽 馬鞍山243032 3、國(guó)電南京自動(dòng)化股份有限公司,江蘇 南京211100)
在傳統(tǒng)應(yīng)用領(lǐng)域,傳統(tǒng)數(shù)據(jù)庫(kù)以其嚴(yán)格的數(shù)學(xué)基礎(chǔ)、簡(jiǎn)單清晰的概念、易于操作的優(yōu)勢(shì)獲得了巨大的成功。但在電力、化工、能源等流程工業(yè)生產(chǎn)領(lǐng)域(最主要的特點(diǎn)是生產(chǎn)連續(xù)進(jìn)行、不發(fā)生中斷)會(huì)產(chǎn)生大量的時(shí)序數(shù)據(jù),隨著生產(chǎn)設(shè)備的數(shù)字化和智能化以及物聯(lián)網(wǎng)技術(shù)的發(fā)展,實(shí)際生產(chǎn)中采集的實(shí)時(shí)數(shù)據(jù)呈現(xiàn)出爆發(fā)式的增長(zhǎng)趨勢(shì)。傳統(tǒng)數(shù)據(jù)庫(kù)難以滿足數(shù)據(jù)的實(shí)時(shí)限制和高流量需求,存在的問(wèn)題主要表現(xiàn)為:傳統(tǒng)的數(shù)據(jù)庫(kù)系統(tǒng)旨在處理永久、穩(wěn)定的數(shù)據(jù),強(qiáng)調(diào)維護(hù)數(shù)據(jù)的完整性、一致性,其目標(biāo)是高系統(tǒng)吞吐量和付出低代價(jià),而不考慮數(shù)據(jù)及其處理的定時(shí)限制。與此相對(duì),時(shí)序數(shù)據(jù)管理系統(tǒng)針對(duì)的是結(jié)構(gòu)關(guān)系簡(jiǎn)單、變化幅度穩(wěn)定數(shù)據(jù),可以很好的應(yīng)對(duì)高實(shí)時(shí)性、大數(shù)據(jù)容最和訪問(wèn)量大的挑戰(zhàn)。時(shí)序數(shù)據(jù)庫(kù)的出現(xiàn),以其超大規(guī)模數(shù)據(jù)處理能力和高比例壓縮能力,實(shí)現(xiàn)海量數(shù)據(jù)的高效壓縮存儲(chǔ)、查詢檢索和統(tǒng)計(jì)分析,為應(yīng)用系統(tǒng)進(jìn)行數(shù)據(jù)挖掘、分析計(jì)算的提供數(shù)據(jù)基礎(chǔ),提升了企業(yè)在實(shí)時(shí)監(jiān)控、數(shù)據(jù)處理與存儲(chǔ)、生產(chǎn)信息的集成與共享等方面的信息化程度。
目前電力企業(yè)時(shí)序數(shù)據(jù)存儲(chǔ)主要是基于集中部署方式。一些市面上主流的實(shí)序數(shù)據(jù)庫(kù)存在使用和學(xué)習(xí)成本過(guò)高、維護(hù)困難、系統(tǒng)依賴控件過(guò)多、擴(kuò)展性不足、安裝部署卸載過(guò)程復(fù)雜等問(wèn)題。還有些時(shí)序數(shù)據(jù)庫(kù)的客戶端的并發(fā)數(shù)不足,支持的點(diǎn)位量有限,在數(shù)據(jù)容量變大時(shí),會(huì)出現(xiàn)讀、寫(xiě)性能的顯著下降。
本文基于Hbase 的實(shí)時(shí)數(shù)據(jù)庫(kù)設(shè)計(jì),數(shù)據(jù)庫(kù)并發(fā)訪問(wèn)量高、可擴(kuò)展性好、可靠性高、學(xué)習(xí)使用維護(hù)成本低、數(shù)據(jù)訪問(wèn)接口豐富靈活,支持幾乎所有語(yǔ)言訪問(wèn)數(shù)據(jù)庫(kù),支持和大數(shù)據(jù)生態(tài)圈對(duì)接,能有效應(yīng)對(duì)傳統(tǒng)實(shí)時(shí)庫(kù)在海量數(shù)據(jù)時(shí)讀寫(xiě)效率變慢的問(wèn)題。
利用大數(shù)據(jù)和云計(jì)算的分布式技術(shù),針對(duì)電力行業(yè)時(shí)序數(shù)據(jù)特性,設(shè)計(jì)并開(kāi)發(fā)出時(shí)序數(shù)據(jù)庫(kù)。該數(shù)據(jù)庫(kù)主要包括數(shù)據(jù)讀寫(xiě)服務(wù)、熱數(shù)據(jù)存儲(chǔ)、歷史數(shù)據(jù)存儲(chǔ)以及安全管理等幾大部分。主要用到了目前大數(shù)據(jù)領(lǐng)域主流的分布式技術(shù),系統(tǒng)的技術(shù)棧如圖1 所示。
其中,Kafka 屬于消息中間件的一種,主要用于消息緩存,應(yīng)對(duì)客戶端高速、大量的數(shù)據(jù)讀寫(xiě)請(qǐng)求。尤其在數(shù)據(jù)交互的尖峰時(shí)刻,Kafka 能有效的起到緩沖作用,防止消息的丟失,保證消息的完整性。在本系統(tǒng)中,kafka 緩沖的數(shù)據(jù)包含實(shí)時(shí)數(shù)據(jù),歷史數(shù)據(jù),緩存格式為Byte 字節(jié)數(shù)組。
圖1 基于分布式技術(shù)的實(shí)時(shí)數(shù)據(jù)存儲(chǔ)技術(shù)棧
計(jì)算服務(wù)模塊(對(duì)DataApi 的服務(wù)請(qǐng)求進(jìn)行實(shí)時(shí)響應(yīng),請(qǐng)求類型包含實(shí)時(shí)數(shù)據(jù)、歷史數(shù)據(jù)的讀寫(xiě))以Storm 為載體,利用Storm 高效的并行計(jì)算能力,能迅速的處理數(shù)據(jù)請(qǐng)求。本系統(tǒng)對(duì)實(shí)時(shí)數(shù)據(jù)的讀寫(xiě)速度要求非常高,Redis 是一個(gè)分布式內(nèi)存數(shù)據(jù)庫(kù),可以滿足實(shí)時(shí)數(shù)高速存取的要求。
Redis 作為本系統(tǒng)的實(shí)時(shí)數(shù)據(jù)存儲(chǔ)模塊,存儲(chǔ)的內(nèi)容包含DataApi 寫(xiě)入的實(shí)時(shí)值,暫時(shí)未被轉(zhuǎn)存到Hbase 的部分歷史值,和測(cè)點(diǎn)參數(shù)表的信息快照。Redis 是一個(gè)k-v 型內(nèi)存數(shù)據(jù)庫(kù)其中實(shí)時(shí)值、歷史值,存儲(chǔ)格式:key 為測(cè)點(diǎn)號(hào),value 為側(cè)點(diǎn)值,測(cè)點(diǎn)狀態(tài),時(shí)間戳組成的byte 數(shù)組;參數(shù)快照表存儲(chǔ)格式:key 為測(cè)點(diǎn)號(hào),value 為參數(shù)屬性包含(死區(qū),存庫(kù)間隔,測(cè)點(diǎn)描述等)組成的byte 數(shù)組。
分布式協(xié)調(diào)模塊主要作用于同步、配置維護(hù)及分組和命名,包括統(tǒng)一命名服務(wù)、統(tǒng)一配置管理、統(tǒng)一集群管理,通過(guò)zookeeper 實(shí)現(xiàn)。
安全管理模塊從主機(jī)層、組件層、網(wǎng)絡(luò)層(網(wǎng)關(guān))、接口API層進(jìn)行管理:
(1)主機(jī)層:主機(jī)層的安全認(rèn)證通過(guò)身份鑒別、訪問(wèn)控制、安全審計(jì)、入侵防范、惡意代碼防范、資源控制來(lái)實(shí)現(xiàn)。
(2)組件層:組件層的安全認(rèn)證通過(guò)Ranger 框架來(lái)實(shí)現(xiàn)。
(3)網(wǎng)絡(luò)層:網(wǎng)絡(luò)層的安全認(rèn)證通過(guò)Kerberos 協(xié)議來(lái)實(shí)現(xiàn)。
圖2 基于分布式實(shí)時(shí)數(shù)據(jù)存儲(chǔ)系統(tǒng)流程框圖
(4)接口API 層:接口API 層的安全認(rèn)證通過(guò)用戶登錄和JWT 認(rèn)證來(lái)實(shí)現(xiàn)。
HBase 數(shù)據(jù)庫(kù)中表結(jié)構(gòu)如表1。
表1 歷史存儲(chǔ)表結(jié)構(gòu)
其中rowkey 為行鍵具有唯一性標(biāo)識(shí)由測(cè)點(diǎn)號(hào)和當(dāng)前小時(shí)數(shù)(起始時(shí)間為2000/1/1 00:00:00)組成,Column Family 為列簇為分組標(biāo)識(shí)(可自定義)tagkey 為當(dāng)前毫秒數(shù)與當(dāng)前小時(shí)數(shù)的差值時(shí)間,tagvalue 為該時(shí)刻測(cè)點(diǎn)值和測(cè)點(diǎn)狀態(tài)的組合。
本系統(tǒng)的流程框架圖如圖2。
系統(tǒng)的整體流程為:
(1)DataApi 的客戶端發(fā)送數(shù)據(jù)讀寫(xiě)請(qǐng)求到kafka 的消息中間件, 讀寫(xiě)請(qǐng)求被分配到 kafka 的 SNAPSHOT_D,SNAPSHOT_U, HIST_D, HIST _U 等不同主題當(dāng)中,其中SNAPSHOT_D 表示寫(xiě)入實(shí)時(shí)測(cè)點(diǎn)值消息隊(duì)列,SNAPSHOT_U 表示讀取實(shí)時(shí)測(cè)點(diǎn)值消息隊(duì)列,HIST_D 表示寫(xiě)入歷史測(cè)點(diǎn)值消息隊(duì)列,HIST _U 表示讀取歷史測(cè)點(diǎn)值消息隊(duì)列。
(2)承載DataServ 的Storm 數(shù)據(jù)服務(wù)模塊,實(shí)時(shí)消費(fèi)kafka相應(yīng)隊(duì)列的消息根據(jù)請(qǐng)求內(nèi)容進(jìn)行相應(yīng)的Redis 或者Hbase 的讀寫(xiě)操作。其中Redis 存儲(chǔ)的內(nèi)容為測(cè)點(diǎn)實(shí)時(shí)值數(shù)據(jù)、近5 分鐘未被轉(zhuǎn)存的歷史數(shù)據(jù)。Hbase 種存儲(chǔ)內(nèi)容為測(cè)點(diǎn)歷史數(shù)據(jù)。
(3)DataServ 完成后將操作結(jié)果通過(guò)Kafka 反饋給客戶端DataApi。反饋通過(guò)唯一標(biāo)識(shí)碼UUID 標(biāo)識(shí)與之對(duì)應(yīng)的客戶端請(qǐng)求。
(4)數(shù)據(jù)轉(zhuǎn)存服務(wù)DataArch 可以定時(shí)每五分鐘從redis 的實(shí)時(shí)緩存表、歷史緩存表中轉(zhuǎn)存數(shù)據(jù)寫(xiě)入Hbase。
(5)數(shù)據(jù)同步服務(wù)DataSend 可以將數(shù)據(jù)從一區(qū)實(shí)時(shí)同步到三區(qū)。同步內(nèi)容包含:DataApi 寫(xiě)入的實(shí)時(shí)數(shù)據(jù)和歷史數(shù)據(jù)。
(6)配置服務(wù)DataCnfg 可以對(duì)存儲(chǔ)系統(tǒng)進(jìn)行管理。管理內(nèi)容包含:測(cè)點(diǎn)信息的增加、刪除、修改。RPC 服務(wù)對(duì)外提供修改配置的服務(wù)接口,當(dāng)接收到修改配置的服務(wù)請(qǐng)求時(shí),則更新redis 快照表和hbase 參數(shù)表。
(7)該時(shí)序數(shù)據(jù)庫(kù)通過(guò)對(duì)外提供接口的方式提供數(shù)據(jù)服務(wù),對(duì)外接口主要分為:實(shí)時(shí)數(shù)據(jù)讀操作、熱數(shù)據(jù)寫(xiě)操作、歷史數(shù)據(jù)讀操作、歷史數(shù)據(jù)寫(xiě)操作、其他邏輯檢索接口。
綜上所述,基于Hbase 的時(shí)序數(shù)據(jù)庫(kù)是基于開(kāi)源分布式組件,可以靈活添加計(jì)算節(jié)點(diǎn)。計(jì)算節(jié)點(diǎn)越多,帶來(lái)的并行計(jì)算能力就越強(qiáng)。這樣,相對(duì)傳統(tǒng)實(shí)時(shí)數(shù)據(jù)庫(kù)嚴(yán)格限制點(diǎn)位數(shù)量的情況,本系統(tǒng)可擴(kuò)展性強(qiáng),基于分布式部署方式,組件之間都是冗余部署,安全性相應(yīng)提高。依托安全管理組件,提高了其綜合安全性,同時(shí)具有支持多種操作系統(tǒng)(國(guó)產(chǎn)系統(tǒng))等優(yōu)點(diǎn)。