陳亞軍 李黎 徐曉坤 張鵬
摘要:本文在闡述云計(jì)算微服務(wù)架構(gòu)和DevOps理念的基礎(chǔ)上,開發(fā)了一套水利水電工程安全監(jiān)測(cè)云平臺(tái),實(shí)踐表明:(1)基于云計(jì)算微服務(wù)框架研發(fā)的水利水電工程安全監(jiān)測(cè)云平臺(tái)功能豐富,滿足了監(jiān)測(cè)業(yè)務(wù)一線的功能需求,且該架構(gòu)具有擴(kuò)展性好、兼容性強(qiáng)、部署靈活的特點(diǎn),具有較強(qiáng)的應(yīng)用推廣價(jià)值。(2)基于DevOps理念降低了團(tuán)隊(duì)開發(fā)、測(cè)試、運(yùn)維的溝通成本以及運(yùn)維成本,提高了部署效率,同時(shí)降低了因運(yùn)行環(huán)境不同而帶來各種問題的概率,這一理念在系統(tǒng)開發(fā)中展現(xiàn)出極大的優(yōu)勢(shì),值得推廣。
關(guān)鍵詞:云計(jì)算;微服務(wù);DevOps;水利水電工程;安全監(jiān)測(cè)云平臺(tái)
中圖分類號(hào):TP311.52 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1007-9416(2020)03-0160-05
0 引言
自建國(guó)以后,國(guó)內(nèi)水利水電工程經(jīng)歷了跨越式發(fā)展,國(guó)內(nèi)現(xiàn)有大中小水庫8萬多座,其中絕大多數(shù)為小型水庫且修建于上世紀(jì)70年代左右,由于當(dāng)時(shí)筑壩技術(shù)限制加之年代久遠(yuǎn),較多水利水電工程都出現(xiàn)或多或少的問題。加之水利水電工程規(guī)模大、事關(guān)人民生命安全,失事后果嚴(yán)重。安全監(jiān)測(cè)作為保障水利水電工程安全平穩(wěn)運(yùn)行的最直接手段,重要性日益凸顯。同時(shí),為了響應(yīng)國(guó)家“互聯(lián)網(wǎng)+水利”、“水利補(bǔ)短板、強(qiáng)監(jiān)管”的號(hào)召,有必要運(yùn)用云計(jì)算、微服務(wù)等技術(shù)更新行業(yè)信息化應(yīng)用,提升行業(yè)信息化水平。本文將基于現(xiàn)在流行的云計(jì)算微服務(wù)架構(gòu)和DevOps理念研發(fā)水利水電工程安全監(jiān)測(cè)云平臺(tái)。
1 云計(jì)算微服務(wù)架構(gòu)及DevOps簡(jiǎn)介
1.1 云計(jì)算
云計(jì)算(Cloud Computing)是2006年由谷歌首次提出,隨后這一技術(shù)越發(fā)火熱,近年已慢慢深入人心,對(duì)傳統(tǒng)的商業(yè)模式和互聯(lián)網(wǎng)行業(yè)發(fā)展產(chǎn)生深遠(yuǎn)影響。依據(jù)IBM技術(shù)白皮書“Cloud Computing”的定義:“云計(jì)算是一種基于虛擬化技術(shù)構(gòu)建的一個(gè)系統(tǒng)平臺(tái)或者一種類型的應(yīng)用程序。一個(gè)云計(jì)算的平臺(tái)按需進(jìn)行動(dòng)態(tài)地部署(provision)、配置(configuration)、重新配置(reconfigure)以及取消服務(wù)(deprovision)等。云計(jì)算系統(tǒng)具有以下四個(gè)特征:(1)虛擬化;(2)提供服務(wù)質(zhì)量保證(QoS);(3)高可靠性、可用性和高性能;(4)自治性[1]。一般來講,云計(jì)算技術(shù)架構(gòu)通過對(duì)基礎(chǔ)資源虛擬化行程的資源池進(jìn)行統(tǒng)一調(diào)度和管理,從下到上為用戶提供三個(gè)層次的服務(wù):基礎(chǔ)設(shè)施即服務(wù)(IaaS)、平臺(tái)即服務(wù)(PaaS)、軟件即服務(wù)(SaaS)。
1.2 微服務(wù)架構(gòu)
微服務(wù)是近年較為熱門的軟件架構(gòu)[2-3],但目前缺乏統(tǒng)一的定義。根據(jù)Martin Fowler的描述:微服務(wù)架構(gòu)(micro service architecture)是一種架構(gòu)模式,它采用一組服務(wù)的方式構(gòu)建一個(gè)應(yīng)用,服務(wù)獨(dú)立部署在不同進(jìn)程、不同主機(jī)或不同容器中,服務(wù)間通過RPC、HTTP、消息、事件等方式通信,服務(wù)可以獨(dú)立部署、彈性伸縮,每個(gè)服務(wù)定義了明確的邊界,完成不同的功能。
對(duì)于傳統(tǒng)的單體應(yīng)用(monolith application)來說,整個(gè)系統(tǒng)具有多個(gè)功能模塊,整個(gè)系統(tǒng)可分為界面層、業(yè)務(wù)邏輯層和數(shù)據(jù)訪問層,所有的功能最終由一個(gè)獨(dú)立的系統(tǒng)提供。而對(duì)于微服務(wù)架構(gòu)則不同,整個(gè)系統(tǒng)按不同的功能和業(yè)務(wù)域劃分為不同的微服務(wù)(microservice),各個(gè)微服務(wù)實(shí)現(xiàn)各自的功能,彼此間通過HTTP、消息或RPC等進(jìn)行數(shù)據(jù)通信,整個(gè)系統(tǒng)內(nèi)部還存在注冊(cè)中心、監(jiān)控中心、配置中心以及網(wǎng)關(guān)等微服務(wù),眾多的微服務(wù)彼此相對(duì)獨(dú)立又彼此聯(lián)系形成一個(gè)整體。
目前業(yè)內(nèi)采用的微服務(wù)框架有Spring Cloud、Dubbo、Drop-wizard、Service Fabric等。作為新一代云計(jì)算框架,Spring Cloud為開發(fā)者提供了分布式系統(tǒng)開發(fā)所需的一整套組件,包括服務(wù)注冊(cè)發(fā)現(xiàn)Eureka、配置管理Config、服務(wù)熔斷Hystrix、網(wǎng)關(guān)路由管理Zuul、分布式session、JWT令牌、全局鎖、分布式事務(wù)的組建[4]。
1.3 DevOps理念
DevOps(Development和Operations)是一個(gè)關(guān)于組織文化、自動(dòng)化、持續(xù)監(jiān)控與共享等各元素的集合,是開發(fā)部門(Devlopment)、平臺(tái)運(yùn)維部門(Operations)和質(zhì)量管控部門(Quality Control)之間進(jìn)行溝通、協(xié)作的流程、方法和體系[5-6]。由于產(chǎn)品迭代越來愈快,對(duì)開發(fā)、測(cè)試和運(yùn)維之間配合和響應(yīng)要求越來越高,傳統(tǒng)軟件開發(fā)模式如瀑布模型、敏捷開發(fā)或精益開發(fā)等難以滿足快速的產(chǎn)品迭代。
專家曾用一個(gè)能力環(huán)來解釋DevOps的概念,如圖1所示。從能力環(huán)可看出,軟件的生命周期里的開發(fā)、測(cè)試、部署運(yùn)維等沒有明顯分界,可以做到無縫連接。通過Maven、Gitblit、JUnit、SonarQube、Docker容器、Kubernetes、Jenkins等各類工具,協(xié)同完成開發(fā)人員的代碼從提交,到代碼質(zhì)量的自動(dòng)檢測(cè),到自動(dòng)發(fā)布自動(dòng)部署,再到代碼運(yùn)行監(jiān)控,實(shí)現(xiàn)從開發(fā)、測(cè)試、運(yùn)維的閉環(huán),填補(bǔ)了團(tuán)隊(duì)內(nèi)部的信息鴻溝,實(shí)現(xiàn)了開發(fā)運(yùn)維一體化,改善了團(tuán)隊(duì)之間的協(xié)作關(guān)系。
1.4 DevOps的組成
DevOps的開發(fā)由以下幾個(gè)部分組成:需求及工作計(jì)劃、編碼、自動(dòng)化構(gòu)建、自動(dòng)化測(cè)試、自動(dòng)化發(fā)布、自動(dòng)化部署、自動(dòng)化運(yùn)維。
(1)需求及工作計(jì)劃:根據(jù)業(yè)務(wù)需求討論產(chǎn)品功能定位、產(chǎn)品功能模塊,完成產(chǎn)品原型設(shè)計(jì),確定產(chǎn)品開發(fā)計(jì)劃,并對(duì)開發(fā)計(jì)劃進(jìn)行WBS分解,確定項(xiàng)目進(jìn)度計(jì)劃。(2)編碼:開發(fā)人員根據(jù)需求分析說明書、產(chǎn)品原型設(shè)計(jì)稿等產(chǎn)品需求文檔PRD以及工作計(jì)劃和任務(wù)安排完成相應(yīng)工作。(3)自動(dòng)化構(gòu)建:利用項(xiàng)目構(gòu)建工具maven、jenkins等完成項(xiàng)目代碼的編碼、依賴管理、打包、構(gòu)建鏡像等工作。(4)自動(dòng)化測(cè)試:進(jìn)行代碼的所有測(cè)試工程并形成測(cè)試報(bào)告,包括單元測(cè)試、集成測(cè)試、接口測(cè)試、性能測(cè)試、UI測(cè)試、壓力測(cè)試以及安全測(cè)試等。(5)自動(dòng)化發(fā)布:將測(cè)試通過的軟件上傳至Docker鏡像倉庫,供其他人拉取使用。(6)自動(dòng)化部署:Docker鏡像先部署到測(cè)試環(huán)境,在部署到準(zhǔn)生產(chǎn)環(huán)境進(jìn)行用戶接受度測(cè)試,最后在部署到生產(chǎn)環(huán)境。(7)自動(dòng)化運(yùn)維:通過自動(dòng)化監(jiān)控工具、日志分析工具等對(duì)生產(chǎn)環(huán)境的Docker進(jìn)行監(jiān)控,對(duì)軟件的潛在BUG、性能瓶頸等進(jìn)行記錄,同時(shí)收集用戶新增、變更的需求,運(yùn)維人員將這些問題統(tǒng)一反饋至開發(fā)團(tuán)隊(duì),進(jìn)行下一循環(huán)的需求分析、計(jì)劃等節(jié)點(diǎn),重新迭代本產(chǎn)品。
常用的DevOps工具鏈體包括以下各類:
(1)計(jì)劃和項(xiàng)目管理工具:禪道、TeamLab、XPlanner+、Jira、Gantt Project、GitBlit、GitLab等;(2)編碼工具:IDEA、MyEclipse、HBuilder、Visual Studio Code等;(3)自動(dòng)化構(gòu)建工具:Jenkins、Maven、Gradle、Ant等;(4)自動(dòng)化測(cè)試工具:JUnit、SonarQube、TestNg、Selenium等;(5)自動(dòng)化發(fā)布工具:Docker、DockerHub、Harbor等;(6)自動(dòng)化部署工具:Kubernetes、Swarm、Fabric8等;(7)自動(dòng)化運(yùn)維工具:ELK(Elastic Search+LogStash+Kibana)、CollectD、Nagios。
2 水利水電工程安全監(jiān)測(cè)云平臺(tái)設(shè)計(jì)
2.1 系統(tǒng)總體架構(gòu)
水利水電工程安全監(jiān)測(cè)云平臺(tái)是利用物聯(lián)網(wǎng)、云計(jì)算、微服務(wù)架構(gòu)等現(xiàn)代信息技術(shù),通過集成大壩安全監(jiān)測(cè)的變形、滲流、溫度和應(yīng)力應(yīng)變等各類物聯(lián)傳感器,基于工程安全監(jiān)測(cè)日常業(yè)務(wù)需求,建立的面向多用戶多機(jī)構(gòu)的水利水電工程安全監(jiān)測(cè)云平臺(tái),實(shí)現(xiàn)水利水電工程安全監(jiān)測(cè)感知實(shí)時(shí)化、業(yè)務(wù)集成化和預(yù)警智能化。
系統(tǒng)總體架構(gòu)如圖2所示。
本系統(tǒng)整體框架包括采集感知層、網(wǎng)絡(luò)通信層、數(shù)據(jù)資源層、應(yīng)用服務(wù)層和界面層。
采集感知層是指監(jiān)控大壩安全狀態(tài)的各類物聯(lián)網(wǎng)設(shè)備,依監(jiān)測(cè)類型可包括變形、滲流、溫度和應(yīng)力應(yīng)變等,如應(yīng)力計(jì)、應(yīng)變計(jì)、鋼筋計(jì)、GNSS等大壩安全監(jiān)測(cè)儀器。
網(wǎng)絡(luò)通信層是指物聯(lián)網(wǎng)設(shè)備數(shù)據(jù)傳輸使用的各類基礎(chǔ)通信設(shè)施。
數(shù)據(jù)資源層主要用來存儲(chǔ)系統(tǒng)所有數(shù)據(jù)資源的核心部分,包括基礎(chǔ)數(shù)據(jù)、大壩安全監(jiān)測(cè)數(shù)據(jù)、巡檢數(shù)據(jù)、預(yù)警信息、知識(shí)庫等。
應(yīng)用服務(wù)層是指實(shí)現(xiàn)系統(tǒng)業(yè)務(wù)功能的,具體包括基礎(chǔ)信息管理、數(shù)據(jù)管理、成果展示等應(yīng)用服務(wù)。
界面層是指本系統(tǒng)的展示層面,包括瀏覽器web端、移動(dòng)端及大屏等。
基于云計(jì)算的微服務(wù)架構(gòu),本系統(tǒng)的軟件開發(fā)架構(gòu)如圖3所示。
平臺(tái)的后端各業(yè)務(wù)功能模塊自成一個(gè)微服務(wù),相對(duì)獨(dú)立,包括基礎(chǔ)信息微服務(wù)、安全監(jiān)測(cè)微服務(wù)、巡視檢查微服務(wù)、預(yù)警管理微服務(wù)等。各微服務(wù)后端采用Spring Boot框架開發(fā),前端統(tǒng)一由Vue.js集成。
2.2 系統(tǒng)功能設(shè)計(jì)
該平臺(tái)的功能模塊包括基礎(chǔ)信息管理、數(shù)據(jù)管理、成果展示、報(bào)表整編、計(jì)算分析、綜合評(píng)判、預(yù)警管理、巡視檢查管理、運(yùn)維管理、知識(shí)庫管理。本系統(tǒng)的功能結(jié)構(gòu)圖如圖4所示。
(1)基礎(chǔ)信息管理。本模塊主要實(shí)現(xiàn)本系統(tǒng)涉及的工程相關(guān)基礎(chǔ)信息、大壩安全監(jiān)測(cè)基礎(chǔ)信息的維護(hù)管理,具體包括水利水電工程的工程特性表,大壩安全監(jiān)測(cè)的測(cè)點(diǎn)信息、測(cè)點(diǎn)考證信息以及其他基礎(chǔ)信息等。(2)數(shù)據(jù)管理。本模塊實(shí)現(xiàn)安全監(jiān)測(cè)數(shù)據(jù)的維護(hù),包括數(shù)據(jù)遠(yuǎn)程采集管理、數(shù)據(jù)錄入、數(shù)據(jù)批量導(dǎo)入、數(shù)據(jù)自定義查詢導(dǎo)出、數(shù)據(jù)粗差分析等。數(shù)據(jù)采集利用自研的數(shù)據(jù)采集軟件,對(duì)接數(shù)據(jù)采集協(xié)議或數(shù)據(jù)采集http接口實(shí)現(xiàn)數(shù)據(jù)的遠(yuǎn)程加密觀測(cè)和采集參數(shù)配置。數(shù)據(jù)錄入針對(duì)少量數(shù)據(jù)提供錄入界面。批量數(shù)據(jù)導(dǎo)入實(shí)現(xiàn)數(shù)據(jù)的批量導(dǎo)入,包括文件模板管理、數(shù)據(jù)導(dǎo)入等。(3)成果展示。本模塊實(shí)現(xiàn)監(jiān)測(cè)分析成果的可視化展示,如圖形曲線、模擬動(dòng)畫以及三維可視化云圖等。(4)報(bào)表整編。本模塊實(shí)現(xiàn)對(duì)大壩安全監(jiān)測(cè)統(tǒng)計(jì)分析報(bào)表的模版編制、生成打印及導(dǎo)出分享等功能。(5)計(jì)算分析。本模塊實(shí)現(xiàn)大壩安全監(jiān)測(cè)涉及的專業(yè)計(jì)算,如統(tǒng)計(jì)回歸模型、相關(guān)性分析等工作。(6)綜合評(píng)判。本模塊基于大壩安全監(jiān)測(cè)的實(shí)測(cè)數(shù)據(jù)、檢查資料以及人工經(jīng)驗(yàn)等,運(yùn)用層次分析法、大壩安全評(píng)估模型等實(shí)現(xiàn)對(duì)大壩安全的實(shí)時(shí)綜合評(píng)估。(7)預(yù)警管理。本模塊基于綜合評(píng)判模塊產(chǎn)生的安全結(jié)論實(shí)時(shí)產(chǎn)生預(yù)警消息,并通過web端、App、短信等方式告知相關(guān)業(yè)務(wù)人員。具體包括預(yù)警模型配置、消息推送管理及預(yù)警日志管理。(8)巡視檢查管理。本模塊基于水工移動(dòng)巡檢app實(shí)現(xiàn)大壩例行巡檢的電子化巡查,依據(jù)配置好的巡查路線和任務(wù),手持移動(dòng)端app將巡檢中發(fā)現(xiàn)的滲水、裂縫、建筑物缺陷等問題拍照并做好記錄。(9)運(yùn)維管理。水工建筑物的日常維護(hù)包括裂縫和滲水的修補(bǔ)、壩面混凝土修補(bǔ)、消力塘修補(bǔ)等工作。本模塊對(duì)這些專項(xiàng)維護(hù)涉及的缺陷情況、維護(hù)時(shí)間、維護(hù)措施、實(shí)施單位等信息進(jìn)行管理。(10)知識(shí)庫管理。本模塊將水利水電安全監(jiān)測(cè)日常涉及的法律法規(guī)、國(guó)家技術(shù)規(guī)范、標(biāo)準(zhǔn)、案例和經(jīng)驗(yàn)等進(jìn)行電子化管理,實(shí)現(xiàn)企業(yè)內(nèi)部的知識(shí)和經(jīng)驗(yàn)的沉淀。
3 水利水電工程安全監(jiān)測(cè)云平臺(tái)應(yīng)用實(shí)踐
以下通過水利水電工程安全監(jiān)測(cè)云平臺(tái)具體實(shí)踐DevOps理念。
該平臺(tái)采用前后端分離的B/S架構(gòu),后端采用Spring Cloud微服務(wù)框架,前端采用Vue.js框架和IView組件,前后端通信基于JSON數(shù)據(jù),編碼風(fēng)格采用Restful API。
平臺(tái)始終貫徹DevOps理念,在開發(fā)、測(cè)試、運(yùn)維過程中集成了各類自動(dòng)化工具,且盡量采用開源工具構(gòu)建整個(gè)DevOps的工具鏈,不同階段包含以下工具,詳細(xì)工具鏈圖如圖5所示。
(1)開發(fā)階段:
項(xiàng)目管理工具:禪道PMS;
代碼管理工具:Git和GitLab;
項(xiàng)目構(gòu)建工具:Maven及私有倉庫Nexus;
持續(xù)集成工具:Jenkins;
(2)測(cè)試階段:
單元測(cè)試工具:JUnit;
代碼質(zhì)量檢測(cè)工具:SonarQube;
容器鏡像工具:Docker;
鏡像倉庫工具:Harbor;
軟件性能測(cè)試工具:JMeter;
Web功能測(cè)試工具:Selenium;