韓勇 余勇 張玉壘


摘 要:文中提出了基于分布式服務的組態圖形數據更新方案。數據監測服務監測到數據變化時,變化的數據更新到redis實時庫緩存,同時把變化的數據推送到Kafka總線,Kafka消費者監聽到消息后通過Websocket把變化的數據推送到前端頁面,前端頁面解析數據后展示,完成圖形數據的刷新。
關鍵詞:組態圖形;分布式;數據更新;實時推送
中圖分類號:TM734 文獻標識碼:A
1 主要技術簡介
1.1 Websocket技術
Websocket 是 HTML5 開始提供的一種在單個TCP連接上進行全雙工通訊的協議。在Websocket API 中,瀏覽器和服務器只需完成一次握手,兩者就直接可以創建持久性的連接,進行雙向數據傳輸。傳統技術下實現推送,所用的方案都是 Ajax 輪詢。這種傳統的模式瀏覽器需要不斷的向服務器發出請求,然而HTTP請求可能包含較長的頭部,其中真正有效的數據可能只是很小的一部分,顯然這樣會浪費很多的帶寬等資源。這種場景下,Websocket 協議,能更好的節省服務器資源和帶寬,并且能夠更實時地進行通訊。
1.2 Kafka技術
Kafka是一種高吞吐量的分布式發布訂閱消息系統和強大的分布式消息隊列,能夠將消息從一個端點傳遞到另一個端點,具有高性能、持久化、多副本備份、橫向擴展能力,可以處理大量的數據。Kafka消息保留在磁盤上,并在群集內復制以防止數據丟失。
1.3 redis技術
redis 是一個完全開源的、高性能的 key-value 內存型數據庫,可以用作數據庫、緩存和消息中間件。它支持多種類型的數據結構,如字符串,散列,列表,集合,有序集合等。 Redis 內置了復制,LUA腳本, LR驅動事件,事務和不同級別的磁盤持久化,并通過 Redis哨兵和自動分區提供高可用性。
2 系統設計與實現
2.1 系統架構
系統主要包含數據監測服務、Kafka總線服務、redis實時數據緩存服務、Websocket消息推送服務和文件服務等(如圖1)。
2.2 數據更新流程
(1)前端頁面請求組態文件。前端頁面初始化加載時,向文件服務發送帶有文件版本信息的請求,文件服務判斷文件版本信息后通知頁面是否需要下載組態文件,前端頁面接收到返回信息后下載相應的組態文件或讀取本地緩存的組態文件。
(2)前端頁面初始化。頁面加載完成DOM元素后,使用js解析組態文件,完成組態圖形繪制,并與Websocket服務器創建連接,等待數據推送。
(3)頁面數據初始化。頁面初始化完成后,首先讀取redis緩存中的最新數據,用于刷新組態畫面中各圖符的當前狀態。
(4)數據監測服務實時監測數據變化。在數據變化時將數據更新到redis實時庫中,并調用Kafka生產者的接口把變化的數據推送到Kafka總線上。
(5)Kafka消費者偵聽到總線數據后獲取數據。調用Websocket服務接口,把數據推送到前端頁面,通過前端js解析處理后展示,完成組態圖形數據刷新(如圖2)。
2.3 技術要點
(1)數據變化檢測機制。服務端只向前端頁面發送變化的數據,而不是發送所有數據,數據量更小,節省了帶寬,傳輸效率更高。為了保障實時性,數據檢測服務端通過對比站端設備上送的最新數據和redis實時庫中緩存數據值來判斷數據是否變化,如果數據有變化,則更新實時庫緩存,并立即發送變化的數據到Kafka總線,Kafka消費者監聽到消息后立即推送到頁面,數據即可刷新。
(2)頁面緩存機制。頁面初始化加載時,會讀取Cookie中的文件版本信息,然后向文件服務發送帶有版本信息的請求,格式如下:
{
"name":”s1.xml”,
"version":”1.0”, //版本信息
"time":1566530919566, //時間戳,記錄了最后一次修改時間
}
如果未讀取到Cookie中版本信息,或者當前緩存文件版本與文件服務器中文件版本不一致,則重新下載相關文件并緩存到本地,同時更新文件版本信息到Cookie中。頁面緩存機制避免了重復大量的文件傳輸過程,節省了帶寬。
3 結束語
本文提出了一種基于分布式服務的組態圖形數據更新方案,采用了主流的redis、Kafka、Websocket等中間件來作為技術支撐,通過數據變化更新機制和頁面緩存機制來優化數據傳輸,保證了數據的實時性、高效性、穩定性。由于研究工作的局限性,目前尚未具體評估高并發情景下的性能瓶頸,但經實際驗證能夠滿足電力系統日常運行需求。
參考文獻:
[1]汪映輝,吾喻明.基于SVG的電力調度自動化系統實時畫面的WEB發布[J].應用科技,2008,21(14):5-76.
[2]吳志芳,陳傳波,劉昕.電力生產實時畫面的WEB發布[J].實踐經驗,2000,19(10):54-56.
[3]陳傳波,王菁,鄧凱.基于SVG的實時數據動態發布技術的研究[J].小型微型計算機系統,2008,29(05):609-612.
[4]張榮,郭立君,劉箴.基于SVG的實時監控系統設計與實現[J].微電子學與計算機,2006,35(06):223-226.