文/王方旭
互聯(lián)網(wǎng)、云計算技術(shù)的高速發(fā)展,人們對信息化系統(tǒng)服務(wù)的依賴程度日益加深。隨著服務(wù)、數(shù)據(jù)的爆炸式增長,自上世紀(jì)90年代以單體架構(gòu)建設(shè)的IT服務(wù)系統(tǒng)越來越無法滿足現(xiàn)實要求。雖然SOA(面向服務(wù)的架構(gòu))的出現(xiàn)在一定程度上能夠緩解單體架構(gòu)的弊端,但SOA架構(gòu)系統(tǒng)的服務(wù)通信機制的高成本和對企業(yè)服務(wù)總線的依賴決定了仍不是最佳解決方案。“微服務(wù)”概念適時的出現(xiàn)為我們解決了問題,微服務(wù)架構(gòu)的一切皆服務(wù)的理念和在云計算領(lǐng)域的優(yōu)異表現(xiàn)獲得了普遍認(rèn)可。
本文介紹了一種基于Spring Cloud框架實現(xiàn)業(yè)務(wù)系統(tǒng)微服務(wù)化的案例,結(jié)合微服務(wù)架構(gòu)思想和Spring Cloud框架,將以單體架構(gòu)建設(shè)的應(yīng)用系統(tǒng)改造成的典型的微服務(wù)框架系統(tǒng),改造后,系統(tǒng)顯著提升了應(yīng)用開發(fā)、測試、部署運維一體化的能力。
微服務(wù)的概念是2014年3月由Martin Fowler在他的文章《Microservices》中首次提出,作為一種先進的架構(gòu)模式,其核心思想就是:應(yīng)用是由多個小的、相互獨立的、可采用分布式部署的服務(wù)組成,服務(wù)的開發(fā)、部署在各自獨立的進程中,不同服務(wù)通過一些輕量級交互機制來通信,例如 RPC、HTTP 等,服務(wù)可獨立擴展伸縮,每個服務(wù)定義了明確的邊界,不同的服務(wù)可以采用不同的編程語言來實現(xiàn),由獨立的團隊來維護。目前,隨著互聯(lián)網(wǎng)思維和云平臺部署越來趨勢化,微服務(wù)架構(gòu)在應(yīng)用系統(tǒng)的建設(shè)中所體現(xiàn)出的價值越來越大。
微服務(wù)架構(gòu)具有如下優(yōu)勢:
(1)微服務(wù)架構(gòu)將業(yè)務(wù)系統(tǒng)徹底的組件化、服務(wù)化,微服務(wù)專注于業(yè)務(wù)邏輯,服務(wù)功能簡單,邊界清晰,復(fù)雜度低,接口明確,服務(wù)利于開發(fā)、部署。
(2)服務(wù)耦合度低,每個服務(wù)是一個微型的應(yīng)用,有完整的架構(gòu),可獨立部署。
(3)微服務(wù)架構(gòu)允許根據(jù)服務(wù)的功能和團隊的自身條件選擇不同的技術(shù)路線,允許服務(wù)由不同的開發(fā)團隊開發(fā)。
(4)優(yōu)良的容錯機制和熔斷機制,保障微服務(wù)之間交互的友好性。
微服務(wù)架構(gòu)雖是一種先進的架構(gòu)模式,但仍有它的不足:
(1)微服務(wù)架構(gòu)的應(yīng)用是分布式系統(tǒng),相較于單體架構(gòu)的應(yīng)用系統(tǒng)具有較大的復(fù)雜性,尤其是需要在 RPC 或者消息傳遞之間選擇并完成進程間的通訊機制;此外,消息傳遞、服務(wù)調(diào)用的性能相對于單體應(yīng)用會有所下降。
(2)分布式系統(tǒng)帶來的數(shù)據(jù)庫數(shù)據(jù)的一致性問題對開發(fā)者提出更大的挑戰(zhàn)。
在Spring生態(tài)圈內(nèi)基于Spring Boot實現(xiàn)的Spring Cloud框架越來越受到業(yè)界的關(guān)注,Spring Cloud是一系列框架、組件的有序集合,擁有功能完善的、輕量級的微服務(wù)實現(xiàn)組件,例如服務(wù)發(fā)現(xiàn)治理、服務(wù)容錯、服務(wù)網(wǎng)關(guān)、服務(wù)配置、負(fù)載均衡、消息總線、服務(wù)跟蹤等方面均有經(jīng)過實踐檢驗的成熟組件。
如圖1,展示了基于Spring Cloud各組件的完整架構(gòu)圖。
(1)Eureka負(fù)責(zé)微服務(wù)架構(gòu)中服務(wù)治理功能,實現(xiàn)服務(wù)實例的自動化注冊與發(fā)現(xiàn)。
(2)Zuul在客戶端與服務(wù)端配置實現(xiàn),作為微服務(wù)網(wǎng)關(guān),可有效的減少客戶端與服務(wù)端的交互次數(shù),易于監(jiān)控,易于認(rèn)證,動態(tài)路由。
(3)Ribbon是負(fù)載均衡器,負(fù)責(zé)自動從Eureka Server發(fā)現(xiàn)服務(wù),然后基于某種負(fù)載均衡算法幫助服務(wù)消費者去請求服務(wù)。
(4)HyStrix是熔斷器,為避免發(fā)生雪崩效應(yīng)而引入,對服務(wù)延遲和故障提供更加強大容錯能力。

圖1

圖2
(5)Turbine是聚合HyStrix監(jiān)控數(shù)據(jù)的工具,結(jié)合HyStrix監(jiān)控微服務(wù)集群。
(6)Conf i g Server為分布式系統(tǒng)提供統(tǒng)一管理的配置,在Spring Cloud框架中使用有利于配置的集中管理,動態(tài)調(diào)整配置,且自動更新配置。
(7)Spring Cloud Bus管理和傳播服務(wù)之間的消息,通過集成當(dāng)前最主流的消息中間件RabbitMQ可有效的在各分布式服務(wù)之間解耦,提供高易用性、高擴展性的通信功能。
(8)Spring Cloud Sleuth集 成 ZipKin,為應(yīng)用實現(xiàn)分布式的鏈路監(jiān)控分析方案。
綜上,當(dāng)客戶端請求服務(wù)時,Zuul網(wǎng)關(guān)將請求動態(tài)轉(zhuǎn)發(fā),Ribbon會根據(jù)服務(wù)網(wǎng)關(guān)的配置實現(xiàn)負(fù)載均衡,Eureka獲知請求的服務(wù),在服務(wù)注冊中心獲得服務(wù);微服務(wù)向客戶端提供服務(wù)時,會讀取在Conf i g Server配置的統(tǒng)一配置;而HyStrix和Turbine負(fù)責(zé)監(jiān)控服務(wù)的熔斷情況,并給予圖形化展示;RabbitMQ在各服務(wù)之間通信;Sleuth+Zipkin追蹤每個請求,記錄請求的服務(wù)、耗時、網(wǎng)絡(luò)延遲等數(shù)據(jù)以備后續(xù)優(yōu)化系統(tǒng)時分析使用。
傳輸勘察系統(tǒng)和資源系統(tǒng)是應(yīng)用于通信行業(yè)有線傳輸?shù)臉I(yè)務(wù)系統(tǒng),提供傳輸勘察設(shè)計的全過程的業(yè)務(wù)管理。隨著業(yè)務(wù)的發(fā)展,系統(tǒng)內(nèi)功能的優(yōu)化調(diào)整、系統(tǒng)間功能的調(diào)用和數(shù)據(jù)的交流非常普遍的,傳輸勘察系統(tǒng)和資源系統(tǒng)必須進行有效地資源整合。系統(tǒng)是作為依附于業(yè)務(wù)的發(fā)展而建設(shè)的系統(tǒng),由不同時間階段、不同開發(fā)團隊開發(fā)完成,并且傳輸勘察系統(tǒng)和資源系統(tǒng)采用了不同的技術(shù)路線。為了解決以上問題并使應(yīng)用系統(tǒng)在將來業(yè)務(wù)拓展時有良好的應(yīng)對能力,我們采用了微服務(wù)架構(gòu)的思想作為改造思路,而Spring Cloud框架作為在云部署、虛擬化方面均有優(yōu)異輸出的分布式應(yīng)用系統(tǒng)框架是實現(xiàn)微服務(wù)架構(gòu)的最佳解決方案。
基于傳輸勘察系統(tǒng)和資源系統(tǒng)的現(xiàn)狀和將來的發(fā)展趨勢,我們設(shè)計了如圖2的系統(tǒng)框架。
將各功能模塊封裝成微服務(wù)并部署在獨立的服務(wù)器中,各微服務(wù)提供服務(wù)接口注冊在Eureka Server服務(wù)注冊中心中;微服務(wù)之間消息的管理和傳播由Rabbit MQ完成,并部署負(fù)責(zé)鏈路監(jiān)控分析的服務(wù)監(jiān)控系統(tǒng)運行情況;對系統(tǒng)的訪問由基于Zuul Proxy的網(wǎng)關(guān)進行轉(zhuǎn)發(fā)。
通過采用Spring Cloud框架對業(yè)務(wù)系統(tǒng)的改造,將業(yè)務(wù)功能復(fù)雜、耦合度高、系統(tǒng)維護成本大的系統(tǒng)改造成了獨立部署、耦合度低、業(yè)務(wù)功能組件化的分布式系統(tǒng),為系統(tǒng)的運營維護節(jié)省了極大的成本。隨著業(yè)務(wù)的發(fā)展,無論是新功能的增減還是業(yè)務(wù)邏輯的優(yōu)化,業(yè)務(wù)系統(tǒng)都能夠做到快速響應(yīng),敏捷開發(fā),靈活配置,快速部署,獨立運行,為業(yè)務(wù)的發(fā)展提供了快速有力的支持。
參考文獻
[1]Fowler M,Lewis J.Microservices.https://martinfowler.com/articles/microservices.html.articles/microservices.html.[2014-03-25].
[2]王磊.微服務(wù)架構(gòu)與實踐[M]. 北京:電子工業(yè)出版社,2015.
[3]周立.Spring Cloud與Docker微服務(wù)架構(gòu)實戰(zhàn)[M].北京:電子工業(yè)出版社,2017(05).