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

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

Spring Cloud都有哪些組件?

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

好口碑IT培訓(xùn)

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

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

Hystrix: 熔斷器

Feign: 遠程調(diào)用

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

Spring Cloud Config: 配置中心

(1)Eureka

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

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

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

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

提供者:啟動后向Eureka注冊自己信息(地址,服務(wù)名稱等),并且定期進行服務(wù)續(xù)約

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

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

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

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

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

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

Eureka每個60秒會剔除標(biāo)記為宕機的服務(wù)

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

Eureka高可用就是多臺Eureka互相注冊在對方上.

(2)Ribbon

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

簡單來說, 它是一個客戶端負載均衡器, 它會自動通過某種算法去分配你要連接的機器.

SpringCloud認為Ribbon這種功能很好, 就對它進行了封裝, 從而完成負載均衡.

Ribbon默認負責(zé)均衡策略是輪詢策略.

(3)Hystrix熔斷器

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

解決因為一個服務(wù)崩潰而引起的一系列問題, 使問題只局限于這個服務(wù)中,不會影響其他服務(wù).

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

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

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

服務(wù)熔斷原理

狀態(tài)機有3個狀態(tài):

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

GatewayFilter:局部過濾器,針對單個路由

GatewayFilter 局部過濾器,是針對單個路由的過濾器。

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

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

GlobalFilter :全局過濾器,針對所有路由.

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

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

自定義全局過濾器步驟:

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

復(fù)寫方法

完成邏輯處理

(6)Spring Cloud Config

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

0 分享到:
和我們在線交談!