文/王方旭
互聯(lián)網(wǎng)、云計(jì)算技術(shù)的高速發(fā)展,人們對(duì)信息化系統(tǒng)服務(wù)的依賴程度日益加深。隨著服務(wù)、數(shù)據(jù)的爆炸式增長(zhǎng),自上世紀(jì)90年代以單體架構(gòu)建設(shè)的IT服務(wù)系統(tǒng)越來(lái)越無(wú)法滿足現(xiàn)實(shí)要求。雖然SOA(面向服務(wù)的架構(gòu))的出現(xiàn)在一定程度上能夠緩解單體架構(gòu)的弊端,但SOA架構(gòu)系統(tǒng)的服務(wù)通信機(jī)制的高成本和對(duì)企業(yè)服務(wù)總線的依賴決定了仍不是最佳解決方案。“微服務(wù)”概念適時(shí)的出現(xiàn)為我們解決了問(wèn)題,微服務(wù)架構(gòu)的一切皆服務(wù)的理念和在云計(jì)算領(lǐng)域的優(yōu)異表現(xiàn)獲得了普遍認(rèn)可。
本文介紹了一種基于Spring Cloud框架實(shí)現(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)用開(kāi)發(fā)、測(cè)試、部署運(yùn)維一體化的能力。
微服務(wù)的概念是2014年3月由Martin Fowler在他的文章《Microservices》中首次提出,作為一種先進(jìn)的架構(gòu)模式,其核心思想就是:應(yīng)用是由多個(gè)小的、相互獨(dú)立的、可采用分布式部署的服務(wù)組成,服務(wù)的開(kāi)發(fā)、部署在各自獨(dú)立的進(jìn)程中,不同服務(wù)通過(guò)一些輕量級(jí)交互機(jī)制來(lái)通信,例如 RPC、HTTP 等,服務(wù)可獨(dú)立擴(kuò)展伸縮,每個(gè)服務(wù)定義了明確的邊界,不同的服務(wù)可以采用不同的編程語(yǔ)言來(lái)實(shí)現(xiàn),由獨(dú)立的團(tuán)隊(duì)來(lái)維護(hù)。目前,隨著互聯(lián)網(wǎng)思維和云平臺(tái)部署越來(lái)趨勢(shì)化,微服務(wù)架構(gòu)在應(yīng)用系統(tǒng)的建設(shè)中所體現(xiàn)出的價(jià)值越來(lái)越大。
微服務(wù)架構(gòu)具有如下優(yōu)勢(shì):
(1)微服務(wù)架構(gòu)將業(yè)務(wù)系統(tǒng)徹底的組件化、服務(wù)化,微服務(wù)專注于業(yè)務(wù)邏輯,服務(wù)功能簡(jiǎn)單,邊界清晰,復(fù)雜度低,接口明確,服務(wù)利于開(kāi)發(fā)、部署。
(2)服務(wù)耦合度低,每個(gè)服務(wù)是一個(gè)微型的應(yīng)用,有完整的架構(gòu),可獨(dú)立部署。
(3)微服務(wù)架構(gòu)允許根據(jù)服務(wù)的功能和團(tuán)隊(duì)的自身?xiàng)l件選擇不同的技術(shù)路線,允許服務(wù)由不同的開(kāi)發(fā)團(tuán)隊(duì)開(kāi)發(fā)。
(4)優(yōu)良的容錯(cuò)機(jī)制和熔斷機(jī)制,保障微服務(wù)之間交互的友好性。
微服務(wù)架構(gòu)雖是一種先進(jìn)的架構(gòu)模式,但仍有它的不足:
(1)微服務(wù)架構(gòu)的應(yīng)用是分布式系統(tǒng),相較于單體架構(gòu)的應(yīng)用系統(tǒng)具有較大的復(fù)雜性,尤其是需要在 RPC 或者消息傳遞之間選擇并完成進(jìn)程間的通訊機(jī)制;此外,消息傳遞、服務(wù)調(diào)用的性能相對(duì)于單體應(yīng)用會(huì)有所下降。
(2)分布式系統(tǒng)帶來(lái)的數(shù)據(jù)庫(kù)數(shù)據(jù)的一致性問(wèn)題對(duì)開(kāi)發(fā)者提出更大的挑戰(zhàn)。
在Spring生態(tài)圈內(nèi)基于Spring Boot實(shí)現(xiàn)的Spring Cloud框架越來(lái)越受到業(yè)界的關(guān)注,Spring Cloud是一系列框架、組件的有序集合,擁有功能完善的、輕量級(jí)的微服務(wù)實(shí)現(xiàn)組件,例如服務(wù)發(fā)現(xiàn)治理、服務(wù)容錯(cuò)、服務(wù)網(wǎng)關(guān)、服務(wù)配置、負(fù)載均衡、消息總線、服務(wù)跟蹤等方面均有經(jīng)過(guò)實(shí)踐檢驗(yàn)的成熟組件。
如圖1,展示了基于Spring Cloud各組件的完整架構(gòu)圖。
(1)Eureka負(fù)責(zé)微服務(wù)架構(gòu)中服務(wù)治理功能,實(shí)現(xiàn)服務(wù)實(shí)例的自動(dòng)化注冊(cè)與發(fā)現(xiàn)。
(2)Zuul在客戶端與服務(wù)端配置實(shí)現(xiàn),作為微服務(wù)網(wǎng)關(guān),可有效的減少客戶端與服務(wù)端的交互次數(shù),易于監(jiān)控,易于認(rèn)證,動(dòng)態(tài)路由。
(3)Ribbon是負(fù)載均衡器,負(fù)責(zé)自動(dòng)從Eureka Server發(fā)現(xiàn)服務(wù),然后基于某種負(fù)載均衡算法幫助服務(wù)消費(fèi)者去請(qǐng)求服務(wù)。
(4)HyStrix是熔斷器,為避免發(fā)生雪崩效應(yīng)而引入,對(duì)服務(wù)延遲和故障提供更加強(qiáng)大容錯(cuò)能力。
圖1
圖2
(5)Turbine是聚合HyStrix監(jiān)控?cái)?shù)據(jù)的工具,結(jié)合HyStrix監(jiān)控微服務(wù)集群。
(6)Conf i g Server為分布式系統(tǒng)提供統(tǒng)一管理的配置,在Spring Cloud框架中使用有利于配置的集中管理,動(dòng)態(tài)調(diào)整配置,且自動(dòng)更新配置。
(7)Spring Cloud Bus管理和傳播服務(wù)之間的消息,通過(guò)集成當(dāng)前最主流的消息中間件RabbitMQ可有效的在各分布式服務(wù)之間解耦,提供高易用性、高擴(kuò)展性的通信功能。
(8)Spring Cloud Sleuth集 成 ZipKin,為應(yīng)用實(shí)現(xiàn)分布式的鏈路監(jiān)控分析方案。
綜上,當(dāng)客戶端請(qǐng)求服務(wù)時(shí),Zuul網(wǎng)關(guān)將請(qǐng)求動(dòng)態(tài)轉(zhuǎn)發(fā),Ribbon會(huì)根據(jù)服務(wù)網(wǎng)關(guān)的配置實(shí)現(xiàn)負(fù)載均衡,Eureka獲知請(qǐng)求的服務(wù),在服務(wù)注冊(cè)中心獲得服務(wù);微服務(wù)向客戶端提供服務(wù)時(shí),會(huì)讀取在Conf i g Server配置的統(tǒng)一配置;而HyStrix和Turbine負(fù)責(zé)監(jiān)控服務(wù)的熔斷情況,并給予圖形化展示;RabbitMQ在各服務(wù)之間通信;Sleuth+Zipkin追蹤每個(gè)請(qǐng)求,記錄請(qǐng)求的服務(wù)、耗時(shí)、網(wǎng)絡(luò)延遲等數(shù)據(jù)以備后續(xù)優(yōu)化系統(tǒng)時(shí)分析使用。
傳輸勘察系統(tǒng)和資源系統(tǒng)是應(yīng)用于通信行業(yè)有線傳輸?shù)臉I(yè)務(wù)系統(tǒng),提供傳輸勘察設(shè)計(jì)的全過(guò)程的業(yè)務(wù)管理。隨著業(yè)務(wù)的發(fā)展,系統(tǒng)內(nèi)功能的優(yōu)化調(diào)整、系統(tǒng)間功能的調(diào)用和數(shù)據(jù)的交流非常普遍的,傳輸勘察系統(tǒng)和資源系統(tǒng)必須進(jìn)行有效地資源整合。系統(tǒng)是作為依附于業(yè)務(wù)的發(fā)展而建設(shè)的系統(tǒng),由不同時(shí)間階段、不同開(kāi)發(fā)團(tuán)隊(duì)開(kāi)發(fā)完成,并且傳輸勘察系統(tǒng)和資源系統(tǒng)采用了不同的技術(shù)路線。為了解決以上問(wèn)題并使應(yīng)用系統(tǒng)在將來(lái)業(yè)務(wù)拓展時(shí)有良好的應(yīng)對(duì)能力,我們采用了微服務(wù)架構(gòu)的思想作為改造思路,而Spring Cloud框架作為在云部署、虛擬化方面均有優(yōu)異輸出的分布式應(yīng)用系統(tǒng)框架是實(shí)現(xiàn)微服務(wù)架構(gòu)的最佳解決方案。
基于傳輸勘察系統(tǒng)和資源系統(tǒng)的現(xiàn)狀和將來(lái)的發(fā)展趨勢(shì),我們?cè)O(shè)計(jì)了如圖2的系統(tǒng)框架。
將各功能模塊封裝成微服務(wù)并部署在獨(dú)立的服務(wù)器中,各微服務(wù)提供服務(wù)接口注冊(cè)在Eureka Server服務(wù)注冊(cè)中心中;微服務(wù)之間消息的管理和傳播由Rabbit MQ完成,并部署負(fù)責(zé)鏈路監(jiān)控分析的服務(wù)監(jiān)控系統(tǒng)運(yùn)行情況;對(duì)系統(tǒng)的訪問(wèn)由基于Zuul Proxy的網(wǎng)關(guān)進(jìn)行轉(zhuǎn)發(fā)。
通過(guò)采用Spring Cloud框架對(duì)業(yè)務(wù)系統(tǒng)的改造,將業(yè)務(wù)功能復(fù)雜、耦合度高、系統(tǒng)維護(hù)成本大的系統(tǒng)改造成了獨(dú)立部署、耦合度低、業(yè)務(wù)功能組件化的分布式系統(tǒng),為系統(tǒng)的運(yùn)營(yíng)維護(hù)節(jié)省了極大的成本。隨著業(yè)務(wù)的發(fā)展,無(wú)論是新功能的增減還是業(yè)務(wù)邏輯的優(yōu)化,業(yè)務(wù)系統(tǒng)都能夠做到快速響應(yīng),敏捷開(kāi)發(fā),靈活配置,快速部署,獨(dú)立運(yùn)行,為業(yè)務(wù)的發(fā)展提供了快速有力的支持。
參考文獻(xiàn)
[1]Fowler M,Lewis J.Microservices.https://martinfowler.com/articles/microservices.html.articles/microservices.html.[2014-03-25].
[2]王磊.微服務(wù)架構(gòu)與實(shí)踐[M]. 北京:電子工業(yè)出版社,2015.
[3]周立.Spring Cloud與Docker微服務(wù)架構(gòu)實(shí)戰(zhàn)[M].北京:電子工業(yè)出版社,2017(05).