教育行業(yè)A股IPO第一股(股票代碼 003032)

全國(guó)咨詢(xún)/投訴熱線(xiàn):400-618-4000

Spring Cloud都有哪些組件?

更新時(shí)間:2022年08月01日18時(shí)23分 來(lái)源:傳智教育 瀏覽次數(shù):

好口碑IT培訓(xùn)

Eureka: 注冊(cè)中心, 服務(wù)注冊(cè)和發(fā)現(xiàn)

Ribbon: 負(fù)載均衡, 實(shí)現(xiàn)服務(wù)調(diào)用的負(fù)載均衡

Hystrix: 熔斷器

Feign: 遠(yuǎn)程調(diào)用

Gateway: 網(wǎng)關(guān)

Spring Cloud Config: 配置中心

(1)Eureka

提供服務(wù)注冊(cè)和發(fā)現(xiàn), 是注冊(cè)中心. 有兩個(gè)組件: Eureka服務(wù)端和Eureka客戶(hù)端

Eureka服務(wù)端: 作為服務(wù)的注冊(cè)中心, 用來(lái)提供服務(wù)注冊(cè), 支持集群部署.

Eureka客戶(hù)端: 是一個(gè)java客戶(hù)端, 將服務(wù)注冊(cè)到服務(wù)端, 同事將服務(wù)端的信息緩存到本地, 客戶(hù)端和服務(wù)端定時(shí)交互。

Eureka-Server:就是服務(wù)注冊(cè)中心(可以是一個(gè)集群),對(duì)外暴露自己的地址。

提供者:?jiǎn)?dòng)后向Eureka注冊(cè)自己信息(地址,服務(wù)名稱(chēng)等),并且定期進(jìn)行服務(wù)續(xù)約

消費(fèi)者:服務(wù)調(diào)用方,會(huì)定期去Eureka拉取服務(wù)列表,然后使用負(fù)載均衡算法選出一個(gè)服務(wù)進(jìn)行調(diào)用。

心跳(續(xù)約):提供者定期通過(guò)http方式向Eureka刷新自己的狀態(tài)

服務(wù)下線(xiàn)、失效剔除和自我保護(hù)

服務(wù)的注冊(cè)和發(fā)現(xiàn)都是可控制的,可以關(guān)閉也可以開(kāi)啟。默認(rèn)都是開(kāi)啟

注冊(cè)后需要心跳,心跳周期默認(rèn)30秒一次,超過(guò)90秒沒(méi)發(fā)心跳認(rèn)為宕機(jī)

服務(wù)拉取默認(rèn)30秒拉取一次.

Eureka每個(gè)60秒會(huì)剔除標(biāo)記為宕機(jī)的服務(wù)

Eureka會(huì)有自我保護(hù),當(dāng)心跳失敗比例超過(guò)閾值(默認(rèn)85%),那么開(kāi)啟自我保護(hù),不再剔除服務(wù)。

Eureka高可用就是多臺(tái)Eureka互相注冊(cè)在對(duì)方上.

(2)Ribbon

Ribbon是Netflix發(fā)布的云中服務(wù)開(kāi)源項(xiàng)目. 給客戶(hù)端提供負(fù)載均衡, 也就是說(shuō)Ribbon是作用在消費(fèi)者方的.

簡(jiǎn)單來(lái)說(shuō), 它是一個(gè)客戶(hù)端負(fù)載均衡器, 它會(huì)自動(dòng)通過(guò)某種算法去分配你要連接的機(jī)器.

SpringCloud認(rèn)為Ribbon這種功能很好, 就對(duì)它進(jìn)行了封裝, 從而完成負(fù)載均衡.

Ribbon默認(rèn)負(fù)責(zé)均衡策略是輪詢(xún)策略.

(3)Hystrix熔斷器

有時(shí)候可能是網(wǎng)絡(luò)問(wèn)題, 一些其它問(wèn)題, 導(dǎo)致代碼無(wú)法正常運(yùn)行, 這是服務(wù)就掛了, 崩潰了. 熔斷器就是為了解決無(wú)法正常訪問(wèn)服務(wù)的時(shí), 提供的一種解決方案.

解決因?yàn)橐粋€(gè)服務(wù)崩潰而引起的一系列問(wèn)題, 使問(wèn)題只局限于這個(gè)服務(wù)中,不會(huì)影響其他服務(wù).

Hystrix提供了兩種功能, 一種是服務(wù)降級(jí), 一種是服務(wù)熔斷.

服務(wù)降級(jí)原理Hystrix為每個(gè)服務(wù)分配了小的線(xiàn)程池, 當(dāng)用戶(hù)發(fā)請(qǐng)求過(guò)來(lái), 會(huì)通過(guò)線(xiàn)程池創(chuàng)建線(xiàn)程來(lái)執(zhí)行任務(wù), 當(dāng)創(chuàng)建的線(xiàn)程池已滿(mǎn)或者請(qǐng)求超時(shí)(這里和多線(xiàn)程線(xiàn)程池不一樣,不存在任務(wù)隊(duì)列), 則啟動(dòng)服務(wù)降級(jí)功能.

降級(jí)指的請(qǐng)求故障時(shí), 不會(huì)阻塞, 會(huì)返回一個(gè)友好提示(可以自定義, 例如網(wǎng)站維護(hù)中請(qǐng)稍后重試), 也就是說(shuō)不會(huì)影響其他服務(wù)的運(yùn)行.

服務(wù)熔斷原理

狀態(tài)機(jī)有3個(gè)狀態(tài):

Closed:關(guān)閉狀態(tài)(斷路器關(guān)閉),所有請(qǐng)求都正常訪問(wèn)。

Open:打開(kāi)狀態(tài)(斷路器打開(kāi)),所有請(qǐng)求都會(huì)被降級(jí)。Hystix會(huì)對(duì)請(qǐng)求情況計(jì)數(shù),當(dāng)一定時(shí)間內(nèi)失敗請(qǐng)求百分比達(dá)到閾值,則觸發(fā)熔斷,斷路器會(huì)完全打開(kāi)。默認(rèn)失敗比例的閾值是50%,請(qǐng)求次數(shù)最少不低于20次。

Half Open:半開(kāi)狀態(tài),open狀態(tài)不是永久的,打開(kāi)后會(huì)進(jìn)入休眠時(shí)間(默認(rèn)是5S)。隨后斷路器會(huì)自動(dòng)進(jìn)入半開(kāi)狀態(tài)。此時(shí)會(huì)釋放1次請(qǐng)求通過(guò),若這個(gè)請(qǐng)求是健康的,則會(huì)關(guān)閉斷路器,否則繼續(xù)保持打開(kāi),再次進(jìn)行5秒休眠計(jì)時(shí)。

(4)Feign: 遠(yuǎn)程調(diào)用組件

后臺(tái)系統(tǒng)中, 微服務(wù)和微服務(wù)之間的調(diào)用可以通過(guò)Feign組件來(lái)完成.

Feign組件集成了Ribbon負(fù)載均衡策略(默認(rèn)開(kāi)啟的, 使用輪詢(xún)機(jī)制), Hystrix熔斷器(默認(rèn)關(guān)閉的, 需要通過(guò)配置文件進(jìn)行設(shè)置開(kāi)啟)

被調(diào)用的微服務(wù)需要提供一個(gè)接口, 加上@@FeignClient("url")注解

調(diào)用方需要在啟動(dòng)類(lèi)上加上@EnableFeignClients, 開(kāi)啟Feign組件功能.

(5)Gateway: 路由/網(wǎng)關(guān)

對(duì)于項(xiàng)目后臺(tái)的微服務(wù)系統(tǒng), 每一個(gè)微服務(wù)都不會(huì)直接暴露給用戶(hù)來(lái)調(diào)用的, 但是如果用戶(hù)知道了某一個(gè)服務(wù)的ip:端口號(hào):url:訪問(wèn)參數(shù), 就能直接訪問(wèn)你. 如果再是惡意訪問(wèn),惡意攻擊, 就會(huì)擊垮后臺(tái)微服務(wù)系統(tǒng).因此, 需要一個(gè)看大門(mén)的大boss, 來(lái)保護(hù)我們的后臺(tái)系統(tǒng).

Gateway 支持過(guò)濾器功能,對(duì)請(qǐng)求或響應(yīng)進(jìn)行攔截,完成一些通用操作。

Gateway 提供兩種過(guò)濾器方式:“pre”和“post”

pre 過(guò)濾器,在轉(zhuǎn)發(fā)之前執(zhí)行,可以做參數(shù)校驗(yàn)、權(quán)限校驗(yàn)、流量監(jiān)控、日志輸出、協(xié)議轉(zhuǎn)換等。?

post 過(guò)濾器,在后端微服務(wù)響應(yīng)之后并且給前端響應(yīng)之前執(zhí)行,可以做響應(yīng)內(nèi)容、響應(yīng)頭的修改,日志的輸出,流量監(jiān)控等。

Gateway 還提供了兩種類(lèi)型過(guò)濾器

GatewayFilter:局部過(guò)濾器,針對(duì)單個(gè)路由

GatewayFilter 局部過(guò)濾器,是針對(duì)單個(gè)路由的過(guò)濾器。

在Spring Cloud Gateway 組件中提供了大量?jī)?nèi)置的局部過(guò)濾器,對(duì)請(qǐng)求和響應(yīng)做過(guò)濾操作。

遵循約定大于配置的思想,只需要在配置文件配置局部過(guò)濾器名稱(chēng),并為其指定對(duì)應(yīng)的值,就可以讓其生效.

GlobalFilter :全局過(guò)濾器,針對(duì)所有路由.

GlobalFilter 全局過(guò)濾器,不需要在配置文件中配置,系統(tǒng)初始化時(shí)加載,并作用在每個(gè)路由上。

Spring Cloud Gateway 核心的功能也是通過(guò)內(nèi)置的全局過(guò)濾器來(lái)完成。

自定義全局過(guò)濾器步驟:

定義類(lèi)實(shí)現(xiàn) GlobalFilter 和 Ordered接口

復(fù)寫(xiě)方法

完成邏輯處理

(6)Spring Cloud Config

在分布式系統(tǒng)中,由于服務(wù)數(shù)量巨多,為了方便服務(wù)配置文件統(tǒng)一管理,實(shí)時(shí)更新,所以需要分布式配置中心組件。在Spring Cloud中,有分布式配置中心組件spring Cloud Config ,它支持配置服務(wù)放在配置服務(wù)的內(nèi)存中(即本地),也支持放在遠(yuǎn)程Git倉(cāng)庫(kù)中.

0 分享到:
和我們?cè)诰€(xiàn)交談!