教育行業(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秒會剔除標記為宕機的服務(wù)

Eureka會有自我保護,當心跳失敗比例超過閾值(默認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ù)分配了小的線程池, 當用戶發(fā)請求過來, 會通過線程池創(chuàng)建線程來執(zhí)行任務(wù), 當創(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ù),當一定時間內(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 分享到:
和我們在線交談!