王 坦 師宏波 黃經(jīng)國 王 軍 韓宇飛 代光輝 劉艷瓊 姬運達楊 陳 祝 杰 王東孝
1)中國北京 100045 中國地震臺網(wǎng)中心
2)中國杭州 310023 杭州敘簡科技股份有限公司
微服務(wù)的核心思想是,將應(yīng)用功能盡可能細地劃分成獨立的服務(wù),每個服務(wù)專注于單一具體的業(yè)務(wù)功能實現(xiàn),服務(wù)之間采用輕量級的通信機制(通常是基于HTTP 的Restful API)互相協(xié)調(diào)、互相配合,最終為用戶提供符合不同需求的功能服務(wù)(龍新征等,2017)。微服務(wù)架構(gòu)是一種架構(gòu)風(fēng)格,目的是將大型的、復(fù)雜的、長期運行的系統(tǒng)拆分為一組相互配合的服務(wù)。系統(tǒng)中每個微服務(wù)均可被獨立部署,各個微服務(wù)之間松耦合,每個微服務(wù)僅關(guān)注于完成一件任務(wù)并較好地完成該任務(wù)。與傳統(tǒng)的面向服務(wù)的架構(gòu)(SOA)相比,微服務(wù)架構(gòu)降低了系統(tǒng)的耦合性,提高了系統(tǒng)容錯性、伸縮性及可擴展性,具有易于迭代開發(fā)、業(yè)務(wù)擴展與持續(xù)交付的能力。
本文基于中國地震臺網(wǎng)中心地震臺站監(jiān)控運維平臺現(xiàn)狀,對平臺架構(gòu)進行調(diào)整設(shè)計,在實現(xiàn)平臺架構(gòu)的服務(wù)拆分粒度細化的同時,與具體業(yè)務(wù)相結(jié)合,達到各管理服務(wù)的內(nèi)部高內(nèi)聚、之間低耦合的效果。按照地震站網(wǎng)監(jiān)控對象,系統(tǒng)包括測震、強震、GNSS、重力、形變、流體、地電和地磁等不同手段,從服務(wù)類型和服務(wù)對象進行劃分設(shè)計,進而加工處理、分別劃分成微服務(wù)。劃分后,各服務(wù)之間彼此獨立,可根據(jù)業(yè)務(wù)需求進行服務(wù)調(diào)用,從而實現(xiàn)地震臺站監(jiān)控運維平臺由綜合運維單體架構(gòu)向微服務(wù)架構(gòu)的轉(zhuǎn)變。新的架構(gòu),系統(tǒng)升級靈活性更強,服務(wù)功能更加豐富,系統(tǒng)維護成本更低。
隨著互聯(lián)網(wǎng)技術(shù)的高速發(fā)展及企業(yè)信息化水平的顯著提升,以往地震臺站監(jiān)控運維平臺應(yīng)用的SOA 架構(gòu)面臨系統(tǒng)擴展困難、成本比較高的問題,難以滿足互聯(lián)網(wǎng)環(huán)境下應(yīng)用的高并發(fā)請求以及海量數(shù)據(jù)交互的要求。傳統(tǒng)架構(gòu)下的應(yīng)用模塊依賴關(guān)系復(fù)雜,功能的完善和擴展困難,同時增加了測試和部署的工作難度。任何一個模塊中的一個bug(比如內(nèi)存泄露等)均有可能摧垮整個進程,構(gòu)建部署和啟動時間較長,配置較復(fù)雜,在開發(fā)環(huán)境中的效果與運行環(huán)境中的效果難以保持一致,當(dāng)業(yè)務(wù)流出現(xiàn)錯誤和異常時,無法快速定位,需要花費大量時間來查找和定位問題,最終導(dǎo)致運維工作處于被動狀態(tài),不利于快速上線、頻繁部署的應(yīng)用場景,阻礙了持續(xù)交付。
在云計算、大數(shù)據(jù)、物聯(lián)網(wǎng)等新技術(shù)日趨普及和成熟的情況下,微服務(wù)架構(gòu)逐漸進入人們的視線。微服務(wù)架構(gòu)的本質(zhì)是把整體業(yè)務(wù)拆分成諸多有特定明確功能的服務(wù),通過諸多分散的小服務(wù)之間的配合,去解決更大、更復(fù)雜的問題。其特點決定了每個服務(wù)是分布式部署、獨立運行的無狀態(tài)服務(wù)(崔蔚等,2016)。基于微服務(wù)架構(gòu)的應(yīng)用監(jiān)控系統(tǒng)可將調(diào)用鏈路及調(diào)用鏈路上的每個節(jié)點作為監(jiān)控對象,對二者性能進行監(jiān)控和跟蹤,并對出現(xiàn)的異常進行報警,方便運維人員對系統(tǒng)的日常運維和優(yōu)化。微服務(wù)技術(shù)架構(gòu)見圖1。
圖1 微服務(wù)技術(shù)架構(gòu)(晉榮等,2019)Fig.1 Microservice technology architecture diagram(JIN Rong et al,2019)
地震站網(wǎng)全流程一體化監(jiān)控平臺微服務(wù)架構(gòu)設(shè)計是,將耦合度高的應(yīng)用劃分成一組細粒度的、業(yè)務(wù)邏輯單一的以及能夠高度自治的服務(wù),服務(wù)之間互相配合、共同協(xié)作,向用戶提供最終業(yè)務(wù)功能。由分布式MySQL 數(shù)據(jù)庫集群、HBase 集群、HDFS 分布式存儲文件系統(tǒng)、分布式對象存儲系統(tǒng)OSS 結(jié)合Elastic Search 的分布式索引系統(tǒng)提供基礎(chǔ)數(shù)據(jù)支撐,將面向不同服務(wù)應(yīng)用的地震站網(wǎng)監(jiān)控產(chǎn)品微服務(wù)功能封裝到可虛擬化部署的Docker容器中,通過Spring Cloud 實現(xiàn)服務(wù)發(fā)現(xiàn)與注冊、配置管理、服務(wù)調(diào)用、服務(wù)網(wǎng)關(guān)、負載均衡、熔斷、數(shù)據(jù)監(jiān)控等功能,構(gòu)建生產(chǎn)級的靈活擴展微服務(wù)應(yīng)用,方便進行地震站網(wǎng)監(jiān)控服務(wù)的持續(xù)開發(fā)和集成(譚一鳴,2017)。從而以松散的服務(wù)方式,實現(xiàn)平臺獨立化部署各個服務(wù);另一方面,可以基于Docker 容器技術(shù),實現(xiàn)平臺的初始化部署,并在此過程中完成服務(wù)的冗余備份,以保障地震站網(wǎng)全流程一體化監(jiān)控平臺整體的高可用性。
為滿足平臺資源按需使用、可擴展性要求,地震站網(wǎng)全流程一體化監(jiān)控平臺基于Spring Cloud 的微服務(wù)架構(gòu),結(jié)合Docker 容器技術(shù),按服務(wù)數(shù)據(jù)類型與服務(wù)對象開發(fā)集成面向不同應(yīng)用領(lǐng)域的站網(wǎng)監(jiān)控管理功能,實現(xiàn)服務(wù)業(yè)務(wù)的可伸縮、可靈活擴展(王方旭,2018),以滿足為不同服務(wù)對象提供可伸縮、可擴展、靈活定制的個性化站網(wǎng)數(shù)據(jù)服務(wù)的需求。
以層次化、組件化的方式進行平臺總體架構(gòu)設(shè)計,集成元數(shù)據(jù)、中間件(包括Web中間件、消息中間件等)等多種技術(shù),遵循統(tǒng)一的技術(shù)標(biāo)準(zhǔn)進行服務(wù)平臺開發(fā)。通過Hadoop 分布式處理框架,利用分布式MySQL 數(shù)據(jù)庫集群、HBASE(Hadoop Database)分布式存儲系統(tǒng)集群以及HDFS 分布式存儲文件系統(tǒng),結(jié)合分布式對象存儲系統(tǒng)OSS,存儲管理各種結(jié)構(gòu)化與非結(jié)構(gòu)化數(shù)據(jù)與產(chǎn)品,實現(xiàn)分布式的高容錯數(shù)據(jù)存儲(張羽,2016)。同時以MapReduce 并行處理技術(shù)以及Spark 內(nèi)存計算技術(shù),實現(xiàn)多種并發(fā)數(shù)據(jù)的分布式處理。
基于Lucene 作為內(nèi)部引擎的Elastic Search 分布式全文檢索系統(tǒng),實現(xiàn)大規(guī)模地震站網(wǎng)監(jiān)控數(shù)據(jù)的快速檢索,采用Impala 提供的基于HDFS 和OSS 的分布式快速查詢引擎,為整個系統(tǒng)提供基于分布式存儲的快速數(shù)據(jù)訪問服務(wù)。通過REDIS 數(shù)據(jù)緩存技術(shù),將高頻訪問的實時服務(wù)數(shù)據(jù)以一定數(shù)據(jù)結(jié)構(gòu)保存在REDIS 內(nèi)存數(shù)據(jù)庫中,提高實時更新數(shù)據(jù)的查詢、頁面響應(yīng)、顯示及應(yīng)用效率,滿足實時數(shù)據(jù)服務(wù)的時效性要求。結(jié)合RabbitMQ高性能消息隊列,對多任務(wù)并發(fā)調(diào)度信息進行有序管理,實現(xiàn)高可用、多并發(fā)任務(wù)的高效調(diào)度管理。平臺整體設(shè)計見圖2。
圖2 整體設(shè)計Fig.2 Overall design drawing
平臺采用基于微服務(wù)架構(gòu)開發(fā),各個子模塊統(tǒng)一基于JavaEE 開發(fā),采用IT 行業(yè)的主流開發(fā)框架Spring Boot,前端采用REACT 框架,實現(xiàn)前后端分離,并通過輕量級的REST 接口與服務(wù)網(wǎng)關(guān)交互,降低程序耦合性。
服務(wù)內(nèi)部使用Zuul服務(wù)網(wǎng)關(guān)做負載均均衡和登錄鑒權(quán);Eureka負責(zé)服務(wù)的注冊與發(fā)現(xiàn),避免服務(wù)之間的直接調(diào)用,方便服務(wù)后續(xù)的水平擴展、故障轉(zhuǎn)移,將各服務(wù)連接起來并保持服務(wù)高可用;Hystrix 負責(zé)服務(wù)熔斷和降級,連續(xù)多次失敗進行熔斷保護,并按一定間隔時間檢查調(diào)用失敗的服務(wù),若恢復(fù)將繼續(xù)提供服務(wù);Spring Cloud Config提供統(tǒng)一的配置中心服務(wù),實現(xiàn)分布式系統(tǒng)配置文件的統(tǒng)一管理。
結(jié)構(gòu)化數(shù)據(jù)采用MySQL 數(shù)據(jù)庫進行存儲。非結(jié)構(gòu)化數(shù)據(jù)基于內(nèi)存或分布式緩存Redis、MongoDB 等,業(yè)務(wù)系統(tǒng)信息通過kafka、rabbitMQ 等消息中間件傳輸。
作為一種松散耦合、服務(wù)高度自治的架構(gòu)模式,微服務(wù)架構(gòu)將耦合度高的應(yīng)用劃分成一組細粒度的、業(yè)務(wù)邏輯單一的服務(wù),服務(wù)獨立部署并在各自進程中獨立運行,服務(wù)之間互相配合與共同協(xié)作,因此微服務(wù)架構(gòu)本質(zhì)上是分布式系統(tǒng)。對于服務(wù)節(jié)點之間的通信,無論是同步還是異步通信方式,本質(zhì)上是一種服務(wù)依賴關(guān)系的體現(xiàn)(方志明,2018)。對于地震站網(wǎng)全流程一體化監(jiān)控平臺的微服務(wù),可篩選相互存在依賴關(guān)系的服務(wù),并以此關(guān)系構(gòu)建一個有向圖Dependency,因服務(wù)之間的依賴不存在環(huán)的情況,所以是一個有向無環(huán)圖。該有向圖以微服務(wù)作為節(jié)點,節(jié)點的入度表示服務(wù)的被依賴關(guān)系,即節(jié)點的入度越大,該微服務(wù)被越多其他微服務(wù)依賴。
地震站網(wǎng)全流程一體化監(jiān)控平臺應(yīng)用微服務(wù)技術(shù)架構(gòu),橫向拆分運維系統(tǒng)功能和業(yè)務(wù),實現(xiàn)注冊中心、告警管理、測試管理、性能監(jiān)測、事件通知和值勤管理等微服務(wù),向通信指揮和網(wǎng)絡(luò)運維人員提供穩(wěn)定、可靠的監(jiān)控服務(wù)集群。地震站網(wǎng)全流程一體化監(jiān)控平臺的微服務(wù)組成見圖3。
圖3 微服務(wù)組成Fig.3 Microservice composition
地震站網(wǎng)全流程一體化監(jiān)控平臺按照功能和業(yè)務(wù)維度劃分為多個微服務(wù)模塊,每個微服務(wù)單獨運行,單獨部署,各個微服務(wù)之間通過API 調(diào)用實現(xiàn)互聯(lián)互通。按照層次化設(shè)計思想,該平臺分為接入層、業(yè)務(wù)層和應(yīng)用層進行功能設(shè)計。系統(tǒng)組成界面見圖4。
圖4 微服務(wù)組成界面Fig.4 The user interface of microservice composition
系統(tǒng)接入層實現(xiàn)被管系統(tǒng)的接入和數(shù)據(jù)采集能力(圖5)。實現(xiàn)與其他系統(tǒng)和設(shè)備的連接,并通過接口獲取狀態(tài)上報數(shù)據(jù)和采集數(shù)據(jù),包括對觀測設(shè)備、通用設(shè)備、IP 網(wǎng)設(shè)備以及其他業(yè)務(wù)系統(tǒng)狀態(tài)數(shù)據(jù)的接入和數(shù)據(jù)采集。系統(tǒng)為每一種被管對象增加一個單獨的適配器服務(wù),保證任何一個適配器服務(wù)的正?;虍惓2挥绊懫渌m配器服務(wù)模塊。
圖5 系統(tǒng)接入架構(gòu)Fig.5 System access architecture diagram
業(yè)務(wù)層由一組實現(xiàn)不同業(yè)務(wù)的微服務(wù)組成,通過協(xié)同處理業(yè)務(wù)將接入層獲取的數(shù)據(jù)進行處理,綜合分析和挖掘,存儲并按需進行數(shù)據(jù)融合處理,包括對資源、設(shè)備、運維、流量和測試等相關(guān)數(shù)據(jù)的處理,實現(xiàn)告警監(jiān)測、通信資源管理、故障分析及流程管理等功能(圖6)。
圖6 告警監(jiān)測業(yè)務(wù)流程Fig.6 Alarm monitoring business flowchart
應(yīng)用層主要面向用戶提供操作入口和全景監(jiān)視視圖。在系統(tǒng)開發(fā)階段,一是基于開源軟件,快速構(gòu)建了服務(wù)注冊中心服務(wù)網(wǎng)關(guān)、服務(wù)負載均衡、服務(wù)容錯和分布式緩存等中間件,自主研發(fā)了服務(wù)監(jiān)控平臺,為系統(tǒng)開發(fā)提供了運行基礎(chǔ)。抽取分布式調(diào)度服務(wù)作為基礎(chǔ)服務(wù),采用任務(wù)“統(tǒng)一調(diào)度管理、分布式執(zhí)行”模式,提供各應(yīng)用的統(tǒng)一管理和應(yīng)用件協(xié)作服務(wù),并可為其他項目建設(shè)重用?;贛aven 開源工具,定制了開發(fā)環(huán)境,包括開發(fā)工具、開發(fā)模板、構(gòu)建倉庫等,實現(xiàn)了開箱即用、免系統(tǒng)環(huán)境配置、一鍵啟動及快速構(gòu)建等特點(趙樂樂等,2016)。在開發(fā)過程中,通過微服務(wù)架構(gòu)設(shè)計,提高了系統(tǒng)的靈活性和可擴展性,在業(yè)務(wù)需求漸清晰的情況下,實現(xiàn)功能快速迭代,應(yīng)用敏捷開發(fā)。
基于微服務(wù)架構(gòu)的地震站網(wǎng)全流程一體化監(jiān)控平臺由于松散耦合的構(gòu)建模式,平臺中包含數(shù)量眾多、業(yè)務(wù)邏輯各異的微服務(wù)。面對該情景,采用傳統(tǒng)手動部署或腳本部署是相對低效的方式。為了維護地震站網(wǎng)全流程一體化監(jiān)控平臺的高可用性,通過對容器實行冗余備份,構(gòu)建容器集群。
在進行微服務(wù)架構(gòu)設(shè)計時,將系統(tǒng)劃分為應(yīng)用層、業(yè)務(wù)服務(wù)層、基礎(chǔ)服務(wù)層、微服務(wù)中間件層和監(jiān)視層。其中,應(yīng)用層和業(yè)務(wù)層是業(yè)務(wù)價值體現(xiàn)的關(guān)鍵。應(yīng)用層“以用戶為中心”,專注于用戶體驗與業(yè)務(wù)功能;服務(wù)層通過將系統(tǒng)專業(yè)化分工,采用服務(wù)化方式,提供“去中心化”服務(wù)調(diào)用,并通過服務(wù)編排組合,可快速滿足多應(yīng)用多前端的功能實現(xiàn)(辛園園等,2018)。微服務(wù)平臺主要包含基礎(chǔ)服務(wù)層、微服務(wù)中間件層和監(jiān)控層等功能。
(1)基礎(chǔ)服務(wù)層。該層是服務(wù)重用和系統(tǒng)快速搭建的基礎(chǔ)。微服務(wù)劃分本質(zhì)上是對業(yè)務(wù)功能進行解耦并獨立部署而具有共性業(yè)務(wù)特征的功能進一步內(nèi)聚和抽取,形成基礎(chǔ)服務(wù)中心,在系統(tǒng)內(nèi)或系統(tǒng)間的多個微服務(wù)中共享使用?;A(chǔ)服務(wù)中心包括認證中心、調(diào)度中心、日志中心等公共服務(wù)應(yīng)用。
(2)微服務(wù)中間件層。微服務(wù)中間件層主要實現(xiàn)服務(wù)的統(tǒng)一管理,為服務(wù)間的互相協(xié)作運行提供技術(shù)保障,是架構(gòu)實現(xiàn)的技術(shù)支撐。服務(wù)注冊中心通過集中地注冊管理機制,統(tǒng)一管理服務(wù)名稱與服務(wù)調(diào)用地址之間的映射關(guān)系,實現(xiàn)服務(wù)的自動注冊和發(fā)現(xiàn),幫助服務(wù)調(diào)用者獲取服務(wù)提供者的地址信息。服務(wù)網(wǎng)關(guān)實現(xiàn)請求轉(zhuǎn)發(fā)、動態(tài)路由等功能,可以降低服務(wù)演進過程中地址變動和增長帶來的更新成本;也可以實現(xiàn)協(xié)議轉(zhuǎn)發(fā),能提高基礎(chǔ)服務(wù)中心的協(xié)議擴展性。服務(wù)負載均衡通過水平伸縮實現(xiàn)服務(wù)調(diào)用請求的負載均衡,有效分散單節(jié)點的計算負載,實現(xiàn)服務(wù)的彈性擴展。服務(wù)容錯構(gòu)建流量控制、故障隔離、斷路器等容錯與修復(fù)機制,避免某個服務(wù)不可用時,導(dǎo)致故障蔓延,并最終造成整個系統(tǒng)癱瘓的風(fēng)險(李春陽等,2017)。分布式緩存利用鍵值數(shù)據(jù)庫基于多臺PC 服務(wù)器,為分布式環(huán)境下應(yīng)用對象緩存、狀態(tài)緩存等場景提供統(tǒng)一的分布式緩存解決方案。
(3)監(jiān)控層。監(jiān)控層是系統(tǒng)穩(wěn)定運行的保障,隨著系統(tǒng)服務(wù)數(shù)量逐步增多,服務(wù)之間的調(diào)用關(guān)系越來越復(fù)雜,這也對微服務(wù)架構(gòu)下如何保障系統(tǒng)可靠運行提出了新挑戰(zhàn)。通過對應(yīng)用服務(wù)、資源服務(wù)調(diào)用鏈路等進行監(jiān)控,能夠?qū)崿F(xiàn)微服務(wù)架構(gòu)下請求可追溯、問題可預(yù)警、伸縮有依據(jù)(張晶等,2017)。其主要功能包括站網(wǎng)應(yīng)用概覽、數(shù)據(jù)監(jiān)測詳情、環(huán)境參數(shù)、應(yīng)用軟件服務(wù)狀況、數(shù)據(jù)庫監(jiān)控、服務(wù)調(diào)用鏈分析等,同時也為監(jiān)控運維一體化提供了重要支撐工具(圖6)。
系統(tǒng)調(diào)整后,項目組對1 036 個用例進行了測試,通過1 028 個,未通過8 個,修復(fù)后最終通過測試,能夠正常運行。模塊中的功能均已正確實現(xiàn),性能、壓力測試指標(biāo)均達到要求。
本文結(jié)合實際開發(fā)項目,針對地震站網(wǎng)全流程一體化監(jiān)控平臺中存在的諸多難題和相應(yīng)的解決策略進行分析。基于Spring Cloud 的微服務(wù)架構(gòu)提供靈活可擴展的數(shù)據(jù)服務(wù),將面向不同服務(wù)應(yīng)用的地震臺站監(jiān)控管理微服務(wù)功能封裝到可虛擬化快速部署的Docker 容器中,構(gòu)建高伸縮性的數(shù)據(jù)服務(wù),方便地進行地震臺站監(jiān)控管理服務(wù)的持續(xù)開發(fā)和集成,滿足不斷拓展的多種多樣的地震臺站管理服務(wù)需求。通過實驗證明了微服務(wù)架構(gòu)的服務(wù)系統(tǒng)可以提高用戶體驗,降低開發(fā)成本,實現(xiàn)高可用性,具有可持續(xù)發(fā)展的潛力。隨著互聯(lián)網(wǎng)思維和云平臺部署越來越趨勢化,微服務(wù)架構(gòu)在地震臺站監(jiān)控管理應(yīng)用系統(tǒng)的建設(shè)中將體現(xiàn)出越來越大的價值。