1、SpringCloud組件有哪些
SpringCloud 是一系列框架的有序集合。它利用 SpringBoot 的開發便利性巧妙地簡化了分布式系統基礎設施的開發,如服務發現注冊、配置中心、消息總線、負載均衡、斷路器、數據監控等,都可以用 SpringBoot 的開發風格做到一鍵啟動和部署。
早期我們一般認為的Spring Cloud五大組件是
- Eureka : 注冊中心
- Ribbon : 負載均衡
- Feign : 遠程調用
- Hystrix : 服務熔斷
- Zuul/Gateway : 網關
隨著SpringCloudAlibba在國內興起 , 我們項目中使用了一些阿里巴巴的組件
-
注冊中心/配置中心 Nacos
-
負載均衡 Ribbon
-
服務調用 Feign
-
服務保護 sentinel
-
服務網關 Gateway
2、Feign工作原理
Feign是SpringCloud技術棧中用于遠程調用的一個HTTP客戶端,主要作用是將遠程服務調用格式本地方法調用格式統一成一致的
Feign的工作步驟如下:
-
首先需要在SpringBoot的啟動類上添加@EnableFeignClients 注解開啟對Feign的支持
-
當程序啟動時,會掃描所有標有@FeignClient的注解的類,并且將這些信息注入Spring IOC 容器中
-
當定義的 Feign 接口中的方法被調用時,通過JDK的代理方式,來生成具體的 RequestTemplate
-
RequestTemplate對象封裝了 HTTP 請求需要的全部信息,如請求參數名,請求方法等信息
-
然后RequestTemplate生成 Request,并將Request交給Client去處理,這里的 Client 可以是 JDK 原生的 URLConnection、Apache 的 HttpClient等
-
最后Client被封裝到LoadBalanceClient類,這個類結合Ribbon負載均衡發起服務之間的調用
3、什么是Hystrix
在微服務架構中,我們會拆分出很多的服務,服務之間存在復雜的調用關系,那么這些服務一旦會出現失敗的情況,就會導致服務雪崩
Hystrix就是來防止服務雪崩的工具,它具有服務降級,服務熔斷,服務隔離,監控等一些防止雪崩的技術。 它有四種防雪崩手段:
- 服務隔離:隔離服務之間相互影響
- 服務監控:在服務發生調用時,會將每秒請求數、成功請求數等運行指標記錄下來
- 服務熔斷:接口調用失敗就會進入調用接口提前定義好的一個熔斷的方法,返回錯誤信息
- 服務降級:接口調用失敗就調用本地的方法返回一個空
4、Hystrix斷路器狀態有哪些
斷路器狀態機包括三個狀態:
- closed:關閉狀態,斷路器放行所有請求,并開始統計異常比例、慢請求比例。超過閾值則切換到open狀態
- open:打開狀態,服務調用被熔斷,訪問被熔斷服務的請求會被拒絕,快速失敗,直接走降級邏輯。Open狀態5秒后(默認值)會進入half-open狀態
- half-open:半開狀態,放行一次請求,根據執行結果來判斷接下來的操作
- 請求成功:則切換到closed狀態
- 請求失敗:則切換到open狀態
5、Ribbon的工作原理
我們項目中使用的是Feign來進行遠程微服務的調用,Feign的底層是集成了Ribbon的,大體使用流程如下:
- 當請求發出的時候,會被Ribbon的負載均衡攔截器所有攔截
- Ribbon會提取請求路徑中微服務的名稱,然后去服務治理中心中查找微服務的對應的服務地址
- Ribbon會使用配置的負載均衡策略從眾多地址中選擇一個,進行調用
6、Ribbon的負載均衡策略有哪些
Ribbon官方提供了7種負載均衡策略
- 輪詢策略:按照一定的順序依次調用服務實例
- 權重策略:根據每個服務提供者的響應時間分配一個權重,響應時間越長,權重越小,被選中的可能性也就越低。它的實現原理是,剛開始使用輪詢策略并開啟一個計時器,每一段時間收集一次所有服務提供者的平均響應時間,然后再給每個服務提供者附上一個權重,權重越高被選中的概率也越大。
- 隨機策略:從服務提供者的列表中隨機選擇一個服務實例
- 最小連接數策略:遍歷服務提供者列表,選取連接數最小的一個服務實例。如果有相同的最小連接數,那么會調用輪詢策略進行選取。
- 重試策略:按照輪詢策略來獲取服務,如果獲取的服務實例為 null 或已經失效,則在指定的時間之內不斷地進行重試來獲取服務,如果超過指定時間依然沒獲取到服務實例則返回 null。
- 可用性敏感策略:先過濾掉非健康的服務實例,然后再選擇連接數較小的服務實例
- 區域敏感策略:根據服務所在區域(zone)的性能和服務的可用性來選擇服務實例,在沒有區域的環境下,該策略和輪詢策略類似。