林艷燕,安 覓
(1.水利部交通運輸部國家能源局南京水利科學研究院,江蘇 南京 210029;2.南京水利水文自動化研究所,江蘇 南京 210012)
水利工程是為解決水文地理環境問題、滿足農業生產、城市生活、工業生產和水電等多種用水需求而進行的工程建設。水利工程的形式多樣,常見的水利工程包括:水庫、水電站、水閘、堤防、灌區等。隨著國家對水利工程安全的關注度提高,水利工程安全監管系統得到了越來越廣泛的應用,該類系統具有多領域交叉性、多系統集成性、高度可靠性、靈活性和可定制性、以及用戶友好性等領域特征。
現階段,很多的水利工程安全監管系統仍然采用單體架構。隨著業務增長,系統規模不斷擴大,導致系統難以擴展和升級。針對水利工程安全監管平臺的特點,微服務架構能夠通過服務拆分,服務治理,服務編排等相關技術,解決常規水利工程單體應用無法解決的問題。
(1)通過微服務拆分提高水利工程安全監管平臺的可擴展性與可維護性。由于水利工程安全監管平臺需要對水利工程建設、運行、維護等各個環節進行全周期、全鏈條的監管,因此系統的功能模塊非常多,需要不斷擴展和維護。微服務通過拆分單體應用,形成具有特定功能的單個微服務,每個服務單元都有明確的職責和功能,易于擴展和維護。
(2)通過微服務治理提升平臺的彈性和可靠性。由于水利工程安全監管平臺需要實時監測和處理大量的數據和信息,系統的負載可能會波動較大,需要具備彈性和可靠性。微服務架構能夠實現服務的自動伸縮和容錯機制,保證系統能夠穩定運行。
(3)利用服務編排提高平臺的靈活性和可定制性。由于水利工程安全監管平臺需要與多個數據和信息源進行集成和交互,不同的監管和管理需求也可能不同,因此需要具備靈活性和可定制性。微服務架構能夠將不同的服務單元組合成不同的應用程序,滿足不同的監管和管理需求。
微服務劃分理論是指將微服務劃分成獨立的服務的方法和原則,通過遵循這些原則和方法[1-2],可以使得微服務系統具有更高的可維護性、可擴展性、可用性和容錯性,從而更好地滿足業務需求。表1為常見的微服務劃分原則。

表1 微服務劃分原則
依據水利工程安全監管的需求,結合微服務劃分理論,平臺可劃分為網關服務、數據匯集微服務、基礎信息微服務、水文監測微服務、安全監測微服務、分析預警微服務、視頻圖像監測微服務、運行維護微服務、系統權限微服務。這些微服務共同構成了水利工程安全監管平臺的核心服務體系,每個微服務都有著不同的功能和作用,從數據采集、處理、分析、預警到管理,以及用戶權限控制等方面全面覆蓋了水利工程安全監管平臺的各個方面。微服務之間相互協作,共同完成水利工程的監管和管理工作,提高平臺的可擴展性、可維護性和可重用性。
網關服務:網關是水利工程安全監管平臺的入口,負責接收和轉發所有外部請求,并進行路由和負載均衡。它還可以提供一些安全認證、授權、限流、日志記錄等基礎功能。
數據匯集微服務:數據匯集微服務負責收集和匯總水利工程安全監管平臺的各種數據,包括水文監測數據、安全監測數據、視頻圖像數據等。它可以將這些數據保存到數據庫或發送到其他微服務進行進一步處理。
基礎信息微服務:基礎信息微服務負責管理水利工程的基礎信息,包括水庫、閘門、泵站、水文站等各種設施的基本屬性、位置、狀態等信息。提供查詢、添加、刪除、修改等基礎信息管理功能。
水文監測微服務:水文監測微服務負責收集、處理和分析水文監測數據,包括水位、流量、水質等指標。實現實時監測、歷史數據查詢、異常數據報警等功能。
安全監測微服務:安全監測微服務負責收集、處理和分析水利工程的安全監測數據,包括結構變形、滲流壓力、振動等指標。實現實時監測、歷史數據查詢、異常數據報警等功能。
分析預警微服務:分析預警微服務負責對水文監測和安全監測數據進行分析和預警,及時發現水利工程可能存在的問題,并給出相應的處理建議,根據不同的預警級別自動觸發相關的應急預案。
視頻圖像監測微服務:視頻圖像監測微服務負責收集、處理和分析水利工程的視頻圖像數據,包括攝像頭拍攝的實時畫面、錄像和照片等。實現實時監測、歷史數據查詢、異常數據報警等功能。
運行維護微服務:運行維護微服務可實現水利工程的運行維護,包括設備維修養護、巡檢管理等。提供設備管理、維修記錄、巡檢計劃、維修報告等功能。
系統權限微服務:系統權限微服務負責管理用戶的權限和角色,包括用戶管理、菜單管理、角色分配、權限驗證等功能。
2.1.1總體架構
平臺面向流域/單一水利工程安全監測管理建設需求,以數字映射手段實現業務化應用。按照“大平臺設計,產品化開發,分服務建設,模塊化鏈接”建設原則[4],形成可復用產品,預留后期擴展子系統及功能。如圖1所示,平臺分為4層。

圖1 平臺總體架構
(1)基礎設施層:利用水利工程現地機房或云中心的基礎設施,在統一資源分配管理下搭建本平臺。基礎設施層可實現監測數據的集中匯集為平臺安全防護提供基礎設施保障。利用現地測控單元、集約化監測裝備采集水利工程多要素信息,通過網絡交互技術與底層設備、傳感器相連接,利用信息化基礎設備為監測數據提供存儲與管理介質。
(2)數據資源層:針對平臺建設中需要用到的水利工程安全監管基礎數據,水文監測數據,工程安全監測數據,運行維護數據。數據資源層為平臺服務層提供標準化的數據環境。
(3)平臺服務層:平臺服務層可劃分為基礎組件、微服務組件和業務服務。基礎組件為平臺單個微服務使用到的基礎依賴;微服務組件包括服務注冊組件,跨服務調用組件等,利用微服務組件可實現微服務治理;業務服務組件為拆分后的各業務服務。最終所有的服務通過網關統一發布。
(4)終端服務層:終端服務層通過API網關調用平臺的各類服務接口,實現大屏、PC、移動端等多形式的終端應用。
2.1.2技術架構
平臺采用前后端分離技術架構,后臺采用SpringBoot開發單個微服務,按業務劃分服務,可實現服務間的實現靈活組裝。利用Spring Cloud Alibaba技術棧相關的服務治理組件(gateway、nacos、openfeign)實現服務的負載均衡注冊,統一發布和跨服務調用。
前臺基于vue3+vite+Type Script等前沿技術開發,保障系統性能界面樣式為采用業內領先的組件庫開發,符合大眾使用習慣以及審美。
圖2為平臺的技術架構圖。微服務分為基礎服務集群和業務服務集群,微服務注冊至配置注冊中心,由網關作為所有服務的統一出口。使用Springboot Admin實現服務運行狀態的監控,使用SkyWalking實現服務的鏈路追蹤。利用Dev Ops相關技術棧實現持續集成。

圖2 平臺技術架構
2.2.1服務注冊與服務發現
平臺利用nacos實現服務的注冊與統一的配置管理。跨服務調用時,各微服務會自動的在nacos上拉取服務列表。只需在接口類上加上@Feign Client注解即可實現Feign接口的定義,利用將單個服務的公共方法暴露出來形成通用接口,可供其他服務調用。平臺的Feign接口主要分為兩類:
(1)業務微服務接口:各業務服務中的接口有一些公共方法可以暴露出來供其他服務調用,通過定義業務接口類暴露單個服務的接口,平臺采用一個微服務對應一個接口類的形式,例如水文監測微服務定義IWater Service接口類,暴露站點的時段監測數據,時段日數據等通用服務接口。如圖3所示。

圖3 水文監測微服務接口代碼段
(2)第三方服務接口:從外部接入的服務接口,該類接口需要經過統一的鑒權后調用。如通過第三方氣象平臺接入的氣象預警接口。如圖4所示。
2.2.2服務網關實現
在網關微服務中引入spring-cloud-starter-gateway依賴后,平臺可以使用gateway組件提供的相關功能,本平臺主要使用以下4個方面的功能:
(1)API鑒權與token續期:平臺鑒權與token續期的流程如圖5所示,用戶登陸平臺后,登錄接口為白名單接口,平臺直接由網關轉發至系統權限微服務進行驗證,返回結果給用戶,同時將token、用戶具備的區域、站點等權限信息存儲在redis中,并設置token有效期。除白名單之外,用戶所有請求都要攜帶token,請求經過網關濾器后,通過token在redis中去拿取權限信息,同時對于鑒權成功的接口延長token時間。

圖5 網關鑒權與token續期業務邏輯
(2)服務轉發:在配置文件中,通過spring.cloud.gateway.routes屬性配置路由規則。每個路由規則由id、uri和可選的predicates、filters等屬性組成。id是該路由規則的唯一標識,uri指定目標服務的地址。pridicates用于匹配請求,filters用于對請求進行修改或過濾。
(3)權限參數注入:實現Gateway過濾器接口,攔截需要進行參數注入的服務接口,自動對token的解析,從redis中拿到用戶的權限信息,通過此種方式可實現自動將權限參數注入至服務接口中,實現非侵入式參數注入。如圖6所示。

圖6 網關參數注入關鍵代碼段
2.2.3業務微服務開發
單個微服務采用springboot開發,利用持久層框架mybatisPlus的databaseId屬性實現一套平臺對多廠商的數據庫的支持,基于Sharding Sphere根據項目需求實現多種數據分庫分表策略,滿足大數據量查詢效率。
接口開發方面,充分利用反射、數據庫表存儲json字段,通用sql語句等方式實現通用的服務接口,以水利工程對象的維護為例,設計維護水利對象的功能接口利用hydro Type字段傳入水利對象的類型,以此實現一個接口可以維護多種類型的水利對象。
2.2.4平臺自動化部署
水利工程軟件的運行往往伴隨著工程的實施產生需求的更改,為了能夠快速相應需求,平臺采用持續集成持續交付的方式實現軟件的自動化構建與部署。結合版本控制工具(SVN/GIT),項目構建工具(如Jenkins)和部署工具(如Docker)等技術,以實現自動化構建、測試和部署軟件的流程。通過自動化的部署提高了部署的效率節約了人力成本,為項目的實施提供了有力的保障。
在實施新項目時,需要結合項目的實際情況部施相應的平臺微服務和數據庫,以兩種不同類型的項目說明。見表2。

表2 平臺應用說明
車馬碧水庫綜合業務應用系統構建面向樞紐管理中心和現地站的水庫綜合信息系統,為車馬碧水庫工程日常運行管理工作提供服務。主要功能模塊包括工程基礎信息、安全監測、水質監測、水情監測等。
該系統使用達夢數據庫實現國產化部署,使用到的平臺微服務見表2,圖7為該系統的功能界面截圖。

圖7 車馬碧水庫系統截圖
基于工程基于水利工程安全監管平臺開發海安重點閘站孿生系統,該系統利用多維護信息可視化模擬仿真技術[9],利用虛擬現實,GIS技術,全景影像,遙感等技術,開發海安重點閘站二三位一體化模擬交互系統,實現區域場景、典型工程的二三位一體化建模與全景展示,集成區域相關信息進行綜合展示和三維漫游交互,模擬水閘歷史啟閉過程,提高流域多維度信息模擬展示與可視化交互能力。系統主要關注水利工程的工情監測數據,使用mysql8數據庫,在Windows操作系統上部署。如圖8所示。

圖8 海安重點閘站數字孿生工程水閘歷史啟閉過程截圖
為解決傳統水利工程安全監管系統的瓶頸問題,本文對水利工程安全監管領域特征進行分析并結合微服務相關技術提出了基于微服務架構的水利工程安全監管平臺,探索了微服務架構的應用和相關技術的融合,為水利行業的安全管理和監督提供了一種創新的解決方案。平臺以其模塊化、可擴展和靈活的特點,為水利工程管理者提供更高效、更精確的監管手段,從而提升水利工程的安全水平。應用結果表明平臺能夠應用在不同類別的水利工程應用系統中,實現軟件的快速開發和部署。下一階段將進一步提高平臺的安全性和可靠性,以確保用戶數據的保密性和完整性。