糜小兵 孟獻(xiàn)軻

摘要:機(jī)場態(tài)勢系統(tǒng)伴隨其呈現(xiàn)的數(shù)據(jù)主題越來越豐富而日趨復(fù)雜,這就對系統(tǒng)的可擴(kuò)展性、敏捷性、容錯性等方面的能力提出了更高的要求,而傳統(tǒng)單體架構(gòu)已經(jīng)難以滿足上述要求。鑒于此,提出了基于Spring Cloud的微服務(wù)架構(gòu)設(shè)計方案,通過此方案改造后的機(jī)場態(tài)勢系統(tǒng)更易于敏捷開發(fā)、迅速迭代上線,更易實現(xiàn)對計算資源的彈性擴(kuò)展,更易于功能擴(kuò)展與集成而不受技術(shù)棧的限制。
關(guān)鍵詞:Spring Cloud;微服務(wù)改造;單體架構(gòu);微服務(wù)架構(gòu)
0? ? 引言
隨著機(jī)場態(tài)勢系統(tǒng)成為機(jī)場指揮控制的樞紐中心,其呈現(xiàn)的主題數(shù)據(jù)越來越豐富,系統(tǒng)日趨復(fù)雜,原單體架構(gòu)下的項目開發(fā)、測試、部署模式難以支撐其對系統(tǒng)的可擴(kuò)展性、敏捷性以及容錯性等方面的能力要求。為滿足上述能力要求,對現(xiàn)有單體應(yīng)用架構(gòu)進(jìn)行調(diào)整勢在必行。本文提出了基于Spring Cloud框架實現(xiàn)機(jī)場態(tài)勢系統(tǒng)的微服務(wù)改造,改造后的機(jī)場態(tài)勢系統(tǒng)更易于敏捷開發(fā),更易實現(xiàn)對計算資源的彈性擴(kuò)展,更易于功能擴(kuò)展與集成而不受技術(shù)棧的限制。
1? ? 關(guān)鍵技術(shù)介紹
1.1? ? 微服務(wù)
微服務(wù)架構(gòu)是采用服務(wù)集合的方式來構(gòu)建應(yīng)用的架構(gòu)模式,各服務(wù)部署在不同的進(jìn)程中,服務(wù)間的通信通過RPC、HTTP、REST等輕量級交互機(jī)制來進(jìn)行,服務(wù)可獨立擴(kuò)展伸縮,由于服務(wù)明確定義了自身的邊界,因此不同服務(wù)可以由不同團(tuán)隊采用不同的編程語言來實現(xiàn)與維護(hù)[1]。微服務(wù)架構(gòu)由面向服務(wù)的架構(gòu)SOA發(fā)展而來,其核心理論基礎(chǔ)來自于康威定律[2],于2014年3月由Martin Fowler在他的文章《Microservices》中首次提出。以網(wǎng)絡(luò)為中心面向服務(wù)化的微服務(wù)架構(gòu)與傳統(tǒng)的單體應(yīng)用架構(gòu)相比,其優(yōu)勢主要體現(xiàn)為以下幾點:一是微服務(wù)架構(gòu)以“職責(zé)單一”為指導(dǎo),將業(yè)務(wù)系統(tǒng)模塊組件化、服務(wù)化,服務(wù)化的模塊功能單一明確,邊界清晰,復(fù)雜度低,從而利于敏捷開發(fā)與快速部署;二是微服務(wù)架構(gòu)提升了容錯性,服務(wù)運行隔離,一個服務(wù)出了問題,不會影響其他微服務(wù);三是微服務(wù)架構(gòu)允許技術(shù)團(tuán)隊根據(jù)團(tuán)隊成員技術(shù)棧與功能需求選擇不同的技術(shù)路線。
雖然微服務(wù)架構(gòu)是一種先進(jìn)的架構(gòu)模式,但同時也帶來以下挑戰(zhàn):一是運維要求高,運維工程師除了需要使用自動化技術(shù)部署微服務(wù),還需要對整個微服務(wù)系統(tǒng)進(jìn)行有效的監(jiān)控,并保障系統(tǒng)的高可靠性;二是微服務(wù)架構(gòu)的分布式復(fù)雜性,微服務(wù)架構(gòu)的每個服務(wù)可以部署在任意機(jī)器上,這樣部署的形態(tài)容易導(dǎo)致網(wǎng)絡(luò)延遲、系統(tǒng)容錯、分布式事務(wù)等問題,都會給微服務(wù)架構(gòu)帶來很大的挑戰(zhàn);三是服務(wù)間通信成本較高,每個服務(wù)在獨立的進(jìn)程中運行,從客戶端訪問微服務(wù)需要跨進(jìn)程來進(jìn)行調(diào)用,顯然進(jìn)程間的調(diào)用對其計算資源占用一定比進(jìn)程內(nèi)的調(diào)用更高,通信成本的開銷不可避免更高[3]。
1.2? ? Spring Cloud
Spring Cloud是一個基于Spring Boot實現(xiàn)的微服務(wù)架構(gòu)開發(fā)工具,它為微服務(wù)架構(gòu)中涉及的配置管理、服務(wù)治理、斷路器、智能路由、微代理、控制總線、全局鎖、決策競選、分布式會話和集群狀態(tài)管理等操作提供了一種簡單的開發(fā)方式[4]。
Spring Cloud在集成封裝Netflix多個框架的基礎(chǔ)上進(jìn)行擴(kuò)展,因此除了Spring Cloud Netflix模塊外,Spring Cloud其他幾個重要的模塊如下:Spring Cloud Config模塊主要為分布式系統(tǒng)提供服務(wù)器和客戶端運行配置,通過靈活配置可以高效地管理集群中龐大的配置文件;Spring Cloud Sleuth模式是服務(wù)跟蹤框架,與Zipkin、Apache HTrace和ELK等這些數(shù)據(jù)分析、服務(wù)跟蹤系統(tǒng)整合后可以高效地解決服務(wù)跟蹤問題;Spring Cloud Stream模塊主要是用于構(gòu)建消息驅(qū)動的框架,在Spring Boot的基礎(chǔ)上通過整合Spring Integration來提供連接消息代理中間件的能力;Spring Cloud Bus通過連接RabbitMQ、Kafka等消息代理的集群消息總線提供聯(lián)通服務(wù)[5]。
2? ? 機(jī)場態(tài)勢系統(tǒng)微服務(wù)改造設(shè)計與實現(xiàn)
2.1? ? 改造策略
對于比較復(fù)雜的大型業(yè)務(wù)信息系統(tǒng)的改造,如果采取直接推翻舊系統(tǒng)、重新構(gòu)建微服務(wù)架構(gòu)的方案,顯然成本高且風(fēng)險大。因此,應(yīng)當(dāng)采取漸進(jìn)式重構(gòu)舊系統(tǒng)的改造策略,主要包括以下兩點:
策略一:微服務(wù)提取。對舊系統(tǒng)內(nèi)功能模塊邊界相對獨立的,提取改造為獨立的微服務(wù),不斷將模塊轉(zhuǎn)化為微服務(wù)組件,舊系統(tǒng)就會不斷收縮,一旦足夠多的模塊轉(zhuǎn)化成服務(wù)組件,則舊系統(tǒng)或者徹底消失,或者縮小成為另一個微服務(wù)。
策略二:增量業(yè)務(wù)直接微服務(wù)化。對于舊系統(tǒng)新增業(yè)務(wù)功能不再延續(xù)單體架構(gòu)技術(shù)而是直接開發(fā)成為獨立的微服務(wù)[6]。
2.2? ? 微服務(wù)簡單模式設(shè)計與改造
基于上述改造策略,對機(jī)場態(tài)勢系統(tǒng)需要改造或新增業(yè)務(wù)進(jìn)行微服務(wù)架構(gòu)設(shè)計,相對于傳統(tǒng)的單體架構(gòu),微服務(wù)架構(gòu)一下子引入了太多的概念,而Spring Cloud的組件模塊多得讓開發(fā)者有點無可適從。基于上述情況,需要根據(jù)項目實際梳理清楚哪些組件是開發(fā)一個微服務(wù)架構(gòu)系統(tǒng)所必需的。通常微服務(wù)模式運行主要包括以下幾個關(guān)鍵點:一是微服務(wù)提供方將地址信息注冊到注冊中心,調(diào)用方將服務(wù)地址從注冊中心拉取下來;二是通過門戶后端(服務(wù)網(wǎng)關(guān))將微服務(wù)API暴露給門戶和移動App;三是為防止服務(wù)故障引發(fā)級聯(lián)故障導(dǎo)致雪崩效應(yīng),需要容錯機(jī)制。
通過上述關(guān)鍵點可知微服務(wù)架構(gòu)必須具備注冊中心、服務(wù)發(fā)現(xiàn)、負(fù)載均衡、服務(wù)網(wǎng)關(guān)、服務(wù)容錯這五大組件。常見的服務(wù)注冊中心有Zookeeper、Eureka、Consul、Etcd等[7],結(jié)合項目選擇Eureka。對于客戶端服務(wù)發(fā)現(xiàn)和負(fù)載均衡則有很多負(fù)載均衡算法,最簡單的負(fù)載均衡算法來自著名的Round Robin算法,即輪詢法[7],其思想是將多個可用服務(wù)實例組織成一個循環(huán)隊列,然后根據(jù)實例順序輪流分派服務(wù)請求;另外還有加權(quán)輪詢法[8]、最小連接數(shù)法[9]等,結(jié)合Spring Cloud選擇Ribbon。對于服務(wù)網(wǎng)關(guān)選擇Spring Cloud Zuul,Zuul是Netflix基于Java開發(fā)的服務(wù)端API網(wǎng)關(guān)和負(fù)載均衡器。除此之外,Zuul還可以對過濾器進(jìn)行動態(tài)的加載、編譯、運行。服務(wù)容錯選擇Hystrix,這是Netflix開源的一個工具類庫,可以為網(wǎng)絡(luò)請求設(shè)置超時,使用斷路器模式,用于隔離訪問遠(yuǎn)程系統(tǒng)、服務(wù)或第三方庫,防止級聯(lián)失敗,從而提升系統(tǒng)的可用性和容錯性。
整個基于Spring Cloud的微服務(wù)架構(gòu)如圖1所示。
在改造策略和微服務(wù)架構(gòu)模式確定后,對原有機(jī)場態(tài)勢系統(tǒng)進(jìn)行功能分析,對于業(yè)務(wù)相當(dāng)獨立地進(jìn)行微服務(wù)改造,通過對服務(wù)模塊最大限度地拆分,體現(xiàn)了微服務(wù)化的設(shè)計理念,大幅提高了系統(tǒng)部署靈活性、可擴(kuò)展性和可維護(hù)性,保證了系統(tǒng)的健壯性[10-12]。
3? ? 結(jié)語
本文研究了機(jī)場態(tài)勢系統(tǒng)由傳統(tǒng)的單體應(yīng)用架構(gòu)借助Spring Cloud進(jìn)行微服務(wù)改造,大型復(fù)雜業(yè)務(wù)信息系統(tǒng)的服務(wù)化改造不是一蹴而就的,因此重點研究了復(fù)雜業(yè)務(wù)信息系統(tǒng)的微服務(wù)改造策略以及微服務(wù)的快速簡單實現(xiàn)方案,將機(jī)場態(tài)勢系統(tǒng)的功能進(jìn)行抽取形成耦合度低、獨立部署的服務(wù)組件,這樣伴隨機(jī)場態(tài)勢系統(tǒng)的發(fā)展,不僅能夠快速響應(yīng),而且其支持高并發(fā)、高可用、可擴(kuò)展的特性,也為業(yè)務(wù)發(fā)展提供了堅實基礎(chǔ)。
[參考文獻(xiàn)]
[1] 黃小鋒,張晶.微服務(wù)框架介紹與實現(xiàn)[J].電腦與信息技術(shù),2016,24(6):14-16.
[2] FOWLER M,LEWIS J.Microservices:a definition of this new architectural term[EB/OL].[2020-05-03]. https://www.martinfowler.com/articles/microservices.html.
[3] 黃勇.架構(gòu)探險:輕量級微服務(wù)架構(gòu)[M].北京:電子工業(yè)出版社,2016.
[4] 翟永超.Spring Cloud微服務(wù)實戰(zhàn)[M].北京:電子工業(yè)出版社,2017.
[5] 楊恩雄.瘋狂Spring Cloud微服務(wù)架構(gòu)實戰(zhàn)[M].北京:電子工業(yè)出版社,2018.
[6] RICHARDSON C.微服務(wù)架構(gòu)設(shè)計模式[M].喻勇,譯.北京:機(jī)械工業(yè)出版社,2019.
[7] UPADHYAY A,HASIJA H.Optimization in round robin process scheduling algorithm[C]// Proceedings of Third International Conference,2016:457-467.
[8] LI T,BAUMBERGER D,HAHN S W.Efficient and scalable multiprocessor fair scheduling using distributed weighted round-robin[J].ACM Sigplan Notices,2009,44(4):65-74.
[9] CHOI D J,CHUNG K S,SHON J G.An improvement on the weighted least -connection scheduling algorithm for load balancing in Web cluster systems[M]//Grid and Distributed Computing,Control and Automation. Berlin,Heidelberg:Springer,2010:127-134.
[10] 王方旭.基于Spring Cloud實現(xiàn)業(yè)務(wù)系統(tǒng)微服務(wù)化的設(shè)計與實現(xiàn)[J].電子技術(shù)與軟件工程,2018(8):60-61.
[11] 黃沛.基于RESTful架構(gòu)的科技信息共享接口系統(tǒng)的設(shè)計[J].軟件,2018,39(7):170-172.
[12] 王二偉,姚文斌.一種基于REST的物聯(lián)網(wǎng)資源模型和分布策略[J].軟件,2015,36(12):128-131.
收稿日期:2020-05-06
作者簡介:糜小兵(1981—),男,四川渠縣人,碩士研究生,工程師,研究方向:作戰(zhàn)指揮控制。
孟獻(xiàn)軻(1980—),男,江蘇丹陽人,高級工程師,研究方向:作戰(zhàn)指揮控制。