天天看點

電網調控系統叢集分布式實時資料庫的關鍵技術

作者:電氣技術

随着特高壓和新能源項目的建設,需要監控的資料點數急劇增多,對電網監控系統的資料庫容量和實時性要求日益提高。傳統隻是作為關系庫緩存、查找完全依賴Hash算法的實時資料庫因存在資料庫下裝、查找速度均随資料點數增多而變慢的問題而面臨較大挑戰。

上海思源弘瑞自動化有限公司的張少波、姚陽春、湛鋒,在2023年第1期《電氣技術》上撰文,分析電網調控系統中實時資料庫的實時性和一緻性這兩個核心問題,通過對象線性轉換定位、指針級緊耦合通路等方案解決實時性的問題,通過增加資料版本、支援增量和全量同步等方案解決一緻性的問題。在包含60多個計算機節點、200多萬監控資料點的地區級配電網主站項目的工程實踐中驗證了上述方案的可行性。

電網調控系統叢集分布式實時資料庫的關鍵技術

通過電塔和景觀進行金融資料處理的圖像。全球金融、商業和數字接口概念數字生成圖像。

随着特高壓交直流混合電網的大規模建設、新能源發電的大規模接入和低碳智能電網建設的加速推進,電力實時資料采集的範圍和規模不斷擴大,監控系統采集的資料量不斷增加,資料規模已突破百萬級并向千萬級别發展,這對調控系統的資料庫管理系統(database management system, DBMS)的資料存儲容量和處理效率提出了更高的要求。

目前,行業内廠家通常采用“基于關系資料庫的實時資料庫技術路線”,即在關系庫的基礎上采用一些加速處理方法(如基于cache的記憶體共享或基于Hash表的記憶體共享),以滿足系統對資料處理和存儲的實時性要求,其本質上是以關系資料庫為核心的集中式DBMS,這制約了大型電網調控系統的開發更新,是以設計獨立、完善的分布式實時資料庫管理系統非常必要。

近年來,網際網路、大資料的蓬勃發展催生了一批支援叢集甚至不同資料中心的分布式并行資料庫。以BigTable、Cassandra、MongoDB為代表的NoSQL資料庫,通過弱化資料一緻性要求,以獲得更強的系統擴充能力和系統可用性;以VbltDB、Spanner、MemSQL為代表的NoSQL資料庫,通過貼近應用的設計來獲得更好的性能和擴充能力。雖然這些分布式DBMS因無法滿足電網調控系統對實時性的要求而不能直接使用,但為調控系統叢集分布式DBMS的實作提供了有益的參考。

鑒于此,本文圍繞分布式資料庫通路的實時性和資料一緻性問題,設計一套面向電網監控系統的叢集分布式實時資料庫,在某地區配電網自動化主站系統的工程實踐中對本文所提方案的有效性進行驗證。

1 監控系統的應用特點

電力監控自動化系統是最典型的工業監控系統,實時資料庫管理系統是其核心支撐平台,實時資料庫管理系統的實時性、可靠性、擴充性、開放性和穩定性,直接決定了整個系統的性能。

1)系統實時性

電力實時監視系統要求應用軟體具有很高的資料處理速度和控制響應速度,特别是當電力系統發生突發異常事件時,短時間内要接收、記錄、處理、報告大量事件。而分析類應用(狀态估計、線上潮流等)的矩陣和疊代計算量大,對于300個計算節點的中等規模電網,如果資料庫通路速度能達到500萬次/s,完成狀态估計全過程的時間接近1s,如果通路速度隻有10萬次/s,則時間将超過5s,此時該軟體已喪失實時性和可用性。由此可見,資料庫通路的實時性對監控系統特别重要,它直接決定了整個系統是否可用。

2)系統可靠性

電力監控自動化系統是電網運作的控制中樞,對其可靠性要求極高,基于分布式的一主多備架構,為提升系統可靠性提供新的解決方案。

3)系統擴充性

分布式存儲技術将海量資料分散存儲在多台伺服器,并對其進行統一管理,既能充分挖掘多伺服器的處理能力,又能實作處理能力的水準擴充。

4)資料庫一緻性

DBMS需根據各類資料的特征,實作這些資料在系統維護、運作階段增删和更新操作的自動同步,確定資料一緻性,以簡化上層應用程式的設計開發,是實作調控系統分布式叢集部署的基礎。

是以,調控系統的分布式實時資料庫管理系統的設計,應以實時性為基礎,以擴充性和資料一緻性為目标,基于簡單、實用、穩定的原則,盡可能地提升系統的可用性。

2 實時性關鍵技術

調控系統實時資料庫中存儲以電網模型為骨架的目前運作斷面資料,其資料實時重新整理,應用程式需實作對全斷面資料的秒級掃描通路,才能滿足電網監控的實時性要求。下面針對實時性的關鍵技術進行詳細介紹。

2.1 對象快速定位

本資料庫設計一種高效的資料通路機制:表中每一個對象都有一個惟一的ID(稱為OID)。資料庫由對象索引區和對象資料區組成,使用者需要的表對象都存放在對象資料區。資料庫中每個對象都對應一個索引項,索引項中記錄對應對象的實體位置,即對象在數組中的下标。對象OID由所屬表的ID、對應的索引項在索引數組中的下标、對象所占記憶體單元/數組元素的使用次數三部分組成。

通過對象OID中的索引下标可以直接定位該對象對應索引項的下标,再通過索引項中記錄的對象下标即可直接定位對象實體存儲位置。通過數組元素的使用次數累加,實作索引下标的複用,確定對象OID的惟一。整個算法是一種線性轉換的算法,資料查找的時間複雜度為O(1)。OID定位如圖1所示。

電網調控系統叢集分布式實時資料庫的關鍵技術

圖1 OID定位

此外,為了提高資料增删的性能,通過類似連結清單的方式對空閑索引項進行管理。索引項增删管理的基本原理如圖2所示。

電網調控系統叢集分布式實時資料庫的關鍵技術

圖2 索引項增删管理

由上述内容可知,根據OID可直接計算出對象在實時庫記憶體中的存儲位址,實作了類似對象指針的功能。基于OID機制可實作對象間複雜關聯關系的簡潔高效表達,支援面向對象的資料庫模型。該機制具有如下優點:

1)自動維護。對象OID由實時資料庫管理系統(real-time database management system, RTDBMS)自動維護,在插入時自動生成,在删除時自動釋放。

2)惟一性。對象插入時使用計數自動加一,確定對象空間複用時OID的惟一性。

3)穩定性。對象OID不會随着表中其他對象的增删而發生變化,是以OID雖然是資料庫内部屬性,但是應用程式也可記錄OID并借助OID實作快速通路。

4)高效性。通過對象OID可借助相關算法直接換算出對象的實體存儲位址,確定資料通路的實時、高效和O(1)的時間複雜度。

5)簡潔性。通過存儲關聯對象的OID,即可表達對象間1:1單向引用、1:1雙向引用、1:n合成聚集、1:n共享聚集等關聯關系,實作面向對象的資料存儲和通路。

2.2 層次結構的父子關系

在本實時資料庫中,平級的關聯關系用OID的方式來表示,可以通過OID線性方式定位到被關聯對象的位址,實作快速定位。對于層次關系,如廠站包含間隔,間隔包含裝置,為了提高父子關系查詢的性能,采取類似于資料結構中的樹、連結清單的思路,用等價于指針的OID來記錄父子、兄弟之間的關系。

相比而言,其他資料庫都是通過“查找”的方式來擷取子記錄,而本文中的實時資料庫是通過“直接擷取”的方式來擷取,進而極大地提高了通路效率。本資料庫通過支援合成聚集、共享聚集、引用關系,實作了對IEC 61970公共資訊模型(common information model, CIM)标準的完整支援。

2.3 緊耦合通路

資料庫檔案映射到共享記憶體後,程序可以以私有記憶體方式來通路實時資料庫。按照正常的資料庫通路思維,程序可以定義一個緩存來接收從資料庫/共享記憶體中獲得的資料,存在緩存的申請和釋放,以及共享記憶體到緩存之間資料的拷貝。

考慮到資料庫以共享記憶體的方式可以由程序直接通路,是以完全可以直接通路記憶體位址,前提是有一個描述記憶體結構的C++頭檔案。使用者通過RTDBMS資料庫設計工具建構實時資料庫模式時,工具會自動生成對應的各個表的C++頭檔案,應用程式通過資料庫提供的通路接口擷取指定對象的記憶體位址後,就可以用頭檔案中表的類定義實作字段的高速通路,這種通路方式稱為緊耦合通路。

2.4 快速索引

對于實時資料庫記錄的通路,通常有兩種記錄定位的方式:一種是基于ID的定位;另一種是基于名稱的定位。除了基于OID實作的對象ID到對象位址的換算,還提供了基于Hash算法的附加索引機制,實作對象名稱到對象位址的快速定位。

3 一緻性關鍵技術

CAP理論作為分布式系統的理論基礎,闡述了分布式系統的一緻性(consistency)、可用性(availability)、分區容錯性(partition tolerance),最多隻能同時實作兩點,不可能三者兼顧。一般來說,分區容錯是無法避免的,當一緻性和可用性無法兼顧時,隻能選擇AP,或選擇CP。在一緻性和可用性的取舍上,隻能根據應用場景選擇合适的方案。

傳統關系資料庫如Oracle和MySQL支援準備階段和送出階段的兩階段送出協定。準備階段中事務管理器給每個參與者發送準備的消息,每個資料庫參與者在本地執行事務,并寫入Undo、Redo日志,此時事務沒有送出。

在送出階段,如果事務管理器接收到參與者的失敗資訊或者逾時,則直接給每個參與者發送復原消息,否則發送送出消息;參與者根據事務管理器的指令執行送出或者復原,并釋放事務過程中使用的鎖資源。由此可見,在一次資料寫的過程中參與者需要阻塞、存在多次互動而響應時間過長,可能沒有響應而需要發起方等待逾時、發起方在過程中崩潰等問題。

雖然為了解決二階段協定中的同步阻塞等問題,還有三階段送出協定,但還是難以避免此過程中的網絡分區問題。在其他對強一緻性要求不是特别高的場景,比較普遍的做法是選擇可用性,退而求其次使用最終一緻性來保證資料安全。

在國内廠家實作實時資料庫的技術方面,一般會采用一些不僅為了保持資料庫一緻性的資料維護機制,如電網模型、參數等靜态資料有額外一份基于關系資料庫或者檔案型資料庫的資料源(這裡統一稱為維護資料庫),即使運作的實時資料庫資料出現損壞、不一緻的情況,亦可以通過重新下裝/釋出來實作各個節點實時資料庫的同步。

在資料庫的維護方面,采取先對維護資料庫進行寫操作,成功後再寫運作的實時資料庫;或者隻在維護資料庫上進行增删操作,運作的資料庫上隻進行更新操作。同時還會進行資料庫的定期備份。這些手段都降低了資料不一緻的風險。

下面介紹從平台角度為了盡可能降低資料不一緻采取的政策,主要包括資料版本實時比較、全同步和增量同步相結合、資料庫寫日志在非同步節點上的redo操作、在節點數少的情況下用傳輸控制協定(transmission control protocol, TCP)代替使用者資料報協定(user datagram protocol, UDP)實作資料庫同步封包的發送等。

在分布式實時資料庫的環境中,系統中存在一個作為基準的庫和多個被同步的庫,基準庫稱為主本(庫),其他庫稱為副本(庫)。

本實時資料庫基于嚴格的資料版本比較,這裡的版本主要包括全局的表示表結構資訊的模式版本,以及各個表的資料版本。表的資料版本包含增删版本、目前對象數、首空閑索引下标、更新版本。該版本資訊表征了各表的對象存儲狀況,反映了主、副本同步過程中記錄檔丢失的情況,為後續同步過程主本庫的處理提供了依據。

實時資料庫的主本和副本之間不一緻後進行的同步處理稱為一緻性處理,分為資料庫檔案級和日志級的同步處理,即資料庫的全同步和增量同步。從一緻性處理的時間階段來劃分,又可以分為啟動階段和運作階段的一緻性處理。

在啟動階段,如果副本和主本之間的版本不一緻,則進行資料庫檔案級的同步處理。在運作階段,應用程式調用實時資料庫的寫接口進行資料庫的增删改操作,該寫操作封包發給資料庫主本來執行,并滾動緩存目前帶資料版本的寫操作,封包(稱為同步封包)緩存的多條同步封包稱為記錄檔,緩存數量可根據時間和數量動态調整。主本執行寫操作後,接口就立即傳回給應用程式成功與否,然後主本以異步方式向各個副本發送同步封包。

副本收到同步封包後,發現資料版本和本機一緻就執行寫操作,若不一緻或者副本執行失敗,則主動向主本請求執行一緻性處理。主本收到一緻性處理請求後,如果請求的日志在緩存的日志範圍内,則重發記錄檔,否則執行資料庫檔案級的同步處理。

可見,采用這種方式,應用程式對實時資料庫的通路不受一緻性處理過程的幹擾,也不受副本節點數量的影響,確定了應用程式調用實時資料庫接口的實時性。資料庫日志級和檔案級一緻性處理流程如圖3和圖4所示。

電網調控系統叢集分布式實時資料庫的關鍵技術

圖3 日志級一緻性處理流程

電網調控系統叢集分布式實時資料庫的關鍵技術

圖4 檔案級一緻性處理流程

4 實作和驗證

基于上述設計思想,開發一套應用于電力實時監控系統的分布式實時資料庫管理系統,包括多層次通路接口和完善的配套工具。資料庫提供本地緊耦合通路接口、網絡層通路接口和應用層通路接口。系統提供了高性能的資料庫服務,通過多線程并發管理和中繼資料自動加載,極大提高了資料庫的讀寫性能。同時,為了實作完整的資料庫系統生态,系統提供了配套的資料庫定義工具、資料庫編輯工具、資料庫檢索工具。

在實時資料庫的性能方面,進行不同資料點數情況下的實時庫讀寫性能測試。測試環境為Intel(R) Core(TM) i5—10210U [email protected]的CPU,16G記憶體,1T固态硬碟(solid state disk, SSD),Windows10作業系統的便攜式計算機。單機實時庫讀寫性能的測試結果見表1。

電網調控系統叢集分布式實時資料庫的關鍵技術

表1 單機實時庫讀寫性能測試結果

從測試結果可知,實時庫的讀寫性能優異,而且讀寫耗時基本不随資料點數的增加而變化。

在實際系統中,實時庫均采用叢集方式部署在多個節點,是以實時庫主、副本間的同步性能也是關注的重點。下面測試在不同節點規模場景下,實時庫更新操作時系統總體資料吞吐量的情況,測試機器性能同上。多機橫向擴充實時庫更新性能測試結果見表2。

由此可見,将資料橫向擴充方式部署在多個節點上,因為每個節點上的實時庫是獨立更新的,理論性能應該接近線性擴充,實際測試的結果也基本和預想吻合,這說明實時庫的橫向擴充具有很好的線性度,在解決資料庫容量急劇擴大的需求時具備良好的應用前景。

電網調控系統叢集分布式實時資料庫的關鍵技術

表2 多機橫向擴充實時庫更新性能測試

基于該實時資料庫開發了某地區級配電網自動化主站系統,對市區及13個縣的配電網進行調控。系統由60多個節點組成,監控資料點數達200萬,投運兩年多以來,系統運作穩定可靠,性能優異,驗證了上述方案的可行性。

5 結論

實時資料庫是電網監控系統軟體平台中的核心、基礎元件,平台和應用的資料都存放在實時資料庫中。電網監控系統的性能要求和分布式特點決定了實時資料庫的實時性和一緻性是其最重要的特征。在這兩個問題上,本文充分考慮了相關的解決方案,同時采用緊耦合通路、原生的層次結構都極大提高了系統的性能,以及開發、維護、展示的友善性。

實時庫的現有功能已經很好地滿足了電力實時監控的需求,在此基礎上,下一步将在以下方面展開工作:

1)實時庫的橫向和縱向裁剪。考慮橫向從表、縱向從字段角度進行資料庫的裁剪,并支援這些裁剪後的庫的共享記憶體加載和與完整庫方式一樣的程式通路。

2)考慮到電網三、四區的Web也需要通路實時庫中的資料,是以提供了多種其他程式設計語言的接口,實作遠端過程調用(remote procedure call, RPC)方式的實時庫直接通路。圖資料庫的資料模型與電力系統網絡結構具有自然的相似性,可對電力系統拓撲結構等進行直覺表達,且更易擴充,也是後續發展的方向。

按照本文方案實作的實時資料庫滿足了電網監控的需求,随着資料庫容量的擴大、browser/server和client/server開發的互相融合,實時資料庫具有較好的擴充性和廣泛适應性,應用前景良好。

本文編自2023年第1期《電氣技術》,論文标題為“電網調控系統叢集分布式實時資料庫關鍵技術”,作者為張少波、姚陽春 等。

繼續閱讀