文獻標識碼: A
DOI:10.16157/j.issn.0258-7998.166788
中文引用格式: 焦冬冬,張晨,房志奇,等. 基于云技術的分布式實時數據庫系統的設計與實現[J].電子技術應用,2017,43(11):112-115,123.
英文引用格式: Jiao Dongdong,Zhang Chen,Fang Zhiqi,et al. Design and implementation of the distributed real-time database system based on the cloud technology[J].Application of Electronic Technique,2017,43(11):112-115,123.
0 引言
目前實時數據庫系統廣泛應用于軍事、電信、電力、航空、工業控制、證券交易、物聯網等領域,隨著企業信息化快速建設,工業實時數據增長速度遠遠超出企業的預期。以電力行業發電側為例,電力生產自動化控制程度的提高,對諸如壓力、流量和溫度等指標的監測精度、頻度和準確度更高,帶來數據量的激增。就用電側而言,一次采集頻度的提升就會帶來數據體量的“指數級”變化[1]。另外,基于工業大數據[2]分析有助于企業優化績效,明確趨勢和模式,支持實時決策。
分布式實時數據庫系統是分布式數據庫系統和實時數據庫系統相結合的產物,是事務和數據都可以具有定時特性或顯示定時限制的分布式數據庫系統。目前國內主要的分布式數據庫產品多采用多層的分布式技術,配置多套實時數據系統分別處理各自固定的采集器采集的數據,沒有實現數據存儲的透明性,不具備動態可擴展性。文獻[3]中提出了一種去中心化的分布式實時數據庫系統,使得系統具有更高的可用性,實現的是數據最終一致性,無法保證強一致性[4]。文獻[5]提出了一種基于通信平臺的分步式實時數據庫系統,系統具有較高的擴展性,但是通信平臺的負載較大,通信路徑較長。
為此本文提出了一種基于云技術[6-8]的分布式實時數據庫管理系統的設計方案,將云技術與實時數據庫技術相結合,從而滿足工業大數據的處理要求,可以應用于石化、電力、鋼鐵、物聯網、氣象預報、物流跟蹤、生態監測等專業應用領域。
1 分布式實時數據庫系統總體設計
基于云技術的分布式實時數據庫系統主要分為四大子系統:主節點(Masternode)、實時數據節點(RTDatanode)、客戶端和數據采集器。系統通過兼容HDFS[9]實現對工業非結構化數據的處理。系統的總體架構如圖1所示。
1.1 主節點Masternode
主節點是整個分布式實時數據庫系統的核心,主要用于維護整個系統的元數據信息,同時監管整個集群。主節點主要包括四個子系統:通信處理子系統、元數據鏡像和編輯日志管理子系統、數據節點管理子系統,以及元數據內存快照管理子系統,系統架構如圖2所示。
通信處理子系統主要有兩種實現方式:遠程過程調用接口和基于TCP或HTTP流式接口。主要用于客戶端和主節點、主節點和實時數據節點、主節點和備份主節點之間的通信。
元數據鏡像和編輯日志管理子系統主要有兩個模塊:其一是處理非結構化數據的元數據鏡像和編輯日志管理模塊,通過移植HDFS的相應模塊實現;其二是工業實時數據的元數據鏡像和內存數據節點元數據日志管理子系統,用于將接收到的實時數據從內存中同步持久化到本地磁盤,在集群啟動時將元數據等加載到元數據內存快照管理子系統。
數據節點管理子系統主要包括數據節點啟動模塊、心跳處理模塊、機架感知模塊、負載均衡模塊和非結構化數據的數據塊管理模塊。
(1)數據節點啟動模塊主要用于數據節點的握手、注冊,對于非結構化數據需要上報數據塊信息。
(2)心跳處理模塊主要用于心跳信息的處理和心跳檢查,心跳信息包括數據節點的身份信息、數據節點的負載信息,用于負載均衡模塊等;心跳檢查指的是根據設定的時間間隔檢查心跳信息,用于判斷數據節點的運行狀態。
(3)負載均衡模塊根據心跳處理模塊得到負載信息,為每個數據節點賦予優先級。
(4)機架感知模塊用于感知數據節點的機架信息。
(5)非結構化數據的數據塊管理模塊通過兼容HDFS的相應模塊實現。
元數據內存快照管理子系統主要用于在內存中維護主節點需要維護的元數據信息,實現實時數據的分布式存儲和檢索、用戶權限管理等。
1.2 實時數據節點RTDatanode
實時數據節點負責處理工業過程數據和系統的元數據信息。實時數據節點主要分為三個部分:內存數據節點子系統、實時數據節點子系統、非結構化數據節點子系統。其中非結構化數據節點子系統通過兼容HDFS的Datanode實現。實時數據節點總體架構如圖3所示。
內存數據節點子系統用于分擔主節點元數據信息處理負載,維護部分系統元數據。
實時數據節點子系統主要用于工業實時數據和歷史數據的處理,主要包括查詢子系統、內存快照子系統、日志子系統、歸檔子系統、通信子系統和實時文件系統rtfs[10]。
(1)查詢子系統主要包括實時數據的發布和歷史數據的查詢,采用線程池技術響應客戶端的請求。
(2)內存快照子系統采用鏈表來實現,過程數據緩存在內存的數據緩存鏈表中,數更新線程將新數據更新進該鏈表。內存快照子系統采用POT樹索引結構[11]來管理內存中的數據。
(3)日志子系統主要包括實時數據日志模塊和數據包日志模塊,數據包日志模塊用于防止數據包在發送隊列和接收隊列時系統故障引起的數據丟失。
(4)歸檔子系統主要由壓縮和打包歸檔兩部分組成。壓縮采用旋轉門壓縮算法,壓縮之后,將數據打包寫入實時文件系統,如果失敗將數據寫入日志。
(5)通信子系統主要有數據包發送緩沖模塊、元數據布隆過濾模塊、主節點通信模塊、實時數據節點通信模塊和客戶端通信模塊等。數據包發送緩沖模塊采用鏈表結構實現,支持并發讀寫,用于緩存備份數據包。元數據布隆過濾模塊用于獲取元數據信息。主節點通信模塊和實時數據節點通信模塊分別用于與主節點、實時數據節點通信。客戶端通信模塊用于響應客戶端的請求。
1.3 關鍵技術
(1)負載均衡技術
負載均衡技術是保證系統運行效率和可用性的關鍵技術。基本原理如下:
IF(心跳間隔到期)
THEN 獲取心跳信息中的CPU、內存、存儲、進程等信息更新到Node_Load列表;
根據Node_Load信息更新Node_PRI->pri(數據節點的優先級);
更新Node_PRI最大堆;
ENDIF
IF(接收到分配節點申請)
THEN從Node_PRI最大堆中獲取最高優先級節點返回;
更新Node_Load列表;
更新Node_PRI->pri;
更新Node_PRI最大堆;
ENDIF
(2)動態擴展技術
動態擴展技術是保證系統性能和連續性的關鍵技術,主要包括節點的動態添加和刪除。動態添加節點的基本原理如下:
數據節點執行添加指令;
遠程過程調用主節點NodeRegister(Node);
NodeRegister(Node)
IF(Node 在Node_List列表中)
THEN Node->alive=TRUE;
IF(Node 不在Node_Load列表中)
THEN 用Node初始化Node_Load并添加到列表中;
ENDIF
IF(Node 不在Heartbeat列表中)
THEN將Node添加到Heartbeat列表中;
ENDIF
ELSE Node->alieve=TRUE;
Node添加到Node_List中;
Node初始化Node_Load并添加到列表中;
Node添加到Heartbeat列表中;
ENDIF
動態刪除節點的基本原理如下:
數據節點執行添加指令或故障;
主節點執行:
IF(心跳間隔到期)
THEN獲取Node心跳信息,記錄獲取時間TIME;
IF(心跳信息含有關閉命令)
THEN 更新Node_List中Node->alive=FALSE;
更新其他所有包含Node結構,刪除Node;
Node添加到Dead_Node列表中;
ELSE IF(Node在Heartbeat列表中)
THEN更新Heartbeat列表中Node->time=TIME;
FOR node in Heartbeat:
DO IF(TIME-node->time >設置最長失連時間)
THEN 更新Node_List中Node->alive=FALSE;
更新其他所有包含Node的數據結構,刪除Node;
Node添加到Dead_Node列表中;
ENDIF
ELSE IF(Node不在Heartbeat列表中)
THEN NodeRegister(Node);
將Node從Dead_Node列表中刪除;
ENDIF
IF(時間間隔到期)
THEN FOR node in Dead_Node:
DO IF(TIME-node->deadTime>最長dead時間)
THEN將node歷史數據同步到其他節點;
ENDIF
ENDIF
ENDIF
1.4 客戶端和數據采集器
客戶端主要用于工業數據的查詢和實時數據的訂閱,客戶端通過與主節點通信獲得所需元數據信息,即數據塊索引和實時數據節點列表為元素的有序列表,對于實時數據只有一個元數據信息,客戶端依次與相應數據節點通信獲取數據,從而實現數據的透明訪問。
數據采集器主要用于采集工業現場的實時數據,加時間戳發送到實時數據節點。數據采集器會將數據發送到最短網絡路徑的實時數據節點(人工配置或主節點分配),當此實時數據節點故障時,數據采集器與主節點通信,申請一個有效的實時數據節點,然后將實時數據發送到此節點,從而保證了實時數據處理的高容錯性。
2 測試
為了測試系統的性能和擴展性以及負載均衡,采用的測試環境包括兩臺浪潮NP3060,配置為:Intel Xeon CPU E5606,24 GB內存,千兆網絡。兩臺機器安裝VMware ESXi5.5.0,在其上構建虛擬機,虛擬機配置為:1核處理器,4 GB內存,共享千兆網絡,操作系統為Ubuntu 11.10。
2.1 性能測試
使用一臺虛擬機作為主節點,4臺虛擬機為數據節點,4臺虛擬機為數據采集器。每個數據采集器模擬生成1 000點、5萬點的溫度實時數據,采集周期是1 s,數據副本數量設置為2,進行7×24小時測試。測試表明系統高可用,7×24小時無故障運行。測試結果如表1所示。
2.2 擴展性和負載均衡測試
使用一臺虛擬機作為主節點,3臺虛擬機為實時數據節點,編號為1、2、3。4臺虛擬機為數據采集器。每個數據采集器模擬生成1 000點的溫度實時數據,采集周期是1 s,測試時間為4萬秒。當測試進行到2個小時時,動態添加一個實時數據節點4到集群中。進行到5個小時,動態刪除數據節點3。測試結果如表2所示,表中每列是數據節點在查詢時刻所存儲數據包的數量。
測試結果表明,集群能夠實現動態添加和刪除實時數據節點,具有高擴展性。經過一段時間的運行后,數據存儲均衡,說明系統能夠實現負載均衡。
2.3 查詢測試
使用一臺虛擬機作為主節點,4臺虛擬機為實時數據節點,編號為1~4。4臺虛擬機為數據采集器,客戶端若干。每個數據采集器模擬生成1 000點溫度實時數據,采集周期是1 s,數據副本數量設置為3,24小時的歷史數據。客戶端分別在集群健康、斷開一、二臺實時數據節點(包括所有可能的組合)的情況下查詢歷史數據和訂閱實時數據。查詢歷史數據的測試結果如表3所示,由于設置副本數量為3,因此查詢時集群允許最大數據節點故障數量為2。
在集群健康時訂閱實時數據的測試結果如圖4所示。數據節點故障時訂閱實時數據的測試結果如圖5所示,在時刻T1,關閉實時數據節點2、3、4;在時刻T2,重新啟動實時數據節點2,關閉實時數據節點1;在T3時刻,重新啟動實時數據節點3,關閉實時數據節點2。對比圖4和圖5可以看出,在數據規模不大時,集群只有一臺實時數據節點存活,不會影響數據的存儲和訂閱。
測試結果表明,系統的歷史數據查詢和實時數據訂閱功能滿足設計要求。在歷史數據查詢時,系統允許的最大數據節點故障數量為數據點的副本數量減1,在實時數據存儲和訂閱時,只要系統存活的實時數據節點總的負載容量大于系統處理的數據規模,就能保證實時數據的處理。這說明系統具有很高的容錯性和可靠性。
2.4 集群數據同步通道性能測試
將發送數據節點定義為Client,將接收數據節點定義為Server,分別測試1~3個Client與1個Server連接情況下的通道性能。測試結果如表4所示。
實驗結果表明,在測試環境下,當數據副本設置為2時,集群的數據同步通道支持的最大單節點數據規模是285萬點(102個數據組成大小為1 216 B的數據包);當數據副本設置為3時,支持的最大單節點數據規模是180萬點。
3 結束語
本文通過分析工業大數據的特點,提出并實現了一種面向工業大數據同時兼容傳統的分布式實時數據庫系統功能的基于云技術的分布式實時數據庫系統。該系統通過將云技術與實時數據庫技術相結合,既滿足工控對于數據實時性的要求,又具有高擴展性、高容錯性、高可靠性,支持工業大數據的處理要求。分布式實時數據庫系統可用于電力、石化、物聯網等多種行業,具有廣闊的應用場景。
參考文獻
[1] 中國電機工程學會信息化專委會.北京中國電力大數據發展白皮書[M].北京:中國電力出版社,2013:9-12.
[2] 孫柏林.大數據技術及其在電力行業中的應用[J].電氣時代,2013(8):18-23.
[3] 錢益舟.基于云技術的分布式實時數據庫高性能數據存儲檢索機制的研究[D].杭州:浙江大學,2012.
[4] Werner Vogels.Eventually consistent[J].ACM Queue,2008,6(6):14-19.
[5] 黃震.工業分布式實時數據庫網絡通信平臺的研究與設計[D].杭州:浙江大學,2012.
[6] VAGUERO L M,RODERO-MWEINO L,CACERES J.A break in the clouds:Towards a cloud definition[J].SIGCOMM Comput.Commun.Rev.,2009,39(1):50-55.
[7] Hadoop[EB/OL].(2016-07-01)[2016-12-18].http://hadoop.apache.org/.
[8] GREENBERG A,HAMILTON J,MALTZD A.The cost of a cloud:research problems in data center networks[C].SIGCOMM Comput.Commun.Rev.,2008,39:68-73.
[9] HDFS architecture guide[EB/OL].(2013-02-13)[2016-12-18].http://hadoop.apache.org/docs/r1.0.4/-hdfs_design.html.
[10] 郭瑞.力數實時數據庫實時文件系統的研究[D].北京:華北計算機系統工程研究所,2013.
[11] 李亞鳳.若干實時數據庫過程數據處理關鍵技術的研究與實現[D].北京:華北計算機系統工程研究所,2013.
作者信息:
焦冬冬1,張 晨2,房志奇1,康 衛1
(1.華北計算機系統工程研究所,北京100083;2.北京科技大學,北京100083)