更新時間:2022年08月01日18時23分 來源:傳智教育 瀏覽次數(shù):
Eureka: 注冊中心, 服務注冊和發(fā)現(xiàn)
Ribbon: 負載均衡, 實現(xiàn)服務調用的負載均衡
Hystrix: 熔斷器
Feign: 遠程調用
Gateway: 網(wǎng)關
Spring Cloud Config: 配置中心
(1)Eureka
提供服務注冊和發(fā)現(xiàn), 是注冊中心. 有兩個組件: Eureka服務端和Eureka客戶端
Eureka服務端: 作為服務的注冊中心, 用來提供服務注冊, 支持集群部署.
Eureka客戶端: 是一個java客戶端, 將服務注冊到服務端, 同事將服務端的信息緩存到本地, 客戶端和服務端定時交互。
Eureka-Server:就是服務注冊中心(可以是一個集群),對外暴露自己的地址。
提供者:啟動后向Eureka注冊自己信息(地址,服務名稱等),并且定期進行服務續(xù)約
消費者:服務調用方,會定期去Eureka拉取服務列表,然后使用負載均衡算法選出一個服務進行調用。
心跳(續(xù)約):提供者定期通過http方式向Eureka刷新自己的狀態(tài)
服務下線、失效剔除和自我保護
服務的注冊和發(fā)現(xiàn)都是可控制的,可以關閉也可以開啟。默認都是開啟
注冊后需要心跳,心跳周期默認30秒一次,超過90秒沒發(fā)心跳認為宕機
服務拉取默認30秒拉取一次.
Eureka每個60秒會剔除標記為宕機的服務
Eureka會有自我保護,當心跳失敗比例超過閾值(默認85%),那么開啟自我保護,不再剔除服務。
Eureka高可用就是多臺Eureka互相注冊在對方上.
(2)Ribbon
Ribbon是Netflix發(fā)布的云中服務開源項目. 給客戶端提供負載均衡, 也就是說Ribbon是作用在消費者方的.
簡單來說, 它是一個客戶端負載均衡器, 它會自動通過某種算法去分配你要連接的機器.
SpringCloud認為Ribbon這種功能很好, 就對它進行了封裝, 從而完成負載均衡.
Ribbon默認負責均衡策略是輪詢策略.
(3)Hystrix熔斷器
有時候可能是網(wǎng)絡問題, 一些其它問題, 導致代碼無法正常運行, 這是服務就掛了, 崩潰了. 熔斷器就是為了解決無法正常訪問服務的時, 提供的一種解決方案.
解決因為一個服務崩潰而引起的一系列問題, 使問題只局限于這個服務中,不會影響其他服務.
Hystrix提供了兩種功能, 一種是服務降級, 一種是服務熔斷.
服務降級原理Hystrix為每個服務分配了小的線程池, 當用戶發(fā)請求過來, 會通過線程池創(chuàng)建線程來執(zhí)行任務, 當創(chuàng)建的線程池已滿或者請求超時(這里和多線程線程池不一樣,不存在任務隊列), 則啟動服務降級功能.
降級指的請求故障時, 不會阻塞, 會返回一個友好提示(可以自定義, 例如網(wǎng)站維護中請稍后重試), 也就是說不會影響其他服務的運行.
服務熔斷原理
狀態(tài)機有3個狀態(tài):
Closed:關閉狀態(tài)(斷路器關閉),所有請求都正常訪問。
Open:打開狀態(tài)(斷路器打開),所有請求都會被降級。Hystix會對請求情況計數(shù),當一定時間內失敗請求百分比達到閾值,則觸發(fā)熔斷,斷路器會完全打開。默認失敗比例的閾值是50%,請求次數(shù)最少不低于20次。
Half Open:半開狀態(tài),open狀態(tài)不是永久的,打開后會進入休眠時間(默認是5S)。隨后斷路器會自動進入半開狀態(tài)。此時會釋放1次請求通過,若這個請求是健康的,則會關閉斷路器,否則繼續(xù)保持打開,再次進行5秒休眠計時。
(4)Feign: 遠程調用組件
后臺系統(tǒng)中, 微服務和微服務之間的調用可以通過Feign組件來完成.
Feign組件集成了Ribbon負載均衡策略(默認開啟的, 使用輪詢機制), Hystrix熔斷器(默認關閉的, 需要通過配置文件進行設置開啟)
被調用的微服務需要提供一個接口, 加上@@FeignClient("url")注解
調用方需要在啟動類上加上@EnableFeignClients, 開啟Feign組件功能.
(5)Gateway: 路由/網(wǎng)關
對于項目后臺的微服務系統(tǒng), 每一個微服務都不會直接暴露給用戶來調用的, 但是如果用戶知道了某一個服務的ip:端口號:url:訪問參數(shù), 就能直接訪問你. 如果再是惡意訪問,惡意攻擊, 就會擊垮后臺微服務系統(tǒng).因此, 需要一個看大門的大boss, 來保護我們的后臺系統(tǒng).
Gateway 支持過濾器功能,對請求或響應進行攔截,完成一些通用操作。
Gateway 提供兩種過濾器方式:“pre”和“post”
pre 過濾器,在轉發(fā)之前執(zhí)行,可以做參數(shù)校驗、權限校驗、流量監(jiān)控、日志輸出、協(xié)議轉換等。?
post 過濾器,在后端微服務響應之后并且給前端響應之前執(zhí)行,可以做響應內容、響應頭的修改,日志的輸出,流量監(jiān)控等。
Gateway 還提供了兩種類型過濾器
GatewayFilter:局部過濾器,針對單個路由
GatewayFilter 局部過濾器,是針對單個路由的過濾器。
在Spring Cloud Gateway 組件中提供了大量內置的局部過濾器,對請求和響應做過濾操作。
遵循約定大于配置的思想,只需要在配置文件配置局部過濾器名稱,并為其指定對應的值,就可以讓其生效.
GlobalFilter :全局過濾器,針對所有路由.
GlobalFilter 全局過濾器,不需要在配置文件中配置,系統(tǒng)初始化時加載,并作用在每個路由上。
Spring Cloud Gateway 核心的功能也是通過內置的全局過濾器來完成。
自定義全局過濾器步驟:
定義類實現(xiàn) GlobalFilter 和 Ordered接口
復寫方法
完成邏輯處理
(6)Spring Cloud Config
在分布式系統(tǒng)中,由于服務數(shù)量巨多,為了方便服務配置文件統(tǒng)一管理,實時更新,所以需要分布式配置中心組件。在Spring Cloud中,有分布式配置中心組件spring Cloud Config ,它支持配置服務放在配置服務的內存中(即本地),也支持放在遠程Git倉庫中.