丘 寬
(中海油信息科技有限公司深圳分公司,廣東 深圳 518000)
在生產企業中,基于DCS控制系統對各設備端數據進行采集、存儲以及處理已經成為企業提高生產效率的重要手段。在生產制造中,需要實時對DCS采集的數據進行初步的處理與存儲,以加強對生產過程穩定性的監督,及時對可能的故障或事故進行預警,保障生產的連續與穩定。而實時數據庫需要保障DCS采集的數據被及時處理,采用標準化的接口進行存儲與調用,建立實時數據中心[1]。
在生產控制中,各類應用系統具有較強的實時要求,需要在較短的時間周期內,或者在規定的時間點對設備數據進行采集,并對數據進行實時處理。一般而言,在生產系統中,通過構建實時數據庫以存儲實時數據,同時向關系數據庫定時寫入數據,成為當前生產中常用的做法。但是采用Oracle等關系數據庫,難以滿足實時數據庫大量的寫入以及存儲海量數據的要求。并且由于DCS采集可能來源于不同的渠道,隨著數據源的增多,傳統的DBMS系統難以有效解決實時數據的海量存儲[2]。
隨著大數據架構的發展,出現了數據湖的架構。數據湖主要是采用大數據架構對各類異質架構的數據進行存儲,包括結構化或非結構化數據,以及二進制數據。數據湖架構可以集成實時數據流、數據倉庫,并基于數據湖提供機器學習應用服務。由于數據湖基于大數據的相關架構,因而在存儲能力以及效率方面優于傳統的數據庫,并且在適應性上優于Hadoop等大數據結構。數據湖中采用原生方式存儲數據,即可以存儲原始的數據結構,而不用將其進行結構化處理。同時,數據湖接收多源異構數據,提供統一的管理視圖,有助于解決信息孤島,實施數據安全及質量管理。為此,可以在生產端DCS控制器實時采集數據的情況下,整合實時數據庫以及數據湖技術,提供新的數據管理架構。
在實時數據庫方面,不同的DCS廠商搭建了基于自身產品系統的實時數據庫,比如Wonderware公司提供基于其DCS系統的實時數據庫等,可以同步設備端傳感器采集的實時數據。而國內,浙江中控以及紫金橋等公司,在為各制造企業提供的工業級解決方案中,包括其架構的實時數據庫。此類實時數據庫采用內存結構,提供數據的讀寫以及緩存機制,具有較高的響應速度以及讀寫效率。在架構上,控制事務的并發性、減少對事務的搶占,以保障在預測的時間內完成各項數據庫任務。在數據庫的架構上以內部為基礎,然后在傳統的關系數據庫上進行改造,增加時間處理約束。當前在實時數據庫的研究方面,由于處理時間的要求越來越高,其復雜性也有所增長,導致實時數據庫的應用與研究相對滯后[3]。
目前,國內外不少廠商提出了數據湖的相關架構以及解決方案。其中,國外較為著名的架構有亞馬遜的AWS數據湖,該數據湖架構包括完整的端到端的解決方案,提供了各類數據傳輸接口以及應用層接口,并且為用戶提供了成熟的管理工具以及數據治理方案。在國內廠商中,華為較早提出自己的數據湖架構,采用云端解決方案,在線提供數據分析、查詢等服務;阿里提出了DLA數據湖,基于阿里云實現多源異構數據的存儲、查詢與分析。
數據湖與一般的數據倉庫有很大的不同,數據湖對數據倉庫進行了優化,并且無須處理復雜的數據結構,其自由度高于數據倉庫,并且存儲能力也高于普通的數據倉庫。在讀寫數據倉庫時,數據湖支持實時性數據,可以直接映射源端數據,而無須進行結構化的定義。數據湖不僅能解決海量多源數據的存儲,還能提高數據的實時處理能力,因而適合具有一定實時性數據要求的應用場景。
本文構建的基于數據湖的實時數據管理平臺具有以下要求:實時數據采集采用數據單向對外傳輸模式,保障與中控系統網絡安全隔離;數據采集客戶端采用斷點續傳功能,保障數據完整傳輸;形成雙實時庫模式數據中心;建立實時數據中心,實現數據統一存儲,并為其他的系統提供數據支持;數據湖平臺應用可實現作業實時數據的全面采集、長效存儲、統一管理和靈活發布;采用微服務開發框架進行應用配置開發,保障UI界面的風格統一,快速配置開發。
基于以上實時數據管理平臺要求,本文設計了基于數據湖的實時數據管理平臺(見圖1)。
如圖1所示,為保障生產過程安全,采用生產網與管理網隔離的方式進行網格安全防護,主要的數據實時采集在生產網段進行,通過DCS系統,控制終端設施的實時數據采集。各終端設施符合OPC技術規范,通過OPC技術可以在不同的硬件終端設施中獲取硬件設施的各項數據,并按照標準的數據接口進行讀取,然后通過OPC服務器將讀取的實施數據存入到生產網的實時數據庫中。為了緩解存儲壓力,在實施數據庫中設置了數據庫緩存。在數據庫緩存的同步機制下,將數據同步到管理網的實施數據庫中,實現雙實時數據庫的機制。在管理網段,實時數據庫通過緩存與陰影機制,緩沖生產網同步數據。同時,基于數據湖技術,將同步到管理網段的實時數據傳輸到數據湖中進行存儲。在應用層,通過微服務接口,讀取數據湖中的各項數據,為各項應用終端提供數據支持,比如各類組態維護與實施應用等[4]。

圖1 基于數據湖的實時數據管理平臺架構
基于雙數據庫以及數據湖的實時數據管理平臺架構,能夠有效解決網絡安全防護下實時數據的同步問題,同時也能解決海量數據的存儲以及應用問題。相比原有的基于關系型數據庫的架構,能夠解決多源實時數據的存儲、分析以及應用問題,并且能夠提高存儲的規模以及應用的效率。
實時數據管理平臺對實時數據庫具有較高的要求,為此本文采用內存數據庫的方式實現實時數據庫,其結構如圖2所示。

圖2 實時數據庫實現結構
實時數據庫為4層結構,第一層(M1層)和第二層(M2層)主要采用內存方式存儲數據,其中第一層存儲實時性最高的DCS數據,然后映射到第層,最終將數據同步到第三以及第四層。同時,為了提高效率,采用位示圖進行內存的動態分配,如圖3所示。

圖3 位示圖動態分配內存
實時數據庫系統內存被劃分成若干小塊,在實現方式中,每一小塊內存是字節,每字節的內存在位示圖中用一個位來表示。為了找到一個可用的空閑內存,實時數據庫在位示圖頁面上搜索對應大小的連續的沒有被占用的位。實時數據庫采用循環的方式掃描位示圖頁面,它保存當前位示圖頁面的標識和所在當前頁面的位置,當每次需要分配內存的時候,就從當前位置開始掃描位示圖。當掃描完最后一個位示圖頁面后,接著從第一個位示圖頁面繼續掃面,直到回到當前位置。當把位示圖頁面循環掃描一遍之后沒有找到空閑的內存空間時,就會擴充一段新的內存區供實時數據庫系統使用[5]。
數據湖的實現基于Kappa架構,如圖4所示。

圖4 數據湖實現
如圖4所示,采用MaxWell和canal同步不同來源的DCS實時數據庫,基于kafka對實時數據進行初步的加工,形成從ODS到DWS的不同層次的數據處理結構,并采用SparkStreming和Flink進行流失調度,并匯總到數據湖中。數據湖采用Hbase作為數據的存儲結構,采用Redis進行緩存,然后基于ES進行數據的管理,以提供給應用層使用。
應用層并不直接讀寫數據湖中的數據,而是采用微服務結構,將各類應用請求進行封裝,微服務層實現方式,如圖5所示。

圖5 微服務層實現
微服務采用Java SpringCloud進行實現,采用Erueka進行服務注冊,采用Zuui實現微服務網關,采用Redis進行微服務的緩存,由Feign提供對外服務接口。不同的應用,比如組態信息監督等,從數據湖中訪問對應的數據。當開發DCS應用時,通過微服務層向數據湖發起請求,隔離不同應用的請求,同時提供簡潔的訪問接口[6]。
本文在傳統DCS數據實時管理系統的基礎上,采用雙數據庫的形式,將生產網數據同步到管理網端,以控制網絡安全,同時基于數據湖架構,將實時數據庫中的數據同步到數據湖中,解決多源實時數據的海量存儲問題。同時,采用微服務架構,在應用層通過微服務接口將數據湖中的數據在不同的終端上應用,有效地解決了原有實時數據管理系統中實時數據的海量存儲以及應用問題,能夠為不同生產企業構建實時數據方案提供借鑒。■