溫馨提示×

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

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

Spring Cloud微服務(wù)架構(gòu)簡(jiǎn)介

發(fā)布時(shí)間:2020-06-15 17:30:24 來源:網(wǎng)絡(luò) 閱讀:14647 作者:FighterLiu 欄目:軟件技術(shù)

最近閱讀了周立的《Spring Cloud與Docker》收獲挺大的,抽了一點(diǎn)時(shí)間對(duì)書中的內(nèi)容做了總結(jié)。方便大家快速了解什么是Spring Cloud,Spring Cloud主要的功能及Spring Cloud服務(wù)治理。如下博客的內(nèi)容都出自這本書。
什么是微服務(wù)

微服務(wù)架構(gòu)風(fēng)格是一種將一個(gè)單一應(yīng)用程序開發(fā)為一組小型服務(wù)的方法,每個(gè)服務(wù)運(yùn)行在自己的進(jìn)程中,服務(wù)間通信采用輕量級(jí)通信機(jī)制(通常用HTTP資源API)。這些服務(wù)圍繞業(yè)務(wù)能力構(gòu)建并且可通過全自動(dòng)部署機(jī)制獨(dú)立部署。這些服務(wù)共用一個(gè)最小型的集中式的管理,服務(wù)可用不同的語言開發(fā),使用不同的數(shù)據(jù)存儲(chǔ)技術(shù)。
微服務(wù)架構(gòu)應(yīng)該具備以下特性:

  • 每個(gè)微服務(wù)可獨(dú)立運(yùn)行在自己的進(jìn)程里。

  • 一系列獨(dú)立運(yùn)行的微服務(wù)共同構(gòu)建起整個(gè)系統(tǒng)。

  • 每個(gè)服務(wù)為獨(dú)立的業(yè)務(wù)開發(fā),一個(gè)微服務(wù)只關(guān)注某個(gè)特定的功能,例如訂單管理,用戶管理等。

  • 微服務(wù)之間通過一些輕量的通信機(jī)制進(jìn)行通信,例如通過RESTful API進(jìn)行調(diào)用。

  • 可以使用不同的語言與數(shù)據(jù)存儲(chǔ)技術(shù)

  • 全自動(dòng)部署機(jī)制

微服務(wù)架構(gòu)的優(yōu)點(diǎn)
易于開發(fā)和維護(hù)

  • 一個(gè)微服務(wù)只會(huì)關(guān)注一個(gè)特定的業(yè)務(wù)功能,所以它業(yè)務(wù)清晰,代碼量較少。

單個(gè)微服務(wù)啟動(dòng)較快

  • 單個(gè)微服務(wù)代碼量較少,所以啟動(dòng)會(huì)比較快。

局部修改容易部署

  • 單體應(yīng)用只要有修改,就得重新部署整個(gè)應(yīng)用,微服務(wù)解決了這樣的問題。

技術(shù)棧不受限

  • 在微服務(wù)架構(gòu)中,可以結(jié)合項(xiàng)目業(yè)務(wù)及團(tuán)隊(duì)的特點(diǎn),合理地選擇技術(shù)棧。

按需伸縮

  • 可根據(jù)需求,實(shí)現(xiàn)細(xì)粒度的擴(kuò)展。

微服務(wù)架構(gòu)面臨的挑戰(zhàn)
運(yùn)維要求高

  • 更多的服務(wù)意味著更多的運(yùn)維投入。

分布式固有的復(fù)雜性

  • 使用微服務(wù)架構(gòu)是分布式系統(tǒng)。對(duì)于一個(gè)分布式系統(tǒng),系統(tǒng)容錯(cuò),網(wǎng)絡(luò)延遲,分布式事務(wù)等都會(huì)帶來巨大的挑戰(zhàn)。

接口調(diào)整成本高

  • 微服務(wù)之間通過接口進(jìn)行通信。如果修改某一個(gè)微服務(wù)的API,可能所有使用了該接口的微服務(wù)都需要做調(diào)整。

重復(fù)勞動(dòng)

  • 很多服務(wù)可能都會(huì)使用到相同的功能,而這個(gè)功能并沒有達(dá)到分解為一個(gè)微服務(wù)的程度,這個(gè)時(shí)候,可能各個(gè)服務(wù)都會(huì)開發(fā)這一功能,從而導(dǎo)致代碼重復(fù)。

微服務(wù)整體架構(gòu)圖
Spring Cloud微服務(wù)架構(gòu)簡(jiǎn)介

服務(wù)注冊(cè)于發(fā)現(xiàn)

各個(gè)服務(wù)在啟動(dòng)時(shí),將自己的網(wǎng)絡(luò)地址等信息注冊(cè)到服務(wù)發(fā)現(xiàn)組件中,服務(wù)發(fā)現(xiàn)組件會(huì)存儲(chǔ)這些信息。

服務(wù)消費(fèi)者可以從服務(wù)發(fā)現(xiàn)組件查詢服務(wù)提供者的網(wǎng)絡(luò)地址,并使用該地址調(diào)用服務(wù)提供者的接口。

各個(gè)微服務(wù)與服務(wù)發(fā)現(xiàn)組件使用一定機(jī)制(例如心跳)通信。服務(wù)發(fā)現(xiàn)組件如長(zhǎng)時(shí)間無法與某為服務(wù)實(shí)例通信,就會(huì)注銷該實(shí)例。

微服務(wù)網(wǎng)絡(luò)地址發(fā)生變更(例如實(shí)例增減或者IP端口發(fā)生變化等)時(shí),會(huì)重新注冊(cè)到服務(wù)發(fā)現(xiàn)組件。使用這種方式,服務(wù)消費(fèi)者就無須人工修改提供者的網(wǎng)絡(luò)地址了。
Spring Cloud微服務(wù)架構(gòu)簡(jiǎn)介
Fegion實(shí)現(xiàn)聲明式REST調(diào)用
REST(Representational State Transfer ),用中文翻譯為"具象狀態(tài)傳輸"(也有:"代表性狀態(tài)傳輸")。是由 Roy Thomas Fielding博士 在2000年就讀加州大學(xué)歐文分校期間在學(xué)術(shù)論文中提出的一個(gè)術(shù)語。REST 定義了一組體系架構(gòu)原則,您可以根據(jù)這些,包括使用不同語言編寫的客戶端如何通過 HTTP 處理和傳輸資源狀態(tài)。Feign是一個(gè)聲明式的WebService客戶端。使用Feign能讓編寫WebService客戶端更加簡(jiǎn)單,它的使用方法是定義一個(gè)接口,然后在接口上添加注解,同時(shí)也支持JAX-RS標(biāo)準(zhǔn)的注解。Feign也支持可插拔式的編碼器和×××。SpringCloud對(duì)Feign進(jìn)行了封裝,使其支持SpringMVC標(biāo)準(zhǔn)注解和HttpMessageConverters。Feign可以與Eureka和Ribbon組合使用以支持負(fù)載均衡。

使用Hystrix實(shí)現(xiàn)微服務(wù)的容錯(cuò)處理
Hystrix是由Netflix開源的一個(gè)延遲和容錯(cuò)庫,用于隔離訪問遠(yuǎn)程系統(tǒng),服務(wù)或者第三方庫,防止級(jí)聯(lián)失敗,從而提升系統(tǒng)的可用性和容錯(cuò)性。Hystrix主要通過以下幾點(diǎn)實(shí)現(xiàn)延遲和容錯(cuò)。
包裹請(qǐng)求:使用HystrixCommand包裹對(duì)依賴的調(diào)用邏輯,每個(gè)命令在獨(dú)立線程中執(zhí)行。這使用到了設(shè)計(jì)模式中的“命令模式”。

  • 跳閘機(jī)制:當(dāng)某服務(wù)的錯(cuò)誤率超過一定閾值時(shí),Hystrix可以自動(dòng)或者手動(dòng)跳閘,停止請(qǐng)求該服務(wù)一段時(shí)間。
  • 資源隔離:Hystrix為每個(gè)依賴都維護(hù)了一個(gè)小型的線程池(或者信號(hào)量)。如果該線程池已滿,發(fā)往該依賴的請(qǐng)求就被立即拒絕,而不是排隊(duì)等候,從而加速失敗判定。
  • 監(jiān)控:Hystrix可以近乎實(shí)時(shí)地監(jiān)控運(yùn)行指標(biāo)和配置變化,例如成功,失敗,超時(shí)以及被拒絕的請(qǐng)求等。
  • 回退機(jī)制:當(dāng)請(qǐng)求失敗,超時(shí),被拒絕,或當(dāng)斷路器打開時(shí),執(zhí)行回退邏輯?;赝诉壿嬁捎砷_發(fā)人員自行提供,例如返回一個(gè)缺省值。
  • 自我修復(fù):斷路器打開一段時(shí)間后,會(huì)自動(dòng)進(jìn)入“半開”狀態(tài)。

如果沒有容錯(cuò)處理,“基礎(chǔ)服務(wù)故障”導(dǎo)致“級(jí)聯(lián)故障”從而形成右邊的雪崩效應(yīng)
Spring Cloud微服務(wù)架構(gòu)簡(jiǎn)介
使用Zuul構(gòu)建微服務(wù)網(wǎng)關(guān)
Zuul是Netflix開源的微服務(wù)網(wǎng)關(guān),它可以和Eureka,Ribbon,Hystrix等組件配合使用。Zuul的核心是一系列的過濾器,這些過濾器可以完成以下功能。

  • 身份認(rèn)證與安全
  • 動(dòng)態(tài)路由
  • 壓力測(cè)試
  • 負(fù)載分配
  • 靜態(tài)響應(yīng)處理
  • 多區(qū)域彈性

Zuul大部分功能是通過過濾器實(shí)現(xiàn)的,如右圖所示。
Spring Cloud微服務(wù)架構(gòu)簡(jiǎn)介

使用Spring CloudConfig統(tǒng)一管理微服務(wù)配置
Spring Cloud Config支持在Git, SVN和本地存放配置文件,使用Git或者SVN存儲(chǔ)庫可以很好地支持版本管理,Spring默認(rèn)配置是使用Git存儲(chǔ)庫。具有如下優(yōu)點(diǎn):
集中管理配置:一個(gè)使用微服務(wù)架構(gòu)的應(yīng)用系統(tǒng)可能會(huì)包含成百上千個(gè)微服務(wù),因此幾種管理配置是非常有必要的。
不同環(huán)境不同配置:例如,數(shù)據(jù)源配置在不同的環(huán)境(開發(fā),測(cè)試,預(yù)發(fā)布,生產(chǎn)等)中是不同的。
運(yùn)行期間可動(dòng)態(tài)調(diào)整:例如可根據(jù)各個(gè)微服務(wù)的負(fù)載情況,動(dòng)態(tài)調(diào)整數(shù)據(jù)源連接池大小或熔斷閾值,并且在調(diào)整配置是不停止微服務(wù)。
配置修改后可自動(dòng)更新。如配置內(nèi)容發(fā)生變化,微服務(wù)能夠自動(dòng)更新配置。
Spring Cloud微服務(wù)架構(gòu)簡(jiǎn)介
Spring Cloud服務(wù)治理
注冊(cè)中心監(jiān)控
Spring Cloud微服務(wù)架構(gòu)簡(jiǎn)介
容錯(cuò)處理監(jiān)控
Spring Cloud微服務(wù)架構(gòu)簡(jiǎn)介
微服務(wù)健康檢查
Spring Cloud微服務(wù)架構(gòu)簡(jiǎn)介
微服務(wù)調(diào)用追蹤
Spring Cloud微服務(wù)架構(gòu)簡(jiǎ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