丘 寬
(中海油信息科技有限公司深圳分公司,廣東 深圳 518000)
在生產(chǎn)企業(yè)中,基于DCS控制系統(tǒng)對各設(shè)備端數(shù)據(jù)進行采集、存儲以及處理已經(jīng)成為企業(yè)提高生產(chǎn)效率的重要手段。在生產(chǎn)制造中,需要實時對DCS采集的數(shù)據(jù)進行初步的處理與存儲,以加強對生產(chǎn)過程穩(wěn)定性的監(jiān)督,及時對可能的故障或事故進行預(yù)警,保障生產(chǎn)的連續(xù)與穩(wěn)定。而實時數(shù)據(jù)庫需要保障DCS采集的數(shù)據(jù)被及時處理,采用標(biāo)準(zhǔn)化的接口進行存儲與調(diào)用,建立實時數(shù)據(jù)中心[1]。
在生產(chǎn)控制中,各類應(yīng)用系統(tǒng)具有較強的實時要求,需要在較短的時間周期內(nèi),或者在規(guī)定的時間點對設(shè)備數(shù)據(jù)進行采集,并對數(shù)據(jù)進行實時處理。一般而言,在生產(chǎn)系統(tǒng)中,通過構(gòu)建實時數(shù)據(jù)庫以存儲實時數(shù)據(jù),同時向關(guān)系數(shù)據(jù)庫定時寫入數(shù)據(jù),成為當(dāng)前生產(chǎn)中常用的做法。但是采用Oracle等關(guān)系數(shù)據(jù)庫,難以滿足實時數(shù)據(jù)庫大量的寫入以及存儲海量數(shù)據(jù)的要求。并且由于DCS采集可能來源于不同的渠道,隨著數(shù)據(jù)源的增多,傳統(tǒng)的DBMS系統(tǒng)難以有效解決實時數(shù)據(jù)的海量存儲[2]。
隨著大數(shù)據(jù)架構(gòu)的發(fā)展,出現(xiàn)了數(shù)據(jù)湖的架構(gòu)。數(shù)據(jù)湖主要是采用大數(shù)據(jù)架構(gòu)對各類異質(zhì)架構(gòu)的數(shù)據(jù)進行存儲,包括結(jié)構(gòu)化或非結(jié)構(gòu)化數(shù)據(jù),以及二進制數(shù)據(jù)。數(shù)據(jù)湖架構(gòu)可以集成實時數(shù)據(jù)流、數(shù)據(jù)倉庫,并基于數(shù)據(jù)湖提供機器學(xué)習(xí)應(yīng)用服務(wù)。由于數(shù)據(jù)湖基于大數(shù)據(jù)的相關(guān)架構(gòu),因而在存儲能力以及效率方面優(yōu)于傳統(tǒng)的數(shù)據(jù)庫,并且在適應(yīng)性上優(yōu)于Hadoop等大數(shù)據(jù)結(jié)構(gòu)。數(shù)據(jù)湖中采用原生方式存儲數(shù)據(jù),即可以存儲原始的數(shù)據(jù)結(jié)構(gòu),而不用將其進行結(jié)構(gòu)化處理。同時,數(shù)據(jù)湖接收多源異構(gòu)數(shù)據(jù),提供統(tǒng)一的管理視圖,有助于解決信息孤島,實施數(shù)據(jù)安全及質(zhì)量管理。為此,可以在生產(chǎn)端DCS控制器實時采集數(shù)據(jù)的情況下,整合實時數(shù)據(jù)庫以及數(shù)據(jù)湖技術(shù),提供新的數(shù)據(jù)管理架構(gòu)。
在實時數(shù)據(jù)庫方面,不同的DCS廠商搭建了基于自身產(chǎn)品系統(tǒng)的實時數(shù)據(jù)庫,比如Wonderware公司提供基于其DCS系統(tǒng)的實時數(shù)據(jù)庫等,可以同步設(shè)備端傳感器采集的實時數(shù)據(jù)。而國內(nèi),浙江中控以及紫金橋等公司,在為各制造企業(yè)提供的工業(yè)級解決方案中,包括其架構(gòu)的實時數(shù)據(jù)庫。此類實時數(shù)據(jù)庫采用內(nèi)存結(jié)構(gòu),提供數(shù)據(jù)的讀寫以及緩存機制,具有較高的響應(yīng)速度以及讀寫效率。在架構(gòu)上,控制事務(wù)的并發(fā)性、減少對事務(wù)的搶占,以保障在預(yù)測的時間內(nèi)完成各項數(shù)據(jù)庫任務(wù)。在數(shù)據(jù)庫的架構(gòu)上以內(nèi)部為基礎(chǔ),然后在傳統(tǒng)的關(guān)系數(shù)據(jù)庫上進行改造,增加時間處理約束。當(dāng)前在實時數(shù)據(jù)庫的研究方面,由于處理時間的要求越來越高,其復(fù)雜性也有所增長,導(dǎo)致實時數(shù)據(jù)庫的應(yīng)用與研究相對滯后[3]。
目前,國內(nèi)外不少廠商提出了數(shù)據(jù)湖的相關(guān)架構(gòu)以及解決方案。其中,國外較為著名的架構(gòu)有亞馬遜的AWS數(shù)據(jù)湖,該數(shù)據(jù)湖架構(gòu)包括完整的端到端的解決方案,提供了各類數(shù)據(jù)傳輸接口以及應(yīng)用層接口,并且為用戶提供了成熟的管理工具以及數(shù)據(jù)治理方案。在國內(nèi)廠商中,華為較早提出自己的數(shù)據(jù)湖架構(gòu),采用云端解決方案,在線提供數(shù)據(jù)分析、查詢等服務(wù);阿里提出了DLA數(shù)據(jù)湖,基于阿里云實現(xiàn)多源異構(gòu)數(shù)據(jù)的存儲、查詢與分析。
數(shù)據(jù)湖與一般的數(shù)據(jù)倉庫有很大的不同,數(shù)據(jù)湖對數(shù)據(jù)倉庫進行了優(yōu)化,并且無須處理復(fù)雜的數(shù)據(jù)結(jié)構(gòu),其自由度高于數(shù)據(jù)倉庫,并且存儲能力也高于普通的數(shù)據(jù)倉庫。在讀寫數(shù)據(jù)倉庫時,數(shù)據(jù)湖支持實時性數(shù)據(jù),可以直接映射源端數(shù)據(jù),而無須進行結(jié)構(gòu)化的定義。數(shù)據(jù)湖不僅能解決海量多源數(shù)據(jù)的存儲,還能提高數(shù)據(jù)的實時處理能力,因而適合具有一定實時性數(shù)據(jù)要求的應(yīng)用場景。
本文構(gòu)建的基于數(shù)據(jù)湖的實時數(shù)據(jù)管理平臺具有以下要求:實時數(shù)據(jù)采集采用數(shù)據(jù)單向?qū)ν鈧鬏斈J?,保障與中控系統(tǒng)網(wǎng)絡(luò)安全隔離;數(shù)據(jù)采集客戶端采用斷點續(xù)傳功能,保障數(shù)據(jù)完整傳輸;形成雙實時庫模式數(shù)據(jù)中心;建立實時數(shù)據(jù)中心,實現(xiàn)數(shù)據(jù)統(tǒng)一存儲,并為其他的系統(tǒng)提供數(shù)據(jù)支持;數(shù)據(jù)湖平臺應(yīng)用可實現(xiàn)作業(yè)實時數(shù)據(jù)的全面采集、長效存儲、統(tǒng)一管理和靈活發(fā)布;采用微服務(wù)開發(fā)框架進行應(yīng)用配置開發(fā),保障UI界面的風(fēng)格統(tǒng)一,快速配置開發(fā)。
基于以上實時數(shù)據(jù)管理平臺要求,本文設(shè)計了基于數(shù)據(jù)湖的實時數(shù)據(jù)管理平臺(見圖1)。
如圖1所示,為保障生產(chǎn)過程安全,采用生產(chǎn)網(wǎng)與管理網(wǎng)隔離的方式進行網(wǎng)格安全防護,主要的數(shù)據(jù)實時采集在生產(chǎn)網(wǎng)段進行,通過DCS系統(tǒng),控制終端設(shè)施的實時數(shù)據(jù)采集。各終端設(shè)施符合OPC技術(shù)規(guī)范,通過OPC技術(shù)可以在不同的硬件終端設(shè)施中獲取硬件設(shè)施的各項數(shù)據(jù),并按照標(biāo)準(zhǔn)的數(shù)據(jù)接口進行讀取,然后通過OPC服務(wù)器將讀取的實施數(shù)據(jù)存入到生產(chǎn)網(wǎng)的實時數(shù)據(jù)庫中。為了緩解存儲壓力,在實施數(shù)據(jù)庫中設(shè)置了數(shù)據(jù)庫緩存。在數(shù)據(jù)庫緩存的同步機制下,將數(shù)據(jù)同步到管理網(wǎng)的實施數(shù)據(jù)庫中,實現(xiàn)雙實時數(shù)據(jù)庫的機制。在管理網(wǎng)段,實時數(shù)據(jù)庫通過緩存與陰影機制,緩沖生產(chǎn)網(wǎng)同步數(shù)據(jù)。同時,基于數(shù)據(jù)湖技術(shù),將同步到管理網(wǎng)段的實時數(shù)據(jù)傳輸?shù)綌?shù)據(jù)湖中進行存儲。在應(yīng)用層,通過微服務(wù)接口,讀取數(shù)據(jù)湖中的各項數(shù)據(jù),為各項應(yīng)用終端提供數(shù)據(jù)支持,比如各類組態(tài)維護與實施應(yīng)用等[4]。
圖1 基于數(shù)據(jù)湖的實時數(shù)據(jù)管理平臺架構(gòu)
基于雙數(shù)據(jù)庫以及數(shù)據(jù)湖的實時數(shù)據(jù)管理平臺架構(gòu),能夠有效解決網(wǎng)絡(luò)安全防護下實時數(shù)據(jù)的同步問題,同時也能解決海量數(shù)據(jù)的存儲以及應(yīng)用問題。相比原有的基于關(guān)系型數(shù)據(jù)庫的架構(gòu),能夠解決多源實時數(shù)據(jù)的存儲、分析以及應(yīng)用問題,并且能夠提高存儲的規(guī)模以及應(yīng)用的效率。
實時數(shù)據(jù)管理平臺對實時數(shù)據(jù)庫具有較高的要求,為此本文采用內(nèi)存數(shù)據(jù)庫的方式實現(xiàn)實時數(shù)據(jù)庫,其結(jié)構(gòu)如圖2所示。
圖2 實時數(shù)據(jù)庫實現(xiàn)結(jié)構(gòu)
實時數(shù)據(jù)庫為4層結(jié)構(gòu),第一層(M1層)和第二層(M2層)主要采用內(nèi)存方式存儲數(shù)據(jù),其中第一層存儲實時性最高的DCS數(shù)據(jù),然后映射到第層,最終將數(shù)據(jù)同步到第三以及第四層。同時,為了提高效率,采用位示圖進行內(nèi)存的動態(tài)分配,如圖3所示。
圖3 位示圖動態(tài)分配內(nèi)存
實時數(shù)據(jù)庫系統(tǒng)內(nèi)存被劃分成若干小塊,在實現(xiàn)方式中,每一小塊內(nèi)存是字節(jié),每字節(jié)的內(nèi)存在位示圖中用一個位來表示。為了找到一個可用的空閑內(nèi)存,實時數(shù)據(jù)庫在位示圖頁面上搜索對應(yīng)大小的連續(xù)的沒有被占用的位。實時數(shù)據(jù)庫采用循環(huán)的方式掃描位示圖頁面,它保存當(dāng)前位示圖頁面的標(biāo)識和所在當(dāng)前頁面的位置,當(dāng)每次需要分配內(nèi)存的時候,就從當(dāng)前位置開始掃描位示圖。當(dāng)掃描完最后一個位示圖頁面后,接著從第一個位示圖頁面繼續(xù)掃面,直到回到當(dāng)前位置。當(dāng)把位示圖頁面循環(huán)掃描一遍之后沒有找到空閑的內(nèi)存空間時,就會擴充一段新的內(nèi)存區(qū)供實時數(shù)據(jù)庫系統(tǒng)使用[5]。
數(shù)據(jù)湖的實現(xiàn)基于Kappa架構(gòu),如圖4所示。
圖4 數(shù)據(jù)湖實現(xiàn)
如圖4所示,采用MaxWell和canal同步不同來源的DCS實時數(shù)據(jù)庫,基于kafka對實時數(shù)據(jù)進行初步的加工,形成從ODS到DWS的不同層次的數(shù)據(jù)處理結(jié)構(gòu),并采用SparkStreming和Flink進行流失調(diào)度,并匯總到數(shù)據(jù)湖中。數(shù)據(jù)湖采用Hbase作為數(shù)據(jù)的存儲結(jié)構(gòu),采用Redis進行緩存,然后基于ES進行數(shù)據(jù)的管理,以提供給應(yīng)用層使用。
應(yīng)用層并不直接讀寫數(shù)據(jù)湖中的數(shù)據(jù),而是采用微服務(wù)結(jié)構(gòu),將各類應(yīng)用請求進行封裝,微服務(wù)層實現(xiàn)方式,如圖5所示。
圖5 微服務(wù)層實現(xiàn)
微服務(wù)采用Java SpringCloud進行實現(xiàn),采用Erueka進行服務(wù)注冊,采用Zuui實現(xiàn)微服務(wù)網(wǎng)關(guān),采用Redis進行微服務(wù)的緩存,由Feign提供對外服務(wù)接口。不同的應(yīng)用,比如組態(tài)信息監(jiān)督等,從數(shù)據(jù)湖中訪問對應(yīng)的數(shù)據(jù)。當(dāng)開發(fā)DCS應(yīng)用時,通過微服務(wù)層向數(shù)據(jù)湖發(fā)起請求,隔離不同應(yīng)用的請求,同時提供簡潔的訪問接口[6]。
本文在傳統(tǒng)DCS數(shù)據(jù)實時管理系統(tǒng)的基礎(chǔ)上,采用雙數(shù)據(jù)庫的形式,將生產(chǎn)網(wǎng)數(shù)據(jù)同步到管理網(wǎng)端,以控制網(wǎng)絡(luò)安全,同時基于數(shù)據(jù)湖架構(gòu),將實時數(shù)據(jù)庫中的數(shù)據(jù)同步到數(shù)據(jù)湖中,解決多源實時數(shù)據(jù)的海量存儲問題。同時,采用微服務(wù)架構(gòu),在應(yīng)用層通過微服務(wù)接口將數(shù)據(jù)湖中的數(shù)據(jù)在不同的終端上應(yīng)用,有效地解決了原有實時數(shù)據(jù)管理系統(tǒng)中實時數(shù)據(jù)的海量存儲以及應(yīng)用問題,能夠為不同生產(chǎn)企業(yè)構(gòu)建實時數(shù)據(jù)方案提供借鑒?!?/p>