林艷燕,安 覓
(1.水利部交通運輸部國家能源局南京水利科學(xué)研究院,江蘇 南京 210029;2.南京水利水文自動化研究所,江蘇 南京 210012)
水利工程是為解決水文地理環(huán)境問題、滿足農(nóng)業(yè)生產(chǎn)、城市生活、工業(yè)生產(chǎn)和水電等多種用水需求而進(jìn)行的工程建設(shè)。水利工程的形式多樣,常見的水利工程包括:水庫、水電站、水閘、堤防、灌區(qū)等。隨著國家對水利工程安全的關(guān)注度提高,水利工程安全監(jiān)管系統(tǒng)得到了越來越廣泛的應(yīng)用,該類系統(tǒng)具有多領(lǐng)域交叉性、多系統(tǒng)集成性、高度可靠性、靈活性和可定制性、以及用戶友好性等領(lǐng)域特征。
現(xiàn)階段,很多的水利工程安全監(jiān)管系統(tǒng)仍然采用單體架構(gòu)。隨著業(yè)務(wù)增長,系統(tǒng)規(guī)模不斷擴大,導(dǎo)致系統(tǒng)難以擴展和升級。針對水利工程安全監(jiān)管平臺的特點,微服務(wù)架構(gòu)能夠通過服務(wù)拆分,服務(wù)治理,服務(wù)編排等相關(guān)技術(shù),解決常規(guī)水利工程單體應(yīng)用無法解決的問題。
(1)通過微服務(wù)拆分提高水利工程安全監(jiān)管平臺的可擴展性與可維護(hù)性。由于水利工程安全監(jiān)管平臺需要對水利工程建設(shè)、運行、維護(hù)等各個環(huán)節(jié)進(jìn)行全周期、全鏈條的監(jiān)管,因此系統(tǒng)的功能模塊非常多,需要不斷擴展和維護(hù)。微服務(wù)通過拆分單體應(yīng)用,形成具有特定功能的單個微服務(wù),每個服務(wù)單元都有明確的職責(zé)和功能,易于擴展和維護(hù)。
(2)通過微服務(wù)治理提升平臺的彈性和可靠性。由于水利工程安全監(jiān)管平臺需要實時監(jiān)測和處理大量的數(shù)據(jù)和信息,系統(tǒng)的負(fù)載可能會波動較大,需要具備彈性和可靠性。微服務(wù)架構(gòu)能夠?qū)崿F(xiàn)服務(wù)的自動伸縮和容錯機制,保證系統(tǒng)能夠穩(wěn)定運行。
(3)利用服務(wù)編排提高平臺的靈活性和可定制性。由于水利工程安全監(jiān)管平臺需要與多個數(shù)據(jù)和信息源進(jìn)行集成和交互,不同的監(jiān)管和管理需求也可能不同,因此需要具備靈活性和可定制性。微服務(wù)架構(gòu)能夠?qū)⒉煌姆?wù)單元組合成不同的應(yīng)用程序,滿足不同的監(jiān)管和管理需求。
微服務(wù)劃分理論是指將微服務(wù)劃分成獨立的服務(wù)的方法和原則,通過遵循這些原則和方法[1-2],可以使得微服務(wù)系統(tǒng)具有更高的可維護(hù)性、可擴展性、可用性和容錯性,從而更好地滿足業(yè)務(wù)需求。表1為常見的微服務(wù)劃分原則。
表1 微服務(wù)劃分原則
依據(jù)水利工程安全監(jiān)管的需求,結(jié)合微服務(wù)劃分理論,平臺可劃分為網(wǎng)關(guān)服務(wù)、數(shù)據(jù)匯集微服務(wù)、基礎(chǔ)信息微服務(wù)、水文監(jiān)測微服務(wù)、安全監(jiān)測微服務(wù)、分析預(yù)警微服務(wù)、視頻圖像監(jiān)測微服務(wù)、運行維護(hù)微服務(wù)、系統(tǒng)權(quán)限微服務(wù)。這些微服務(wù)共同構(gòu)成了水利工程安全監(jiān)管平臺的核心服務(wù)體系,每個微服務(wù)都有著不同的功能和作用,從數(shù)據(jù)采集、處理、分析、預(yù)警到管理,以及用戶權(quán)限控制等方面全面覆蓋了水利工程安全監(jiān)管平臺的各個方面。微服務(wù)之間相互協(xié)作,共同完成水利工程的監(jiān)管和管理工作,提高平臺的可擴展性、可維護(hù)性和可重用性。
網(wǎng)關(guān)服務(wù):網(wǎng)關(guān)是水利工程安全監(jiān)管平臺的入口,負(fù)責(zé)接收和轉(zhuǎn)發(fā)所有外部請求,并進(jìn)行路由和負(fù)載均衡。它還可以提供一些安全認(rèn)證、授權(quán)、限流、日志記錄等基礎(chǔ)功能。
數(shù)據(jù)匯集微服務(wù):數(shù)據(jù)匯集微服務(wù)負(fù)責(zé)收集和匯總水利工程安全監(jiān)管平臺的各種數(shù)據(jù),包括水文監(jiān)測數(shù)據(jù)、安全監(jiān)測數(shù)據(jù)、視頻圖像數(shù)據(jù)等。它可以將這些數(shù)據(jù)保存到數(shù)據(jù)庫或發(fā)送到其他微服務(wù)進(jìn)行進(jìn)一步處理。
基礎(chǔ)信息微服務(wù):基礎(chǔ)信息微服務(wù)負(fù)責(zé)管理水利工程的基礎(chǔ)信息,包括水庫、閘門、泵站、水文站等各種設(shè)施的基本屬性、位置、狀態(tài)等信息。提供查詢、添加、刪除、修改等基礎(chǔ)信息管理功能。
水文監(jiān)測微服務(wù):水文監(jiān)測微服務(wù)負(fù)責(zé)收集、處理和分析水文監(jiān)測數(shù)據(jù),包括水位、流量、水質(zhì)等指標(biāo)。實現(xiàn)實時監(jiān)測、歷史數(shù)據(jù)查詢、異常數(shù)據(jù)報警等功能。
安全監(jiān)測微服務(wù):安全監(jiān)測微服務(wù)負(fù)責(zé)收集、處理和分析水利工程的安全監(jiān)測數(shù)據(jù),包括結(jié)構(gòu)變形、滲流壓力、振動等指標(biāo)。實現(xiàn)實時監(jiān)測、歷史數(shù)據(jù)查詢、異常數(shù)據(jù)報警等功能。
分析預(yù)警微服務(wù):分析預(yù)警微服務(wù)負(fù)責(zé)對水文監(jiān)測和安全監(jiān)測數(shù)據(jù)進(jìn)行分析和預(yù)警,及時發(fā)現(xiàn)水利工程可能存在的問題,并給出相應(yīng)的處理建議,根據(jù)不同的預(yù)警級別自動觸發(fā)相關(guān)的應(yīng)急預(yù)案。
視頻圖像監(jiān)測微服務(wù):視頻圖像監(jiān)測微服務(wù)負(fù)責(zé)收集、處理和分析水利工程的視頻圖像數(shù)據(jù),包括攝像頭拍攝的實時畫面、錄像和照片等。實現(xiàn)實時監(jiān)測、歷史數(shù)據(jù)查詢、異常數(shù)據(jù)報警等功能。
運行維護(hù)微服務(wù):運行維護(hù)微服務(wù)可實現(xiàn)水利工程的運行維護(hù),包括設(shè)備維修養(yǎng)護(hù)、巡檢管理等。提供設(shè)備管理、維修記錄、巡檢計劃、維修報告等功能。
系統(tǒng)權(quán)限微服務(wù):系統(tǒng)權(quán)限微服務(wù)負(fù)責(zé)管理用戶的權(quán)限和角色,包括用戶管理、菜單管理、角色分配、權(quán)限驗證等功能。
2.1.1總體架構(gòu)
平臺面向流域/單一水利工程安全監(jiān)測管理建設(shè)需求,以數(shù)字映射手段實現(xiàn)業(yè)務(wù)化應(yīng)用。按照“大平臺設(shè)計,產(chǎn)品化開發(fā),分服務(wù)建設(shè),模塊化鏈接”建設(shè)原則[4],形成可復(fù)用產(chǎn)品,預(yù)留后期擴展子系統(tǒng)及功能。如圖1所示,平臺分為4層。
圖1 平臺總體架構(gòu)
(1)基礎(chǔ)設(shè)施層:利用水利工程現(xiàn)地機房或云中心的基礎(chǔ)設(shè)施,在統(tǒng)一資源分配管理下搭建本平臺?;A(chǔ)設(shè)施層可實現(xiàn)監(jiān)測數(shù)據(jù)的集中匯集為平臺安全防護(hù)提供基礎(chǔ)設(shè)施保障。利用現(xiàn)地測控單元、集約化監(jiān)測裝備采集水利工程多要素信息,通過網(wǎng)絡(luò)交互技術(shù)與底層設(shè)備、傳感器相連接,利用信息化基礎(chǔ)設(shè)備為監(jiān)測數(shù)據(jù)提供存儲與管理介質(zhì)。
(2)數(shù)據(jù)資源層:針對平臺建設(shè)中需要用到的水利工程安全監(jiān)管基礎(chǔ)數(shù)據(jù),水文監(jiān)測數(shù)據(jù),工程安全監(jiān)測數(shù)據(jù),運行維護(hù)數(shù)據(jù)。數(shù)據(jù)資源層為平臺服務(wù)層提供標(biāo)準(zhǔn)化的數(shù)據(jù)環(huán)境。
(3)平臺服務(wù)層:平臺服務(wù)層可劃分為基礎(chǔ)組件、微服務(wù)組件和業(yè)務(wù)服務(wù)?;A(chǔ)組件為平臺單個微服務(wù)使用到的基礎(chǔ)依賴;微服務(wù)組件包括服務(wù)注冊組件,跨服務(wù)調(diào)用組件等,利用微服務(wù)組件可實現(xiàn)微服務(wù)治理;業(yè)務(wù)服務(wù)組件為拆分后的各業(yè)務(wù)服務(wù)。最終所有的服務(wù)通過網(wǎng)關(guān)統(tǒng)一發(fā)布。
(4)終端服務(wù)層:終端服務(wù)層通過API網(wǎng)關(guān)調(diào)用平臺的各類服務(wù)接口,實現(xiàn)大屏、PC、移動端等多形式的終端應(yīng)用。
2.1.2技術(shù)架構(gòu)
平臺采用前后端分離技術(shù)架構(gòu),后臺采用SpringBoot開發(fā)單個微服務(wù),按業(yè)務(wù)劃分服務(wù),可實現(xiàn)服務(wù)間的實現(xiàn)靈活組裝。利用Spring Cloud Alibaba技術(shù)棧相關(guān)的服務(wù)治理組件(gateway、nacos、openfeign)實現(xiàn)服務(wù)的負(fù)載均衡注冊,統(tǒng)一發(fā)布和跨服務(wù)調(diào)用。
前臺基于vue3+vite+Type Script等前沿技術(shù)開發(fā),保障系統(tǒng)性能界面樣式為采用業(yè)內(nèi)領(lǐng)先的組件庫開發(fā),符合大眾使用習(xí)慣以及審美。
圖2為平臺的技術(shù)架構(gòu)圖。微服務(wù)分為基礎(chǔ)服務(wù)集群和業(yè)務(wù)服務(wù)集群,微服務(wù)注冊至配置注冊中心,由網(wǎng)關(guān)作為所有服務(wù)的統(tǒng)一出口。使用Springboot Admin實現(xiàn)服務(wù)運行狀態(tài)的監(jiān)控,使用SkyWalking實現(xiàn)服務(wù)的鏈路追蹤。利用Dev Ops相關(guān)技術(shù)棧實現(xiàn)持續(xù)集成。
圖2 平臺技術(shù)架構(gòu)
2.2.1服務(wù)注冊與服務(wù)發(fā)現(xiàn)
平臺利用nacos實現(xiàn)服務(wù)的注冊與統(tǒng)一的配置管理??绶?wù)調(diào)用時,各微服務(wù)會自動的在nacos上拉取服務(wù)列表。只需在接口類上加上@Feign Client注解即可實現(xiàn)Feign接口的定義,利用將單個服務(wù)的公共方法暴露出來形成通用接口,可供其他服務(wù)調(diào)用。平臺的Feign接口主要分為兩類:
(1)業(yè)務(wù)微服務(wù)接口:各業(yè)務(wù)服務(wù)中的接口有一些公共方法可以暴露出來供其他服務(wù)調(diào)用,通過定義業(yè)務(wù)接口類暴露單個服務(wù)的接口,平臺采用一個微服務(wù)對應(yīng)一個接口類的形式,例如水文監(jiān)測微服務(wù)定義IWater Service接口類,暴露站點的時段監(jiān)測數(shù)據(jù),時段日數(shù)據(jù)等通用服務(wù)接口。如圖3所示。
圖3 水文監(jiān)測微服務(wù)接口代碼段
(2)第三方服務(wù)接口:從外部接入的服務(wù)接口,該類接口需要經(jīng)過統(tǒng)一的鑒權(quán)后調(diào)用。如通過第三方氣象平臺接入的氣象預(yù)警接口。如圖4所示。
2.2.2服務(wù)網(wǎng)關(guān)實現(xiàn)
在網(wǎng)關(guān)微服務(wù)中引入spring-cloud-starter-gateway依賴后,平臺可以使用gateway組件提供的相關(guān)功能,本平臺主要使用以下4個方面的功能:
(1)API鑒權(quán)與token續(xù)期:平臺鑒權(quán)與token續(xù)期的流程如圖5所示,用戶登陸平臺后,登錄接口為白名單接口,平臺直接由網(wǎng)關(guān)轉(zhuǎn)發(fā)至系統(tǒng)權(quán)限微服務(wù)進(jìn)行驗證,返回結(jié)果給用戶,同時將token、用戶具備的區(qū)域、站點等權(quán)限信息存儲在redis中,并設(shè)置token有效期。除白名單之外,用戶所有請求都要攜帶token,請求經(jīng)過網(wǎng)關(guān)濾器后,通過token在redis中去拿取權(quán)限信息,同時對于鑒權(quán)成功的接口延長token時間。
圖5 網(wǎng)關(guān)鑒權(quán)與token續(xù)期業(yè)務(wù)邏輯
(2)服務(wù)轉(zhuǎn)發(fā):在配置文件中,通過spring.cloud.gateway.routes屬性配置路由規(guī)則。每個路由規(guī)則由id、uri和可選的predicates、filters等屬性組成。id是該路由規(guī)則的唯一標(biāo)識,uri指定目標(biāo)服務(wù)的地址。pridicates用于匹配請求,filters用于對請求進(jìn)行修改或過濾。
(3)權(quán)限參數(shù)注入:實現(xiàn)Gateway過濾器接口,攔截需要進(jìn)行參數(shù)注入的服務(wù)接口,自動對token的解析,從redis中拿到用戶的權(quán)限信息,通過此種方式可實現(xiàn)自動將權(quán)限參數(shù)注入至服務(wù)接口中,實現(xiàn)非侵入式參數(shù)注入。如圖6所示。
圖6 網(wǎng)關(guān)參數(shù)注入關(guān)鍵代碼段
2.2.3業(yè)務(wù)微服務(wù)開發(fā)
單個微服務(wù)采用springboot開發(fā),利用持久層框架mybatisPlus的databaseId屬性實現(xiàn)一套平臺對多廠商的數(shù)據(jù)庫的支持,基于Sharding Sphere根據(jù)項目需求實現(xiàn)多種數(shù)據(jù)分庫分表策略,滿足大數(shù)據(jù)量查詢效率。
接口開發(fā)方面,充分利用反射、數(shù)據(jù)庫表存儲json字段,通用sql語句等方式實現(xiàn)通用的服務(wù)接口,以水利工程對象的維護(hù)為例,設(shè)計維護(hù)水利對象的功能接口利用hydro Type字段傳入水利對象的類型,以此實現(xiàn)一個接口可以維護(hù)多種類型的水利對象。
2.2.4平臺自動化部署
水利工程軟件的運行往往伴隨著工程的實施產(chǎn)生需求的更改,為了能夠快速相應(yīng)需求,平臺采用持續(xù)集成持續(xù)交付的方式實現(xiàn)軟件的自動化構(gòu)建與部署。結(jié)合版本控制工具(SVN/GIT),項目構(gòu)建工具(如Jenkins)和部署工具(如Docker)等技術(shù),以實現(xiàn)自動化構(gòu)建、測試和部署軟件的流程。通過自動化的部署提高了部署的效率節(jié)約了人力成本,為項目的實施提供了有力的保障。
在實施新項目時,需要結(jié)合項目的實際情況部施相應(yīng)的平臺微服務(wù)和數(shù)據(jù)庫,以兩種不同類型的項目說明。見表2。
表2 平臺應(yīng)用說明
車馬碧水庫綜合業(yè)務(wù)應(yīng)用系統(tǒng)構(gòu)建面向樞紐管理中心和現(xiàn)地站的水庫綜合信息系統(tǒng),為車馬碧水庫工程日常運行管理工作提供服務(wù)。主要功能模塊包括工程基礎(chǔ)信息、安全監(jiān)測、水質(zhì)監(jiān)測、水情監(jiān)測等。
該系統(tǒng)使用達(dá)夢數(shù)據(jù)庫實現(xiàn)國產(chǎn)化部署,使用到的平臺微服務(wù)見表2,圖7為該系統(tǒng)的功能界面截圖。
圖7 車馬碧水庫系統(tǒng)截圖
基于工程基于水利工程安全監(jiān)管平臺開發(fā)海安重點閘站孿生系統(tǒng),該系統(tǒng)利用多維護(hù)信息可視化模擬仿真技術(shù)[9],利用虛擬現(xiàn)實,GIS技術(shù),全景影像,遙感等技術(shù),開發(fā)海安重點閘站二三位一體化模擬交互系統(tǒng),實現(xiàn)區(qū)域場景、典型工程的二三位一體化建模與全景展示,集成區(qū)域相關(guān)信息進(jìn)行綜合展示和三維漫游交互,模擬水閘歷史啟閉過程,提高流域多維度信息模擬展示與可視化交互能力。系統(tǒng)主要關(guān)注水利工程的工情監(jiān)測數(shù)據(jù),使用mysql8數(shù)據(jù)庫,在Windows操作系統(tǒng)上部署。如圖8所示。
圖8 海安重點閘站數(shù)字孿生工程水閘歷史啟閉過程截圖
為解決傳統(tǒng)水利工程安全監(jiān)管系統(tǒng)的瓶頸問題,本文對水利工程安全監(jiān)管領(lǐng)域特征進(jìn)行分析并結(jié)合微服務(wù)相關(guān)技術(shù)提出了基于微服務(wù)架構(gòu)的水利工程安全監(jiān)管平臺,探索了微服務(wù)架構(gòu)的應(yīng)用和相關(guān)技術(shù)的融合,為水利行業(yè)的安全管理和監(jiān)督提供了一種創(chuàng)新的解決方案。平臺以其模塊化、可擴展和靈活的特點,為水利工程管理者提供更高效、更精確的監(jiān)管手段,從而提升水利工程的安全水平。應(yīng)用結(jié)果表明平臺能夠應(yīng)用在不同類別的水利工程應(yīng)用系統(tǒng)中,實現(xiàn)軟件的快速開發(fā)和部署。下一階段將進(jìn)一步提高平臺的安全性和可靠性,以確保用戶數(shù)據(jù)的保密性和完整性。