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

全國咨詢/投訴熱線:400-618-4000

Spring Cloud都有哪些組件?

更新時(shí)間:2022年08月01日18時(shí)23分 來源:傳智教育 瀏覽次數(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客戶端

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

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

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

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

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

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

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

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

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

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

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

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

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

(2)Ribbon

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

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

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

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

(3)Hystrix熔斷器

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

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

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

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

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

服務(wù)熔斷原理

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Gateway 還提供了兩種類型過濾器

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

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

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

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

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

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

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

自定義全局過濾器步驟:

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

復(fù)寫方法

完成邏輯處理

(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倉庫中.

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