史磊, 劉釗, 徐輝, 汪瑩潔, 劉羨天
(1.國網(wǎng)寧夏電力有限公司,寧夏 銀川 750001;2.中電普瑞科技有限公司,北京 102200; 3.中電普瑞電力工程有限公司,北京 102200)
當(dāng)前我國大多數(shù)高壓直流輸電換流閥監(jiān)測系統(tǒng)基于客戶機(jī)/服務(wù)器(client/server, C/S)架構(gòu)運(yùn)行,各個(gè)部分的設(shè)備之間互相孤立,實(shí)時(shí)交互性差,而且信息傳遞速度較慢,在數(shù)據(jù)處理量較大時(shí)不利于數(shù)據(jù)管理和統(tǒng)計(jì),很難實(shí)現(xiàn)信息的即時(shí)查詢和貢獻(xiàn)等。基于瀏覽器/服務(wù)器(browser/server, B/S)架構(gòu)的體系易于維護(hù),軟件可擴(kuò)展性強(qiáng)[1]。
當(dāng)前大多數(shù)采用B/S架構(gòu)的電力設(shè)備都是基于單體架構(gòu)開發(fā)的。IT技術(shù)發(fā)展的過程中,單體架構(gòu)存在一些問題,當(dāng)設(shè)備規(guī)模逐漸增大,依賴于升級(jí)硬件的方式來提升容量和增加功能的方式已無法滿足大數(shù)據(jù)技術(shù)發(fā)展帶來的新技術(shù)應(yīng)用的問題[2]。微服務(wù)近年受到工業(yè)界的廣泛關(guān)注[3],其思想是將單體架構(gòu)系統(tǒng)方式按照業(yè)務(wù)功能和邏輯拆分成一個(gè)個(gè)獨(dú)立的單元,這些單元可以獨(dú)立開發(fā)設(shè)計(jì)以及部署和運(yùn)維,克服了單體架構(gòu)的緊耦合,實(shí)現(xiàn)了各個(gè)單元彼此之間互相配合協(xié)作,進(jìn)而實(shí)現(xiàn)最終的產(chǎn)品功能[4]。
為適應(yīng)大規(guī)模數(shù)據(jù)處理、存儲(chǔ)和實(shí)時(shí)相互溝通的需求,解決信息孤島問題,本文提出基于微服務(wù)架構(gòu)的高壓直流輸電換流閥監(jiān)測系統(tǒng)軟件架構(gòu)設(shè)計(jì)。本文首先明晰用戶的需求,提出各功能以及模塊之間的邏輯關(guān)系,將業(yè)務(wù)劃分成單元形式;然后設(shè)計(jì)了微服務(wù)軟件中的人機(jī)交互界面、業(yè)務(wù)單元和數(shù)據(jù)庫管理等方面;最后對(duì)整個(gè)系統(tǒng)構(gòu)建需要用到的框架工具作了介紹。
當(dāng)前大多數(shù)采用B/S架構(gòu)的電力設(shè)備都是基于單體架構(gòu)開發(fā)的,典型單體架構(gòu)可分為:表示層、業(yè)務(wù)邏輯層和數(shù)據(jù)訪問層[5]。如圖1所示。
圖1 典型單體架構(gòu)
表示層是與用戶人機(jī)交互的接口,負(fù)責(zé)顯示可視化數(shù)據(jù)以及輸入數(shù)據(jù)或者控制指令。業(yè)務(wù)邏輯層負(fù)責(zé)請(qǐng)求相關(guān)的業(yè)務(wù)處理工作。數(shù)據(jù)訪問層根據(jù)業(yè)務(wù)對(duì)數(shù)據(jù)庫進(jìn)行相關(guān)操作。
隨著項(xiàng)目需求的不斷增加和更多工程師的加入,代碼庫會(huì)不斷增加,每次迭代項(xiàng)目增加或者減少功能都可能帶來隱藏的缺陷,不利于維護(hù)和擴(kuò)展。而用戶量的增長,使得阻塞的風(fēng)險(xiǎn)升高,系統(tǒng)的高耦合度同時(shí)也加大了調(diào)試的難度。此外,單體架構(gòu)使用一致的開發(fā)語言和框架,難以引入新框架與平臺(tái)技術(shù),導(dǎo)致系統(tǒng)的技術(shù)創(chuàng)新受到阻礙。
微服務(wù)是一種軟件架構(gòu),應(yīng)用于互聯(lián)網(wǎng)服務(wù)端軟件開發(fā),是由面向服務(wù)架構(gòu)(service oriented architecture, SOA)發(fā)展而來的[6]。微服務(wù)的設(shè)計(jì)思想是將單個(gè)應(yīng)用分解成若干小的服務(wù),每個(gè)服務(wù)自運(yùn)行,服務(wù)之間通過輕量級(jí)通信機(jī)制進(jìn)行信息交互。服務(wù)通過自動(dòng)化的方式獨(dú)立部署,不同服務(wù)可由不同的語言編寫。在設(shè)計(jì)微服務(wù)時(shí)遵循的原則是將整個(gè)服務(wù)拆分成多個(gè)子服務(wù),子服務(wù)圍繞特定的具體業(yè)務(wù),且每個(gè)子服務(wù)可以選擇適合于相應(yīng)技術(shù)的方式,形成高度內(nèi)聚的自治單元[7]。
微服務(wù)架構(gòu)的優(yōu)勢是可以互相獨(dú)立地部署模塊,隨著需求的增加,啟用越來越多的服務(wù),能夠減少對(duì)現(xiàn)有服務(wù)的影響。每個(gè)微服務(wù)可以單獨(dú)升級(jí),彼此間的依賴性弱,方便測試,因此具有更快的更新迭代周期。此外,部署相同規(guī)模的服務(wù),總成本少于單體架構(gòu)。
在高壓直流輸電系統(tǒng)中,換流站控制保護(hù)系統(tǒng)、閥基電子設(shè)備(valve base electronics, VBE)和晶閘管級(jí)觸發(fā)與監(jiān)測單元(thyristor trigger and monitor unit, TTMU)構(gòu)成換流閥的二次監(jiān)控系統(tǒng)[8]。VBE是晶閘管觸發(fā)以及在線監(jiān)測系統(tǒng)的核心組成部分,VBE需要將控制保護(hù)系統(tǒng)下發(fā)的觸發(fā)脈沖信號(hào)通過光纖發(fā)送至TTMU。VBE匯總和處理TTMU的回報(bào)信息,并發(fā)送至控制保護(hù)系統(tǒng),控保系統(tǒng)根據(jù)VBE上報(bào)的狀態(tài)來進(jìn)行保護(hù)[9]。上位機(jī)采用基于微服務(wù)思想B/S架構(gòu)設(shè)計(jì)的換流閥監(jiān)測系統(tǒng)軟件,用于管理VBE上傳的信息。
根據(jù)工程需求,高壓直流輸電換流閥監(jiān)測系統(tǒng)軟件包含如下功能模塊:閥開通狀態(tài)監(jiān)測模塊、晶閘管級(jí)故障信息模塊、FOP動(dòng)作信息模塊、VBE故障事件信息模塊、VBE自檢信息模塊和錄波信息模塊。本文設(shè)計(jì)的微服務(wù)架構(gòu)如圖2所示。
圖2 閥監(jiān)測系統(tǒng)微服務(wù)架構(gòu)
在圖2中,微服務(wù)包含用戶側(cè)、公共服務(wù)網(wǎng)關(guān)、微服務(wù)業(yè)務(wù)、數(shù)據(jù)收集和數(shù)據(jù)庫等。用戶側(cè)從移動(dòng)端或臺(tái)式機(jī)WEB端登陸。公共服務(wù)網(wǎng)關(guān)負(fù)責(zé)身份認(rèn)證和請(qǐng)求任務(wù)分發(fā)。微服務(wù)業(yè)務(wù)主要負(fù)責(zé)部署各種業(yè)務(wù)邏輯,包含了共有的業(yè)務(wù)邏輯和可添加和刪除的微服務(wù)。數(shù)據(jù)采集端采集來自于VBE上傳的信息,包括晶閘管級(jí)故障信息、FOP動(dòng)作信息、VBE故障事件信息、VBE自檢信息和錄波信息等。數(shù)據(jù)庫負(fù)責(zé)為各個(gè)微服務(wù)的功能提供數(shù)據(jù)支持。公共配置服務(wù)負(fù)責(zé)在分布式部署時(shí)解決配置繁瑣問題,并提供對(duì)外公共網(wǎng)關(guān)入口。
每個(gè)微服務(wù)模塊之間的通信通過Restful API接口互相連接,實(shí)現(xiàn)了模塊之間的功能解耦。對(duì)于設(shè)備的基礎(chǔ)功能方面,設(shè)立了公共微服務(wù),例如設(shè)備管理、實(shí)時(shí)監(jiān)控和用戶管理等。對(duì)于特殊的功能方面,設(shè)立了擴(kuò)展應(yīng)用,如果用戶有臨時(shí)需求,可以在原來的基礎(chǔ)上添加。本設(shè)備中的擴(kuò)展應(yīng)用包括了晶閘管級(jí)故障、FOP動(dòng)作、VBE故障事件、VBE自檢信息和錄波信息等處理模塊。
為了使用微服務(wù)的思想實(shí)現(xiàn)WEB服務(wù)的高壓直流換流閥狀態(tài)監(jiān)測系統(tǒng)軟件,本文使用Spring Cloud作為微服務(wù)框架。Spring Cloud構(gòu)建于Spring Boot之上[10],在設(shè)計(jì)時(shí)可以從資源的維度對(duì)系統(tǒng)進(jìn)行劃分,同時(shí)為每個(gè)資源設(shè)置特定的統(tǒng)一資源標(biāo)識(shí)符(uniform resource identifier, URI)。Spring Cloud同時(shí)搭建了微服務(wù)結(jié)構(gòu)所需要的功能,部署操作簡單,是業(yè)界使用較多的微服務(wù)框架。
換流閥監(jiān)測系統(tǒng)架構(gòu)技術(shù)選型如圖3所示。
圖3 換流閥監(jiān)測系統(tǒng)微服務(wù)架構(gòu)技術(shù)選型
解決方案如下:
(1) 服務(wù)注冊(cè)中心。選用Spring Cloud Eureka負(fù)責(zé)服務(wù)的注冊(cè)與發(fā)現(xiàn),很好地將各服務(wù)連接起來。
(2) 公共服務(wù)網(wǎng)關(guān)。選用智能路由Spring Cloud Zuul統(tǒng)一所有的API接口,實(shí)現(xiàn)服務(wù)網(wǎng)關(guān)。
(3) 服務(wù)負(fù)載均衡。選用Spring Cloud Ribbon將均衡負(fù)載邏輯封裝并運(yùn)行在客戶端中,將請(qǐng)求流量分發(fā)到不同的服務(wù)器。
(4) 公共配置中心。選用Spring Cloud Config讀取遠(yuǎn)程或本地倉庫的配置文件,集中統(tǒng)一管理配置信息。
(5) 斷路器。選用Spring Cloud Hystrix在分布式系統(tǒng)出現(xiàn)故障時(shí)隔離服務(wù)訪問點(diǎn),提高系統(tǒng)魯棒性。
(6) 微服務(wù)監(jiān)控。選用Spring Cloud Admin通過UI界面查看客戶端和環(huán)境信息等。
(7) 分布式鏈路跟蹤。選用Spring Cloud Sleuth實(shí)現(xiàn)微服務(wù)架構(gòu)中的鏈路追蹤。
(8) 斷路器監(jiān)控。選用Spring Cloud Hystrix Dashboard監(jiān)控?cái)嗦菲鳡顟B(tài)。
本文采用基于微服務(wù)思想的B/S架構(gòu)設(shè)計(jì)換流閥監(jiān)測系統(tǒng)軟件架構(gòu),實(shí)現(xiàn)了大規(guī)模數(shù)據(jù)存儲(chǔ)、處理以及分布式移動(dòng)辦公,避免了數(shù)據(jù)孤島現(xiàn)象。換流閥監(jiān)測系統(tǒng)的微服務(wù)架構(gòu)可以實(shí)現(xiàn)敏捷開發(fā)和部署、拆分應(yīng)用、細(xì)分業(yè)務(wù)邊界和按照業(yè)務(wù)范圍分配工作。通過Spring Cloud技術(shù)搭建系統(tǒng),為微服務(wù)系統(tǒng)架構(gòu)提供了標(biāo)準(zhǔn)化和全站式解決方案。在從容應(yīng)對(duì)業(yè)務(wù)發(fā)展的同時(shí),大大減少了開發(fā)成本,為系統(tǒng)的功能擴(kuò)展提供了良好的基礎(chǔ),有效推進(jìn)閥監(jiān)測系統(tǒng)軟件技術(shù)水平的進(jìn)步。