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