駱光磊,宋云濤
(1.中交第二航務工程勘察設計院有限公司,湖北 武漢 430000;2.長江南京航道工程局,江蘇 南京 210011)
隨著水運行業(yè)信息化建設的推進,針對航道工程的信息化管理系統(tǒng)不斷涌現(xiàn),通過信息化手段,可以快速地填報相關信息和管控施工過程,提高了工程的管理水平[1-2]。然而,由于航道工程施工周期長、影響因素多,施工和運維過程中往往存在頻繁的需求變更,傳統(tǒng)的單體式架構系統(tǒng)需要對整個系統(tǒng)統(tǒng)一變更和部署才能完成一次更新,消耗開發(fā)人員和設計人員的大量精力和時間;另外,隨著航道工程智能化的發(fā)展,工程信息化系統(tǒng)有了更多要求和標準,使得整個航道工程管控系統(tǒng)規(guī)模日益增大,傳統(tǒng)的單體架構在應對這種復雜系統(tǒng)時,不可避免地會產生性能降低、拓展性變差和維護困難的問題[3],限制了系統(tǒng)的實用性,最終導致系統(tǒng)難以推行。
為了適應當前航道工程項目的業(yè)務需求,信息化系統(tǒng)的架構升級成為了推進行業(yè)整體數(shù)字化、智能化的必要條件,另外,隨著當前工程建設領域對項目管控精細化要求的提升,BIM技術也成為了評判系統(tǒng)功能是否完善的重要標準。為此,以微服務架構搭建航道工程BIM綜合管理平臺,將整個系統(tǒng)切分為不同服務,引入BIM技術對航道工程進行建模,將工程中每個構件的設計、施工、運維階段信息全量仿真模擬[4],在保證工程方案安全準確的同時,進一步提高項目的管理水平。
微服務架構(Micro Service Architecture,MSA)是相對于單體架構提出的一種軟件架構方式,將單一的應用程序劃分成為多個微小的服務,即微服務[5],所有微服務注冊到服務中心并暴露相應的API接口,保證不同服務之間可以相互調用,進而實現(xiàn)系統(tǒng)的整體功能。微服務架構中,每個微服務在獨立的進程中運行,并且能夠獨立部署到生產環(huán)境中,實現(xiàn)了應用系統(tǒng)的并行開發(fā),大大提高了代碼開發(fā)效率,且高度的解耦性保證了整個系統(tǒng)的容錯性和兼容性,整個系統(tǒng)可以不拘泥于單一編程語言的實現(xiàn)。
目前行業(yè)主流微服務框架有阿里巴巴研發(fā)的Dubbo框架和Pivotal團隊的Spring Cloud框架,兩者各有其側重點[6]。Dubbo專注于服務治理,提供了高性能和透明化的RPC遠程服務調用方案,但是要構建出一個完整的微服務應用,還需要開發(fā)者整合網關、服務注冊、負載均衡等基礎應用;而Spring Cloud側重于對整個系統(tǒng)架構的整合,將微服務架構各個關鍵點的成熟技術和框架整合到Spring Cloud框架中[7],按照“約定優(yōu)先于配置”的原則,實現(xiàn)應用的快速搭建,減少了開發(fā)人員大量的配置工作。
總體上看,Spring Cloud框架在開發(fā)友好性上要優(yōu)于Dubbo框架,為提高系統(tǒng)的搭建效率和穩(wěn)定性,采用了微服務框架Spring Cloud搭建航道BIM平臺。
航道工程BIM綜合管理平臺是指利用BIM建模技術,精細化管理航道工程在設計階段、施工階段、運維階段的各個環(huán)節(jié),以信息化手段完成質量安全檢查、流程審批、文件歸檔等繁瑣操作,提升工程管理的效率。通過將航道工程中主要業(yè)務進行分解,利用Spring Cloud微服務框架對各服務進行治理,實現(xiàn)了系統(tǒng)的快速搭建,同時引入多種組件保證了平臺的易用性和穩(wěn)定性,最終形成了一套易開發(fā)、易部署、易維護的航道BIM平臺。
鑒于航道BIM平臺多業(yè)務特點,基于微服務架構實現(xiàn)應用系統(tǒng),系統(tǒng)總體架構圖如圖1。

圖1 系統(tǒng)總體架構圖Fig.1 Overall system architecture
系統(tǒng)從架構角度縱向切分為4個層級:表現(xiàn)層、基礎服務層、業(yè)務層和數(shù)據(jù)層,核心模塊為業(yè)務管理服務、流程管理服務、BIM模型服務、數(shù)據(jù)庫服務。
前端交互界面基于Vue.js框架實現(xiàn)與后臺的松散耦合,采用Nginx搭建網關實現(xiàn)轉發(fā)請求、過濾請求和負載均衡等功能;后端系統(tǒng)采用Spring Cloud技術將不同的業(yè)務分割成微服務,每個服務注冊到Zookeeper服務注冊中心,再通過Dubbo框架實現(xiàn)各個子服務之間的遠程調用;為避免各業(yè)務服務直接調用數(shù)據(jù)庫導致邏輯復雜和重復工作,基于MyBatis框架技術單獨建立數(shù)據(jù)庫服務,向外提供統(tǒng)一的數(shù)據(jù)訪問接口,實現(xiàn)業(yè)務服務與數(shù)據(jù)庫的通信;BIM模型服務集成了SuperMap三維GIS平臺[8],將BIM模型數(shù)據(jù)在PostgreSQL數(shù)據(jù)庫中建庫建表,利用數(shù)據(jù)關聯(lián)性打通了BIM模型與業(yè)務之間的數(shù)據(jù)隔離。
面對不斷變化的工程需求時,為搭建穩(wěn)定高效的航道工程BIM綜合管理平臺,研究設計了如下技術方案。
1)服務注冊中心與遠程調用
不同微服務之間雖然是高度解耦的,但是業(yè)務中不可避免地會存在數(shù)據(jù)傳遞或相互調用的需求,因此不同服務之間需要建立通信機制。本平臺采用Zookeeper和Dubbo作為服務間不同接口遠程調用的橋梁。
采用Zookeeper作為服務注冊中心,所有微服務通過配置注冊中心的IP和端口號,注冊到Zookeeper上,以便其他服務通過注冊中心查找該服務。通過Dubbo管理不同服務之間的遠程調用,Dubbo監(jiān)控消費方的調用行為,在Zookeeper上查找相應的服務提供方并調用接口,實現(xiàn)兩個服務之間的遠程調用。
使用時,在服務消費方創(chuàng)建遠程服務調用類,并將服務提供者的接口用@Reference注解標注,Dubbo自動將與消費方接口同名的遠程接口注入到此類中,在本服務其他模塊中調用該接口便可實現(xiàn)不同服務之間的遠程調用。
2)緩存方案
航道BIM平臺中各階段的業(yè)務數(shù)據(jù)龐雜,為了提升數(shù)據(jù)查詢效率,本平臺引入Redis緩存機制對數(shù)據(jù)進行快速查詢。Redis是一種NoSql數(shù)據(jù)庫,以鍵值對方式存儲數(shù)據(jù),利用Redis將已經查詢過的數(shù)據(jù)存儲在內存中,下次查詢首先在內存中查詢數(shù)據(jù),如果命中內存,則直接獲取數(shù)據(jù),避免了磁盤數(shù)據(jù)的讀取,顯著提升系統(tǒng)速度。
在Spring Cloud框架中整合Redis,首先在Maven中引入Redis依賴,并配置Redis數(shù)據(jù)庫的地址和端口等配置信息:在SpringCloud的啟動類中添加@EnableCaching注解開啟緩存,在查詢接口中添加@Cacheable注解讓該方法擁有Redis緩存,此時該方法每次查詢時都會先在Redis緩存中查找相關數(shù)據(jù)。
3)網關設計與負載均衡
不同微服務通常有不同的網絡地址或不同端口,為了向服務調用方提供統(tǒng)一且穩(wěn)定的服務入口,需要進行網關設計,在服務調用方和微服務之間加入網關,可實現(xiàn)無感知的調用服務,便于后期微服務的擴展和維護。
本平臺采用Nginx技術搭建API網關,利用Nginx的反向代理功能,將后端微服務暴露的網絡地址或API接口進行代理,實現(xiàn)統(tǒng)一的接口調用。Nginx的另一個重要功能是實現(xiàn)負載均衡,當同一個微服務部署到多個服務器時,可以通過負載均衡策略分發(fā)調用請求,避免某臺服務器荷載過大而產生阻塞現(xiàn)象。在Nginx服務器啟動前,修改配置文件,將需要代理的后端微服務添加到Nginx的代理服務server中,前端便可通過指定域名或url路徑調用微服務接口。
基于以上技術和框架,以長江航道綜合整治項目為實施對象,搭建了長江航道BIM綜合管理平臺,該平臺以微服務的方式實現(xiàn)了工作業(yè)務填報、工作流程審批、BIM模型交互等主要功能,涵蓋了工程設計階段、施工階段和運維階段的各類業(yè)務,可以滿足航道項目管理的多數(shù)場景,為航道工程管理提供高效手段。
服務接口是實現(xiàn)平臺功能的最小單元,每個接口承載一種業(yè)務需求,復雜的業(yè)務邏輯在接口內部實現(xiàn),接口調用方只需關注接口的輸入輸出。為適應航道項目各種業(yè)務需求,開發(fā)了數(shù)目眾多的服務接口,按接口類型分為4類:業(yè)務功能接口、工作流程接口、BIM模型接口和基礎服務接口,各系統(tǒng)主要模塊接口定義格式見表1。

表1 系統(tǒng)主要模塊接口定義Table 1 Interface definition of main modules of the system
1)業(yè)務管理功能
業(yè)務管理提供對各種業(yè)務數(shù)據(jù)的增刪改查、導入導出等功能,以及復雜業(yè)務的自動匯總、計算等邏輯功能。業(yè)務管理服務集成了工程各類基礎數(shù)據(jù)、進度管理、質量管控、計量支付、安全管理、運行數(shù)據(jù)監(jiān)控等多種航道項目常用功能,業(yè)務人員通過進入相應模塊進行業(yè)務快速填報,提升項目運行效率。
2)流程管理功能
流程管理是工程項目中的重要環(huán)節(jié),施工完成情況、質量審批、工程支付、設計圖紙審批等眾多業(yè)務都需要按照流程逐步進行,本平臺通過流程管理服務控制所有業(yè)務流程進度,按照流程設計、業(yè)務填報、觸發(fā)流程、流程審批的順序,完成業(yè)務數(shù)據(jù)的流程控制。
3)BIM管理功能
BIM管理功能是平臺對整個項目可視化的模塊,可以使用戶從多角度掌握模型狀態(tài)、進行碰撞檢查等工作;另外,通過將BIM模塊與業(yè)務服務關聯(lián),用戶可以通過每個構件查詢其關聯(lián)的業(yè)務信息和業(yè)務狀態(tài),并方便地對構件關聯(lián)的業(yè)務進行填報和流程審批工作,為用戶提供一種管理項目的新維度。BIM管理功能典型界面見圖2。

圖2 BIM平臺典型界面Fig.2 Typical interface of BIM platform
為解決傳統(tǒng)單體系統(tǒng)架構模塊復雜、可拓展性差等問題,研究設計了航道工程系統(tǒng)相關的系統(tǒng)架構及關鍵技術,將BIM技術引入系統(tǒng),搭建基于微服務架構的航道工程BIM綜合管理平臺,該平臺實現(xiàn)了系統(tǒng)的快速開發(fā)、快速部署、快速拓展,可根據(jù)實際工程需求不斷接入新服務模塊,為航道工程全生命周期管理提供高效手段。