李培聰 ,袁明道 ,徐云乾 ,李田貴
(1.廣東省水利水電科學(xué)研究院,廣東 廣州 510635;2.廣東省大壩安全技術(shù)管理中心,廣東 廣州 510635)
智慧水利是新階段水利高質(zhì)量發(fā)展的重要標志,隨著人工智能、大數(shù)據(jù)、云計算、物聯(lián)網(wǎng)與移動互聯(lián)等新一代信息技術(shù)的發(fā)展,智慧水利體系的構(gòu)建,數(shù)字孿生水利工程的建設(shè)成為可能,同時在工程設(shè)計、建設(shè)、運行中,全要素全過程的感知、模擬、分析、預(yù)警的數(shù)字化和智能化需求日益增強,相關(guān)平臺迭代優(yōu)化也逐漸加快。
構(gòu)建安全監(jiān)測智能平臺是實現(xiàn)智慧水利的關(guān)鍵一環(huán),為工程管理提供全過程、全要素信息,是水利工程安全監(jiān)測最基本和最重要的支撐。20 世紀 90 年代,葛洲壩船閘、小浪底大壩等工程開始嘗試應(yīng)用自動化監(jiān)測系統(tǒng)采集監(jiān)測數(shù)據(jù)[1];2000 年以后,由于存儲數(shù)據(jù)容量越來越大,存儲內(nèi)容媒體形式不再只是單一的文本或數(shù)據(jù),涉及到文本、圖形、圖像等媒體,因此,三峽大壩[2]、小浪底大壩[3]等工程逐漸在現(xiàn)有系統(tǒng)基礎(chǔ)上進行數(shù)據(jù)庫優(yōu)化;“十三五”以來,隨著人工智能、識別技術(shù)及軟硬件的快速發(fā)展,水利工程各類平臺系統(tǒng)開始從數(shù)字水利向智慧水利發(fā)展,GIS 綜合展示[4]、BIM 模型構(gòu)建[5]、圖像水位識別[6]等功能開始在各類平臺系統(tǒng)中應(yīng)用。
然而,隨著用戶需求的增加,安全監(jiān)測智能平臺功能日漸增多,應(yīng)用程序日趨龐大復(fù)雜,迭代周期也日益縮短,以往單體式結(jié)構(gòu)平臺已經(jīng)無法滿足智慧水利快速發(fā)展的需求。因此,目前安全監(jiān)測智能平臺的一個發(fā)展趨勢是將整體的系統(tǒng)拆分成獨立的業(yè)務(wù)模塊,每個業(yè)務(wù)模塊獨立運行,共同構(gòu)建整個平臺的微服務(wù)基礎(chǔ)架構(gòu),提高平臺開發(fā)、維護、迭代更新的效率。
本研究將微服務(wù)基礎(chǔ)架構(gòu)應(yīng)用于安全監(jiān)測智能平臺中,通過業(yè)務(wù)拆分和服務(wù)封裝等構(gòu)建一個服務(wù)之間互相協(xié)調(diào)、配合,能獨立地部署到生產(chǎn)環(huán)境、類生產(chǎn)環(huán)境中,具備高可拓展性及快捷部署的安全監(jiān)測智能平臺。
微服務(wù)基礎(chǔ)架構(gòu)是區(qū)別于單體式架構(gòu)的平臺開發(fā)方法[7],相比單體式架構(gòu),微服務(wù)技術(shù)的松耦合式結(jié)構(gòu)可靠性高,迭代更新快,同時具備更好的可擴展性[8]。安全監(jiān)測智能平臺結(jié)合監(jiān)測、管理、預(yù)警等工作,通過劃分不同業(yè)務(wù)模塊,形成獨立運行的各服務(wù),服務(wù)之間采用基于 TCP/IP 傳輸協(xié)議中應(yīng)用層的 http 通信協(xié)議進行通信[9],各服務(wù)可在不影響整體系統(tǒng)運行的情況下修改,運行,停止[10],實現(xiàn)高內(nèi)聚和低耦合。微服務(wù)架構(gòu)如圖1 所示。
圖1 微服務(wù)架構(gòu)
采用微服務(wù)架構(gòu)的主要難點在于顆粒度的最優(yōu)劃分:顆粒度劃分過細,容易導(dǎo)致服務(wù)數(shù)量倍增,加劇相互之間協(xié)調(diào)、配合、通信的復(fù)雜程度;顆粒度劃分過粗,則無法實現(xiàn)系統(tǒng)的解耦,不同服務(wù)會存在較多的重復(fù)功能與代碼。因此,采用領(lǐng)域驅(qū)動設(shè)計(DDD)的方法進行服務(wù)劃分。DDD 是一種處理復(fù)雜系統(tǒng)架構(gòu)的設(shè)計方法,通過業(yè)務(wù)需求構(gòu)建領(lǐng)域模型,控制業(yè)務(wù)的復(fù)雜性,將復(fù)雜業(yè)務(wù)領(lǐng)域簡單化,實現(xiàn)顆粒度劃分[11]。
本研究從大壩安全監(jiān)測及工程運行管理的實際需求出發(fā),控制單個業(yè)務(wù)的復(fù)雜性,合理劃分領(lǐng)域邊界,從業(yè)務(wù)出發(fā)的領(lǐng)域驅(qū)動設(shè)計結(jié)構(gòu)圖如圖2 所示。
圖2 領(lǐng)域驅(qū)動設(shè)計結(jié)構(gòu)圖
微服務(wù)架構(gòu)下,各微服務(wù)可部署在不同的服務(wù)器上,也可部署在相同服務(wù)器的不同容器上,因此,數(shù)據(jù)管理也是主要難點,目前通常采用一庫一服或一庫多服 2 種方式:一庫多服是常用的方式,即 1 個數(shù)據(jù)庫可對應(yīng)多個模塊;一庫一服,即每個微服務(wù)準備 1 個單獨的數(shù)據(jù)庫。2種方式的部署模式如圖3 所示。
圖3 數(shù)據(jù)庫部署模式
一庫多服存在以下問題:1) 數(shù)據(jù)庫出現(xiàn)問題,會導(dǎo)致整批服務(wù)全部停止;2) 程序編寫中存在數(shù)據(jù)間的依賴性大、耦合性高的部分,不利于后續(xù)拓展;3) 無法針對某一個服務(wù)進行精準優(yōu)化或擴展。而一庫一服模式在數(shù)據(jù)管理上可保證共享數(shù)據(jù)的全局一致性,解決跨流程服務(wù)組合時數(shù)據(jù)丟失的問題。因此本研究中的微服務(wù)框架采用一庫一服模式。
微服務(wù)架構(gòu)下,服務(wù)組合通常采用編排和協(xié)同 2 種方式,將相互獨立的各服務(wù)按照需求組合成更為復(fù)雜、完善、滿足使用需要的整體模塊,其中:編排是根據(jù)業(yè)務(wù)流程處理順序,通過中心服務(wù)組織多個服務(wù)的配合;協(xié)同通常是在沒有中心服務(wù)的情況下,所有服務(wù)以需求或某一功能為核心的相互協(xié)作。2 種組合方式具體形式如圖4 所示。
圖4 服務(wù)組合方式
本研究根據(jù)安全監(jiān)測系統(tǒng)中監(jiān)測、預(yù)警等業(yè)務(wù)需要,以本業(yè)務(wù)為中心,同時調(diào)動其他業(yè)務(wù)協(xié)助的需求,以編排的方式,在中心服務(wù)的組織下,按照一定的順序調(diào)用配合的多個微服務(wù),并對配合服務(wù)返回的成果進行組合、轉(zhuǎn)換等加工,最終實現(xiàn)整體功能。中心服務(wù)與每個配合服務(wù)都有自己的緩存和數(shù)據(jù)庫,利用Rabbit 等分布式事件流平臺協(xié)調(diào)組合服務(wù)的調(diào)用,不需要持久化任何數(shù)據(jù)。
微服務(wù)架構(gòu)核心是模塊化,通過 DDD 的方法,合理劃分系統(tǒng)顆粒度,將系統(tǒng)拆分成合適的微服務(wù)。
目前,安全監(jiān)測智能平臺主要包括業(yè)務(wù)及基礎(chǔ)兩部分功能,其中業(yè)務(wù)功能主要包括監(jiān)測、預(yù)報、預(yù)警等內(nèi)容,而大壩主要監(jiān)測項目包括環(huán)境量、變形、滲流、應(yīng)力應(yīng)變及溫度等監(jiān)測項目。根據(jù)水利工程安全監(jiān)測需求及用戶使用情況,將安全監(jiān)測、用戶管理等作為單一領(lǐng)域模型,安全監(jiān)測智能平臺的基本架構(gòu)如圖5 所示。
圖5 安全監(jiān)測智能平臺服務(wù)基本架構(gòu)
數(shù)據(jù)管理體現(xiàn)為管理某一服務(wù)完成某一功能所需的數(shù)據(jù),在微服務(wù)架構(gòu)中包括數(shù)據(jù)及數(shù)據(jù)庫管理。本研究根據(jù)服務(wù)劃分,采用一服一庫的方式設(shè)計微服務(wù)的數(shù)據(jù)庫,限制對應(yīng)服務(wù)對其他服務(wù)數(shù)據(jù)庫的訪問能力,同時保證數(shù)據(jù)在全局上的一致性,并利用 Rabbit 等分布式事件流平臺協(xié)調(diào)組合服務(wù)的調(diào)用。
本監(jiān)測平臺涉及的獨立數(shù)據(jù)庫主要包括用戶、基礎(chǔ)、安全監(jiān)測、雨水情、運行管理、監(jiān)控數(shù)據(jù)云服務(wù)等數(shù)據(jù)庫,其中:監(jiān)控云服務(wù)器數(shù)據(jù)庫采用對象存儲方式,存儲和檢索非結(jié)構(gòu)化的數(shù)據(jù)和元數(shù)據(jù),通過 URL(Uniform Resource Locator)訪問一個空間及其中的文件,存儲對象包括非結(jié)構(gòu)化的圖像文件、視頻文件、日志、HTML 文件等。
本研究將整體系統(tǒng)拆分成獨立的業(yè)務(wù)模塊,每個模塊獨立運行的微服務(wù)共同構(gòu)建起整個系統(tǒng),微服務(wù)是一種以服務(wù)為中心的架構(gòu),服務(wù)之間通過定義明確的協(xié)議和接口進行通信,因此,可根據(jù)不同水庫的不同需求,針對某一個服務(wù)定制開發(fā),同時共用大部分服務(wù),提高開發(fā)效率。
微服務(wù)架構(gòu)在陽江大河水庫及廣州黃龍帶水庫體現(xiàn)明顯,2 座水庫均部署了安全監(jiān)測智能平臺,需求類似,因此僅需修改部分服務(wù)內(nèi)容即可部署,極大提高了開發(fā)效率。如 2 座水庫的接入數(shù)據(jù)方式不同,可采取以下方式部署:大河水庫通過設(shè)備廠商的物聯(lián)網(wǎng)平臺直接接入數(shù)據(jù),監(jiān)測平臺通過安全監(jiān)測服務(wù)中的數(shù)據(jù)定時抓取,滿足安全監(jiān)測數(shù)據(jù)的需求;黃龍帶水庫建立本地數(shù)據(jù)庫,數(shù)據(jù)由監(jiān)測設(shè)備直接通過部署在本地的采集服務(wù)傳回數(shù)據(jù)庫。
部署服務(wù)器環(huán)境為:Centos7 + Java+ Docker +MySQL + Redis。考慮平臺具備生產(chǎn)級應(yīng)用的移植性、穩(wěn)定性及跨平臺性等特性,選擇Docker 作為部署的應(yīng)用容器,主要開發(fā)環(huán)境及工具如表1 所示。
表1 開發(fā)工具表
微服務(wù)程序十分適合在 Docker 環(huán)境下部署。Docker 是基于容器的平臺,可以在物理或虛擬機,云服務(wù)上或混合環(huán)境(開發(fā)、測試及實際部署環(huán)境)中部署、應(yīng)用。
Docker 中主要有以下 3 個基本概念:1) 鏡像。鏡像是一個可執(zhí)行的程序包,是創(chuàng)建容器的基礎(chǔ),包括運行應(yīng)用程序所需要的所有內(nèi)容,包含代碼、通用類程序庫、環(huán)境變量和配置文件。2) 容器。容器是從鏡像創(chuàng)建的運行實例,可以被啟動、停止和拆除。3) 倉庫。倉庫是用來集中保存鏡像的存儲位置。
本研究在 Docker 環(huán)境下部署安全監(jiān)測智能平臺,主要部署步驟如圖6 所示。
圖6 主要部署步驟
4.2.1 監(jiān)測預(yù)警
根據(jù)業(yè)務(wù)流程處理的需要,以編排的方式,將安全預(yù)警服務(wù)作為中心服務(wù),調(diào)用多個微服務(wù),包括通過安全監(jiān)測、雨水情測報等服務(wù)提供數(shù)據(jù),結(jié)合氣象、水文要素對監(jiān)測數(shù)據(jù)進行分析,提供各類監(jiān)測預(yù)警情況,及時發(fā)布報警信息等,黃龍帶水庫相關(guān)業(yè)務(wù)平臺安全預(yù)警界面示例如圖7 所示。
4.2.2 智慧管理
將運行管理服務(wù)作為中心服務(wù),涉及移動端、視頻監(jiān)控等服務(wù),最終實現(xiàn)水庫日常管理所需的功能,包括巡視檢查、維修養(yǎng)護、檔案管理等功能,大河水庫智慧管理具體巡查結(jié)果界面示例如圖8 所示。
圖8 智慧管理
在陽江大河水庫、黃龍帶水庫應(yīng)用微服務(wù)架構(gòu)進行開發(fā)及部署,對比單體式架構(gòu)的平臺,微服務(wù)架構(gòu)部署快捷,可擴展性高,具體提升效果如下:
1) 快捷部署性。黃龍帶水庫在大河水庫安全監(jiān)測系統(tǒng)平臺基礎(chǔ)上,僅重新開發(fā)安全監(jiān)測服務(wù),其他服務(wù)在調(diào)整后優(yōu)先部署,極大縮短了開發(fā)周期。
2) 高可拓展性。微服務(wù)架構(gòu)的核心是模塊化,本次展示的 2 座水庫的服務(wù)部署在不同的服務(wù)器上,其中大河水庫的巡查模塊包括電腦端及手機移動端,具體業(yè)務(wù)需求確定及開發(fā)時間較久,因此是在平臺上線運行后,在保證其他服務(wù)仍可正常工作基礎(chǔ)上的一個拓展。
3)故障獨立處置。在開發(fā)過程中,各服務(wù)同步獨立開發(fā),因此,平臺日常運行中某一服務(wù)出現(xiàn)故障,可單獨處理,其他服務(wù)仍可正常工作。測試環(huán)境中,模擬大批量同時請求運行管理服務(wù)時,會導(dǎo)致運行管理服務(wù)數(shù)據(jù)庫并發(fā)死鎖,但其他服務(wù)仍可正常使用。
4)智能化。前端感知設(shè)備及平臺自動化智能化采集信息,如智能全站儀自動采集表面位移監(jiān)測數(shù)據(jù),極大減輕了水庫管理單位工作人員的負擔(dān),提升了水利管理自動化、智能化水平。
詳細闡述了水庫安全監(jiān)測這一復(fù)雜系統(tǒng)的解耦過程及平臺模塊化的服務(wù)組合的關(guān)鍵技術(shù),并將安全監(jiān)測智能平臺成功部署于陽江大河水庫,后續(xù)通過修改安全監(jiān)測服務(wù)及拓展其他服務(wù),快速應(yīng)用于黃龍帶水庫,與傳統(tǒng)軟件開發(fā)相比具有代碼復(fù)用率高、擴展性好、部署效率高等優(yōu)勢,使平臺可適應(yīng)各水庫大壩的安全監(jiān)測與運行管理需求,也可為其他系統(tǒng)平臺開發(fā)提供簡化開發(fā)流程,提高整體開發(fā)效率。后續(xù)可以根據(jù)監(jiān)測數(shù)據(jù)及實際使用需要融入智能分析服務(wù),實現(xiàn)大壩安全風(fēng)險預(yù)警分析,為管理決策提供依據(jù)。