溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

用SpringCloud進(jìn)行微服務(wù)架構(gòu)演進(jìn)

發(fā)布時(shí)間:2020-07-20 07:45:04 來源:網(wǎng)絡(luò) 閱讀:416 作者:歡醉 欄目:云計(jì)算

  在《架構(gòu)師必須要知道的阿里的中臺(tái)戰(zhàn)略與微服務(wù)》 中已經(jīng)闡明選擇SpringCloud進(jìn)行微服務(wù)架構(gòu)實(shí)現(xiàn)中臺(tái)戰(zhàn)略,因此下面介紹SpringCloud的一些內(nèi)容,SpringCloud已經(jīng)出來了很多年,網(wǎng)上資料一大堆,這里推薦 程序猿DD 的博客http://blog.didispace.com/  關(guān)于SpringCloud微服務(wù)各組件內(nèi)容等做了非常詳細(xì)的介紹,適合入門的來學(xué)習(xí)。

  Spring Cloud是基于Spring Boot的,因此還在使用SpringMVC的同學(xué)要先了解Spring Boot。先上一段官話,Spring Cloud是一個(gè)基于Spring Boot實(shí)現(xiàn)的云應(yīng)用開發(fā)工具,它為基于JVM的云應(yīng)用開發(fā)中涉及的配置管理、服務(wù)發(fā)現(xiàn)、斷路器、智能路由、微代理、控制總線、全局鎖、決策競(jìng)選、分布式會(huì)話和集群狀態(tài)管理等操作提供了一種簡(jiǎn)單的開發(fā)框架。

  Spring Cloud并沒有重復(fù)制造輪子,它只是將目前各家公司開發(fā)的比較成熟、經(jīng)得起實(shí)際考驗(yàn)的服務(wù)框架組合起來,通過Spring Boot風(fēng)格進(jìn)行再封裝屏蔽掉了復(fù)雜的配置和實(shí)現(xiàn)原理,最終給開發(fā)者留出了一套簡(jiǎn)單易懂、易部署和易維護(hù)的分布式系統(tǒng)開發(fā)工具包。

用SpringCloud進(jìn)行微服務(wù)架構(gòu)演進(jìn)

Spring Cloud全家桶

  上面的圖是Spring Cloud的全家桶,包羅萬象,猶如水電,涉及到開發(fā)的方方頁面。

  Spring Cloud從設(shè)計(jì)之初就考慮了絕大多數(shù)互聯(lián)網(wǎng)公司架構(gòu)演化所需的功能,如服務(wù)發(fā)現(xiàn)注冊(cè)、配置中心、消息總線、負(fù)載均衡、斷路器、數(shù)據(jù)監(jiān)控等。

首先是核心服務(wù)治理的組件(服務(wù)注冊(cè)與發(fā)現(xiàn))Spring Cloud Eureka

  Eureka是Netflix開源的一款提供服務(wù)注冊(cè)和發(fā)現(xiàn)的產(chǎn)品,Eureka就是一個(gè)服務(wù)中心,將所有的可以提供的服務(wù)都注冊(cè)到它這里來管理,其它各調(diào)用者需要的時(shí)候去注冊(cè)中心獲取,然后再進(jìn)行調(diào)用,避免了服務(wù)之間的直接調(diào)用,方便后續(xù)的水平擴(kuò)展、故障轉(zhuǎn)移等。如下圖:

  當(dāng)然服務(wù)中心這么重要的組件一但掛掉將會(huì)影響全部服務(wù),因此需要搭建Eureka集群來保持高可用性,生產(chǎn)中建議最少兩臺(tái)。隨著系統(tǒng)的流量不斷增加,需要根據(jù)情況來擴(kuò)展某個(gè)服務(wù),Eureka內(nèi)部已經(jīng)提供均衡負(fù)載的功能,只需要增加相應(yīng)的服務(wù)端實(shí)例既可。那么在系統(tǒng)的運(yùn)行期間某個(gè)實(shí)例掛了怎么辦?Eureka內(nèi)容有一個(gè)心跳檢測(cè)機(jī)制,如果某個(gè)實(shí)例在規(guī)定的時(shí)間內(nèi)沒有進(jìn)行通訊則會(huì)自動(dòng)被剔除掉,避免了某個(gè)實(shí)例掛掉而影響服務(wù)。
  因此使用了Eureka就自動(dòng)具有了注冊(cè)中心、負(fù)載均衡、故障轉(zhuǎn)移的功能。

  當(dāng)然還有另外一個(gè)實(shí)現(xiàn)組件Spring Cloud Consul,這里不做多介紹。

  隨著微服務(wù)不斷的增多,每個(gè)微服務(wù)都有自己對(duì)應(yīng)的配置文件。在研發(fā)過程中有測(cè)試環(huán)境、UAT環(huán)境、生產(chǎn)環(huán)境,因此每個(gè)微服務(wù)又對(duì)應(yīng)至少三個(gè)不同環(huán)境的配置文件。這么多的配置文件,如果需要修改某個(gè)公共服務(wù)的配置信息,如:緩存、數(shù)據(jù)庫等,難免會(huì)產(chǎn)生混亂,這個(gè)時(shí)候就需要引入Spring Cloud另外一個(gè)組件:Spring Cloud Config。

Spring Cloud Config

  Spring Cloud Config是一個(gè)解決分布式系統(tǒng)的配置管理方案。它包含了Client和Server兩個(gè)部分,其實(shí)就是Server端將所有的配置文件服務(wù)化,需要配置文件的服務(wù)實(shí)例去Config Server獲取對(duì)應(yīng)的數(shù)據(jù)。將所有的配置文件統(tǒng)一整理,避免了配置文件碎片化。

  如果服務(wù)運(yùn)行期間改變配置文件,服務(wù)是不會(huì)得到最新的配置信息,需要解決這個(gè)問題就需要引入Refresh??梢栽诜?wù)的運(yùn)行期間重新加載配置文件,當(dāng)所有的配置文件都存儲(chǔ)在配置中心的時(shí)候,配置中心就成為了一個(gè)非常重要的組件。如果配置中心出現(xiàn)問題將會(huì)導(dǎo)致災(zāi)難性的后果,因此在生產(chǎn)中建議對(duì)配置中心做集群,來支持配置中心高可用性。

Hystrix

  在微服務(wù)架構(gòu)中通常會(huì)有多個(gè)服務(wù)層調(diào)用,基礎(chǔ)服務(wù)的故障可能會(huì)導(dǎo)致級(jí)聯(lián)故障,進(jìn)而造成整個(gè)系統(tǒng)不可用的情況,這種現(xiàn)象被稱為服務(wù)雪崩效應(yīng)。

  如下圖所示:A作為服務(wù)提供者,B為A的服務(wù)消費(fèi)者,C和D是B的服務(wù)消費(fèi)者。A不可用引起了B的不可用,并將不可用像滾雪球一樣放大到C和D時(shí),雪崩效應(yīng)就形成了。

用SpringCloud進(jìn)行微服務(wù)架構(gòu)演進(jìn) 

  在這種情況下就需要整個(gè)服務(wù)機(jī)構(gòu)具有故障隔離的功能,避免某一個(gè)服務(wù)掛掉影響全局。在Spring Cloud 中Hystrix組件就扮演這個(gè)角色。

  Hystrix會(huì)在某個(gè)服務(wù)連續(xù)調(diào)用N次不響應(yīng)的情況下,立即通知調(diào)用端調(diào)用失敗,避免調(diào)用端持續(xù)等待而影響了整體服務(wù)。Hystrix間隔時(shí)間會(huì)再次檢查此服務(wù),如果服務(wù)恢復(fù)將繼續(xù)提供服務(wù)。

Hystrix Dashboard和Turbine

  當(dāng)熔斷發(fā)生的時(shí)候需要迅速的響應(yīng)來解決問題,避免故障進(jìn)一步擴(kuò)散,那么對(duì)熔斷的監(jiān)控就變得非常重要。熔斷的監(jiān)控現(xiàn)在有兩款工具:Hystrix-dashboard和Turbine。

  Hystrix-dashboard是一款針對(duì)Hystrix進(jìn)行實(shí)時(shí)監(jiān)控的工具,通過Hystrix Dashboard我們可以直觀地看到各Hystrix Command的請(qǐng)求響應(yīng)時(shí)間, 請(qǐng)求成功率等數(shù)據(jù)。但是只使用Hystrix Dashboard的話, 你只能看到單個(gè)應(yīng)用內(nèi)的服務(wù)信息, 這明顯不夠. 我們需要一個(gè)工具能讓我們匯總系統(tǒng)內(nèi)多個(gè)服務(wù)的數(shù)據(jù)并顯示到Hystrix Dashboard上, 這個(gè)工具就是Turbine. 監(jiān)控的效果圖如下:

用SpringCloud進(jìn)行微服務(wù)架構(gòu)演進(jìn)

Spring Cloud Bus消息總線

  Refresh方案雖然可以解決單個(gè)微服務(wù)運(yùn)行期間重載配置信息的問題,但是在真正的實(shí)踐生產(chǎn)中,可能會(huì)有N多的服務(wù)需要更新配置,如果每次依靠手動(dòng)Refresh將是一個(gè)巨大的工作量,這時(shí)候Spring Cloud提出了另外一個(gè)解決方案:Spring Cloud Bus
  Spring Cloud Bus通過輕量消息代理連接各個(gè)分布的節(jié)點(diǎn)。這會(huì)用在廣播狀態(tài)的變化(例如配置變化)或者其它的消息指令中。Spring Cloud Bus的一個(gè)核心思想是通過分布式的啟動(dòng)器對(duì)Spring Boot應(yīng)用進(jìn)行擴(kuò)展,也可以用來建立一個(gè)或多個(gè)應(yīng)用之間的通信頻道。目前唯一實(shí)現(xiàn)的方式是用AMQP消息代理作為通道。
  Spring Cloud Bus是輕量級(jí)的通訊組件,也可以用在其它類似的場(chǎng)景中。有了Spring Cloud Bus之后,當(dāng)我們改變配置文件提交到版本庫中時(shí),會(huì)自動(dòng)的觸發(fā)對(duì)應(yīng)實(shí)例的Refresh,具體的工作流程如下:

用SpringCloud進(jìn)行微服務(wù)架構(gòu)演進(jìn)

服務(wù)網(wǎng)關(guān)

  在微服務(wù)架構(gòu)模式下,后端服務(wù)的實(shí)例數(shù)一般是動(dòng)態(tài)的,對(duì)于客戶端而言很難發(fā)現(xiàn)動(dòng)態(tài)改變的服務(wù)實(shí)例的訪問地址信息。因此在基于微服務(wù)的項(xiàng)目中為了簡(jiǎn)化前端的調(diào)用邏輯,通常會(huì)引入API Gateway作為輕量級(jí)網(wǎng)關(guān),同時(shí)API Gateway中也會(huì)實(shí)現(xiàn)相關(guān)的認(rèn)證邏輯從而簡(jiǎn)化內(nèi)部服務(wù)之間相互調(diào)用的復(fù)雜度。 

用SpringCloud進(jìn)行微服務(wù)架構(gòu)演進(jìn)

  Spring Cloud體系中支持API Gateway落地的技術(shù)就是Zuul。Spring Cloud Zuul路由是微服務(wù)架構(gòu)中不可或缺的一部分,提供動(dòng)態(tài)路由,監(jiān)控,彈性,安全等的邊緣服務(wù)。Zuul是Netflix出品的一個(gè)基于JVM路由和服務(wù)端的負(fù)載均衡器。它的具體作用就是服務(wù)轉(zhuǎn)發(fā),接收并轉(zhuǎn)發(fā)所有內(nèi)外部的客戶端調(diào)用。使用Zuul可以作為資源的統(tǒng)一訪問入口,同時(shí)也可以在網(wǎng)關(guān)做一些權(quán)限校驗(yàn)等類似的功能。

鏈路跟蹤

  隨著服務(wù)的越來越多,對(duì)調(diào)用鏈的分析會(huì)越來越復(fù)雜,如服務(wù)之間的調(diào)用關(guān)系、某個(gè)請(qǐng)求對(duì)應(yīng)的調(diào)用鏈、調(diào)用之間消費(fèi)的時(shí)間等,對(duì)這些信息進(jìn)行監(jiān)控就成為一個(gè)問題。在實(shí)際的使用中我們需要監(jiān)控服務(wù)和服務(wù)之間通訊的各項(xiàng)指標(biāo),這些數(shù)據(jù)將是我們改進(jìn)系統(tǒng)架構(gòu)的主要依據(jù)。因此分布式的鏈路跟蹤就變的非常重要,Spring Cloud也給出了具體的解決方案:Spring Cloud Sleuth和Zipkin
用SpringCloud進(jìn)行微服務(wù)架構(gòu)演進(jìn)

  Spring Cloud Sleuth為服務(wù)之間調(diào)用提供鏈路追蹤。通過Sleuth可以很清楚的了解到一個(gè)服務(wù)請(qǐng)求經(jīng)過了哪些服務(wù),每個(gè)服務(wù)處理花費(fèi)了多長(zhǎng)時(shí)間。從而讓我們可以很方便的理清各微服務(wù)間的調(diào)用關(guān)系。分布式鏈路跟蹤需要Sleuth+Zipkin結(jié)合來實(shí)現(xiàn),當(dāng)然實(shí)現(xiàn)鏈路追蹤的還有三方開源方案,如果zipkin實(shí)現(xiàn)的功能非常簡(jiǎn)單,圖形化能力也不強(qiáng),所以可以試試其它的方案,如pinpoint較成熟的框架等。

Feign

  聲明式遠(yuǎn)程調(diào)度組件。

Ribbon

  負(fù)載均衡組件

Spring Cloud Data Flow

  大數(shù)據(jù)操作組件,它是Spring XD的替代品,也是一個(gè)混合計(jì)算模型,可以通過命令行的方式操作數(shù)據(jù)流

Spring Cloud Task

  組件基于Spring Tsak,提供任務(wù)調(diào)度和任務(wù)管理的功能

  以上只介紹經(jīng)常用到非常重要的內(nèi)容,一般的技術(shù)棧為 SpringCloud +GitLab+Jinkins進(jìn)行普通服務(wù)的開發(fā)持續(xù)集成部署CI,后面可升級(jí)用SpingCloud +GitLab+Jinkins+Docker容器化布署,進(jìn)一步升級(jí)到用 SpingCloud +GitLab+Jinkins+Docker+k8s自動(dòng)化容器編排內(nèi)容,這里的難度等級(jí)就完全不一樣了,而且每一個(gè)組件都涉及到很多內(nèi)容,傳統(tǒng)業(yè)務(wù)如何進(jìn)行微服務(wù)的拆分下次再進(jìn)行討論。 

 


向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI