孫 超,常夏勤,王永貴,胡劍鋒
(南京南瑞繼保電氣有限公司,江蘇 南京 211102)
隨著智能電網的蓬勃發展,新技術在電力系統中的應用越來越廣泛,從發電側的光伏、風電等新能源廠站,到輸配電環節的特高壓交直流電網、柔性直流配電網,再到電動汽車為代表的各種智能用電設備,電力系統中涉及的設備越來越復雜,產生的數據呈爆炸式增長,對電網的安全運行風險的管控難度與日俱增,這些變化促使了近年來對電力大數據分析方面的研究不斷深入。然而,電力大數據在多源數據接入方面仍存在以下問題:(1)現有電力系統的信息化和自動化系統建設周期跨度大,采用的技術復雜。同時,涉及通訊、自動化、調度、營銷、氣象等多個專業,缺乏統一的數據采集監視方法;(2)電力系統產生的數據中存在海量毫秒和秒級實時數據,可靠性要求高,缺乏有效的監視手段;(3)現有大數據平臺的監視側重于平臺內部的資源調度、數據存儲、計算分析等方面,對外部數據接入方面的監視功能較弱,無法滿足運維需求。
如何結合電力大數據的特點解決數據采集中的監視運維問題,成為關系到電力大數據能否實用化的重要制約因素。
電力系統涉及的專業方向較多,比如設備運維、通訊、IT、計量、安監、市場交易等[1];每個專業都有多種數據源,且交互方式繁雜,比如WebService、電力專用規約、特殊文件格式等;數據種類繁多[2],比如實時數據、歷史數據、文本數據、多媒體數據、時間序列數據等各類結構化、半結構化數據以及非結構化數據[3]。電力數據產生的速率跨度大[4],比如毫秒級廣域向量測量實時數據,秒級的穩態監視數據,分鐘級的微氣象數據[5],小時級的操作票流轉數據和更長時間周期的設備實驗數據等[6]。因此,開展電力大數據分析的前提是多源異構數據混合采集。當前電力大數據混合采集多采用針對已有系統接口開發代理采集程序[7],每個采集程序都會產生大量的日志和狀態信息記錄工作狀態和數據接入的情況,需要有效的監視手段[8]。
電力系統的數據源多分布于不同的物理位置,從電能產生到消費中間會經過發電廠、輸電網、配電網和用戶多個環節,每個環節都會產生需要采集的數據;電網公司是分級管理的集團,分為網、省、地、縣四級電網調度管理機構,每一層級都會產生大量的電網運行監控類的數據,因此采集程序為分布式部署方式,對應的采集監視模塊也要適應分布式和遠距離通訊的要求。
電力系統屬于關系到國家安全的重要基礎設施,其網絡安全防護要求非常高[9],各類應用按照安全區隔離部署的方式運行[10],在不同安全區之間有物理隔離網閘實現數據通訊的單向傳輸[11],同時,由于業務數據的傳輸占用了大量帶寬,采集監視系統在盡量節省帶寬不影響業務數據傳輸的前提下實現跨物理隔離網閘的可靠傳輸[12]。
綜合以上電力大數據采集的特點,數據采集監視需要滿足以下的要求:
(1)采用分布式架構,能夠根據業務需求橫向擴展。
由于采集的數據源眾多且分布廣,因此采集監視系統需采用分布式架構,貼近采集程序或裝置側部署,前端就地處理數據將結果傳輸回后端,減少網絡占用,提高整體性能。同時,能夠適應接入量的不斷增加,支持前端數據收集、數據傳輸匯集、后端數據處理的橫向可擴展性,避免由于某個環節的性能瓶頸影響整體運行穩定性。
(2)采用插件化方式,滿足各類系統接入的需求。
接入的數據源接口方式眾多,需要采用插件化方式實現靈活定制開發數據收集前端程序。同時插件實現外部數據格式到內部格式的轉換,實現內部統一的數據交互。
面向電力大數據的數據采集監視系統由采集對象層、采集代理層、數據匯集層、數據處理層、數據存儲層和前端展示層組成,如圖1所示。

圖1 面向電力大數據的數據采集監視系統架構
采集對象層由各種多源異構數據接入程序或工具產生的狀態數據組成,典型的是程序或系統服務的日志文件、關系數據庫中有關數據集成情況的記錄;在電力系統中由于有大量秒級、毫秒級數據采集,因此有些采集統計或者運行狀態數據存儲在內存數據庫中以提高性能,同時還會產生實時告警或事件;對于采用微服務或WebService方式交互數據的情況,服務網關是重要的采集監視對象。
采集代理層是針對各類采集對象,采用插件架構的代理程序,有部分代理是獨立于采集對象部署,有的需要嵌入采集對象,比如服務網關上的服務調用情況和流量監控就需要采用服務網關插件的方式嵌入網關內部才能獲取完整的信息。
數據匯集層主要包括彈性消息隊列作為采集數據的傳輸管道,提供海量數據的吞吐能力;面向電力行業的跨級和跨區采集監視需求,設計跨區和跨級轉發代理功能,實現數據可靠跨區跨級傳輸。
數據處理層主要實現對采集代理的注冊管理、數據的后端接收、數據辨識、告警分析、數據統計,以及基于靈活索引的數據智能檢索。同時,將處理后的數據入庫。
數據存儲層包括保存所有數據的HBase數據庫和存放經常訪問數據的緩存數據庫。
前端展示層為人機交互界面,提供動態運行數據的展示、分類統計數據展示、告警展示和統計報表功能。
采集代理分為兩類,即獨立代理和嵌入代理。其中獨立代理采用文件、SQL等松耦合方式與采集對象交互,可以獨立于采集對象運行環境部署;嵌入代理集成在采集對象運行框架中或利用其內部API交互,需在采集對象運行環境中部署運行。
3.1.1 獨立代理
獨立代理采用Flume架構實現操作系統日志、應用程序日志和中間件日志文件的采集,以及關系型數據庫中數據監控記錄的采集。它充分利用Flume的日志采集和數據格式化處理能力,少量代碼即可實現數據采集功能。如圖2所示,獨立代理首先通過各類數據收集模塊獲取對應數據源的數據信息并緩存在內存緩存管道中,然后通過傳輸模塊串接另外一個代理將緩存數據發送到彈性消息總線上,數據接收和處理模塊從彈性消息總線獲取數據。

圖2 獨立代理數據交互圖
3.1.2 嵌入代理
嵌入代理采用插件化方式運行于采集對象運行框架內,比如通過定制的網關過濾器插件統計網關交互的信息,包括服務調用頻度、交互數據量、服務響應周期等。網關過濾插件的運行機制如圖3所示,在“pre”過濾器中記錄服務調用信息、調用時間、輸入的數據流量;“post”過濾器中記錄收集服務調用響應周期、返回的輸出數據流量,并計算統計指標;“error”過濾器中記錄服務調用錯誤情況。

圖3 網關過濾器插件機制
嵌入代理調用采集對象系統私有API接口的方式獲取數據,比如調用電網調度自動化系統內存數據庫接口獲取實時數據采集通道的運行狀態、數據采集的流量等信息。
嵌入代理收集到數據后直接調用彈性消息總線接口將數據傳輸給數據接收和處理模塊。
監視數據的匯集層由彈性消息總線,跨區代理和跨級代理組成。
3.2.1 彈性消息總線
前端代理程序收集的數據通過彈性消息總線轉發給后端的處理模塊,由于涉及的業務系統較多且部署分散,因此需要消息總線具備高并發吞吐量、彈性擴展、支持各種編程語言接口、可靠傳輸機制等特性。對主流的三種消息總線的比較如表1所示。
表1 主流消息總線比較

比較項ActiveMQRabbitMQKafka吞吐量低高非常高可用性主從主從分布式負載均衡支持支持支持消息延遲秒毫秒毫秒編程接口豐富AMQP客戶端豐富可靠傳輸較好好好
結合電力大數據多元數據采集監視對消息總線的要求以及主流消息總線的特性比較,選擇Kafka作為數據匯集的彈性消息總線。它具有分布式多路并發彈性擴展部署的特點,具備消息時延低、可靠性高和編程接口豐富等方面的特性,能夠滿足前端代理數據匯集與后端數據接收與處理的需求。同時,采用Flume對接Kafka的方式可以將數據自動導入到Hbase數據庫,提高開發和運維效率。
3.2.2 跨區代理
電力系統安全防護規范規定業務數據從安全I/II區進入安全III區需要經過隔離裝置(網閘),它具有單向通訊特點,反向只能傳輸1字節報文用于狀態確認,而彈性消息總線基于標準TCP雙向通訊無法穿越隔離裝置,需要通過跨區轉發代理實現報文轉發。跨區代理分為部署在安全I/II區的內網跨隔離裝置代理和部署在安全III區的外網跨隔離裝置代理。安全I/II區的彈性消息總線數據由內網隔離裝置代理的消息消費者模塊接收并轉入緩存由壓縮模塊將報文壓縮以減少對隔離裝置帶寬的占用,然后再由轉發程序通過并發的多個單向TCP鏈路發送給安全III區的外網跨隔離裝置代理的轉發接收程序,再經過解壓和緩存隊列交互最終由消息生產者將消息報文發送給安全III區的彈性消息總線。兩種代理均具備運行狀態監視模塊,負責轉發鏈路的監視和運行狀態告警。跨區轉發過程如圖4所示。

圖4 跨區代理轉發機制
3.2.3 跨級代理
電力系統的數據采集分布在網、省、地、縣多級電網調控管理機構,要實現集中的采集監視必須在各級調控機構部署采集代理,這些代理采集的數據通過遠程網絡傳輸到上級的管理單位,而遠程網絡存在帶寬波動、時延長、時斷時續等特點,因此需要跨級數據轉發代理提高遠程傳輸的可靠性。跨級代理程序采用滑動窗口技術實現批量數據轉發和斷點續傳,發送端啟動滑動窗口后將窗口內的報文開始編號和窗口大小作為窗口信息發送給接收者,接收代理準備好后就按序發送窗口報文,最后一條報文帶有窗口發送完畢標識,接收代理檢查收到的報文序號和數量并發送窗口整體確認報文,發送端收到確認后將窗口在報文隊列中向前移動,已經發送過的數據刪除,交互過程如圖5所示。
如果在跨級傳輸過程中出現丟包,則窗口整體確認報文中發送丟包前的最后一幀報文編號,發送端重發滑動窗口中此編號后的報文,實現斷點續傳。

圖5 跨級代理窗口滑動傳輸機制
數據處理層獲取彈性消息總線中的數據并辨識數據類型后分類處理,比如對告警數據按照告警規則分類入庫和發送短信或電話語音告警;對流量數據入庫后按數據源、數據性質等規則分類統計;對需要高速檢索的數據建立索引等。數據處理的基礎是數據接收和分類,數據處理高效的關鍵是智能索引。
3.3.1 數據接收與分類
數據接收模塊從彈性消息隊列中獲取的報文分為兩部分:報文頭和報文體,如表2和表3所示(報文頭和報文體均采用JSON格式)。在報文頭定義中“datapedigree”是數據族譜信息,用于數據分類,每個數據源的采集對象不同,族譜的層級可能不一樣,因此采用數組方式,比如營銷業務的電量計量數據源中智能電表實時數據的族譜定義為[“營銷”,“計量”,“智能電表
實時采集量”]。有了族譜定義數據處理模塊可以將數據存入HBase數據庫的對應列簇中,并將數據族譜作為標簽,后續的智能索引中針對此列簇建立索引,實現分類統計和動態展示。

表2 報文頭各屬性定義及body部分定義
電量計量數據流量消息的body消息體定義如下,采用JSON格式。

表3 網關流量消息體定義
3.3.2 智能索引
統計和動態展示模塊需要快速地檢索HBase數據庫中的數據,然而HBase數據庫需通過行鍵訪問[13],這種訪問方式與常規檢索通過關鍵字對數據列查詢的模式不一致[14]。為了解決這個問題,系統采用基于ElasticSearch組件的關鍵字檢索為分類統計和用戶界面展示等模塊提供服務[15],通過ElasticSearch將HBase數據庫中經常被訪問的列按照數據標簽建立倒排索引,并封裝數據檢索微服務。統計程序和界面實時檢索調用微服務,后者通過輸入的關鍵字調用ElasticSearch檢索功能獲取行鍵后再訪問Hbase數據庫獲取相關數據返回調用者,調用過程如圖6所示。

圖6 數據檢索交互過程
數據采集監視獲取的海量日志和運行記錄在ElasticSearch上建立倒排組合索引,包括sourcetype、sourcename、datapedigree、id、time列。數據檢索微服務實現根據關鍵字和檢索時間段查詢。在查詢請求中分析出的多個關鍵字通過ElasticSearch查詢符合關鍵字的數據,同時疊加檢索時間查詢,包括絕對時間查詢即通過查詢請求中的起止時間查詢和根據一個具體時間點及其向后或向前相對時間段實現時間區間查詢。
電力大數據多元數據采集監視技術已經在南方電網公司廣州供電局承接的863課題“基于大數據分析的城市電網設備狀態評估系統開發與應用”中應用,采集監視集群部署在6臺服務器節點上,單臺服務器配置2顆12核Xeon E7 2.1 GHz的CPU、內存64 G,安裝CentOS6.7操作系統。
系統接入22個采集源,源端系統涉及電力設備數據、電網運行數據、管理信息、環境氣象數據四大類239子類的數據。通過定制開發代理程序實現對sqoop腳本和Kettle ETL工具的批處理采集的信息監視,以及對電力規約如IEC61850的采集信息監視;通過開發部署于Ngix和Zuul網關中的嵌入式代理實現對WebService和Restful的數據集成模塊的信息監視,系統具備不間斷連續運行能力,現場無故障運行超過一年。
系統動態地統計各類數據的實時流量信息,對實時數據的采集監視周期達到5秒鐘,系統一天采集的日志量在10 GB以上,數據庫入庫記錄上億條;傳統架構下對如此大數據量的信息進行檢索將耗時數分鐘甚至無法返回,此系統采用智能索引技術可在3~5秒鐘內返回結果。以往大數據系統的故障排查需要運維人員查看各個處理環節的日志分析原因,一個問題需要數小時才能定位,此系統收集各節點的日志信息,并進行快速的檢索和分析,將最關鍵的信息呈獻給運維人員,可將故障定位時間縮短到半小時以內,大幅提高運維效率。
通過分析電力大數據多源數據分布式采集監視的應用場景,提出一套適用于電力系統多專業廣域大數據采集監視的技術方案,運用Flume、Kafka、ElasticSearch等大數據技術,適應電力系統實時數據接入、跨區和跨級傳輸的特點,實現基于數據分類標簽的智能索引和分析,為運維人員提供高效的系統監控手段,推進電力大數據技術的實用化。基于此技術的系統已經在客戶現場投運,運行效果良好。在今后的工作中,將進一步研究人工智能技術與數據監視的結合,利用機器學習技術對系統運行狀態進行分析,實現系統態勢智能感知、無人自動巡航和故障自主處置。