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