Spring Cloud都有哪些組件?

黑馬程序員 發佈 2024-03-14T11:00:07.414814+00:00

Eureka: 註冊中心, 服務註冊和發現Ribbon: 負載均衡, 實現服務調用的負載均衡Hystrix: 熔斷器Feign: 遠程調用Gateway: 網關Spring Cloud Config: 配置中心(1)Eureka提供服務註冊和發現, 是註冊中心.

Eureka: 註冊中心, 服務註冊和發現

Ribbon: 負載均衡, 實現服務調用的負載均衡

Hystrix: 熔斷器

Feign: 遠程調用

Gateway: 網關

Spring Cloud Config: 配置中心

(1)Eureka

提供服務註冊和發現, 是註冊中心. 有兩個組件: Eureka服務端和Eureka客戶端

Eureka服務端: 作為服務的註冊中心, 用來提供服務註冊, 支持集群部署.

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

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

提供者:啟動後向Eureka註冊自己信息(地址,服務名稱等),並且定期進行服務續約

消費者:服務調用方,會定期去Eureka拉取服務列表,然後使用負載均衡算法選出一個服務進行調用。

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

服務下線、失效剔除和自我保護

服務的註冊和發現都是可控制的,可以關閉也可以開啟。默認都是開啟

註冊後需要心跳,心跳周期默認30秒一次,超過90秒沒發心跳認為宕機

服務拉取默認30秒拉取一次.

Eureka每個60秒會剔除標記為宕機的服務

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

Eureka高可用就是多台Eureka互相註冊在對方上.

(2)Ribbon

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

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

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

Ribbon默認負責均衡策略是輪詢策略.

(3)Hystrix熔斷器

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

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

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

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

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

服務熔斷原理

狀態機有3個狀態:

Closed:關閉狀態(斷路器關閉),所有請求都正常訪問。

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

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

(4)Feign: 遠程調用組件

後台系統中, 微服務和微服務之間的調用可以通過Feign組件來完成.

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

被調用的微服務需要提供一個接口, 加上@@FeignClient("url")註解

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

(5)Gateway: 路由/網關

對於項目後台的微服務系統, 每一個微服務都不會直接暴露給用戶來調用的, 但是如果用戶知道了某一個服務的ip:埠號:url:訪問參數, 就能直接訪問你. 如果再是惡意訪問,惡意攻擊, 就會擊垮後台微服務系統.因此, 需要一個看大門的大boss, 來保護我們的後台系統.

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

Gateway 提供兩種過濾器方式:「pre」和「post」

pre 過濾器,在轉發之前執行,可以做參數校驗、權限校驗、流量監控、日誌輸出、協議轉換等。

post 過濾器,在後端微服務響應之後並且給前端響應之前執行,可以做響應內容、響應頭的修改,日誌的輸出,流量監控等。

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

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

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

在Spring Cloud Gateway 組件中提供了大量內置的局部過濾器,對請求和響應做過濾操作。

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

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

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

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

自定義全局過濾器步驟:

定義類實現 GlobalFilter 和 Ordered接口

複寫方法

完成邏輯處理

(6)Spring Cloud Config

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

關鍵字: