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