疏漏總結(四)——微服務

  1. ribbon和feign的區別?

ribbon和feign都是客戶端的負載均衡工具,feign的底層就是ribbon去實現的,feign進行了更進一步的封裝。但是Ribbon是基於HttpClient和RestTemplate去實現http請求的模擬,而feign是通過接口加註解,將需要調用的Service變成抽象方法,不需要自己構建http請求,使得編寫客戶端非常容易。

  1. Eureka主要是幹啥的?

Eureka裏面又分爲Eureka Client和Eureka Server,每一個服務我們都可以講其標記爲Eureka Client,然後Eureka Client會將這些組件的信息如ip port,報備到Eureka Server,並且保留一個本地緩存。

這個本地緩存是一個二級緩存,一級緩存是ReadOnly操作,二級緩存是ReadWrite操作,客戶端會從一級緩存中讀到服務器的信息,而它自己本身如果數據進行了更新,纔會寫入到二級緩存中。

設置二級緩存最大的好處就在於優化了併發讀寫的衝突

此外,Eureka還具備心跳和故障檢測,如果出現問題,就會刪除掉註冊表信息,然後同步到二級緩存。

  1. Feign的作用?

我們都知道Feign是專門做服務之間的遠程調用的,但是單純去調服務,我們都得發一個http請求,請求得到相應之後,我們才能建立遠程通信,這就要寫很多代碼,而Feign就進行了封裝。

但是我們可以在接口上標記一個FeignClient來標記作爲將使用遠程調用的接口。

裏面有一個知識點,這個遠程調用本質上還是使用動態代理(我猜這裏應該是走的jvm的反射,因爲實現的是一個InventoryService接口)去實現的。

Feign底層的使用的HTTP 通信框架 HttpClient ,先會使用 Ribbon 從本地的 Eureka 註冊表的緩存裏面取出要調用服務的機器列表出來,然後根據負載均衡算法,選擇一臺機器出來,然後針對選擇出來的機器發送 Http 請求過去。
4. Ribbon

主要用來做負載均衡,默認輪詢,和Eureka配合操作。

在這裏插入圖片描述

  1. Hystrix

當我們多個微服務之間具有一定的依賴關係的時候,其中一個服務因爲某種原因掛了,其他的依賴的服務就會因此而阻塞,當請求阻塞到一定程度的時候,就會導致連鎖的去掛掉服務,這就需要Hystrix來救場。

Hystrix主要的作用是熔斷,降級和隔離。

當一個服務出現問題的時候,Hystrix會直接熔斷這個服務,降級就是雖然出現了錯誤,但是還是給一個出現錯誤的返回值,回頭手動將錯誤改一下。

Hystrix使用艙壁模式實現線程池的隔離,它會爲每一個依賴服務創建一個獨立的線程池,這樣就算某個依賴服務出現延遲過高的情況,也只是對該依賴服務的調用產生影響,而不會拖慢其他的依賴服務。
在這裏插入圖片描述

  1. Zuul

其實大多數網關都是一個意思,用來轉發請求,做統一的降級,熔斷,安全認證。

請求到網關,他就直接查找到匹配的服務,然後就直接把請求轉發給那個服務的某臺機器, Ribbon 從 Eureka 本地緩存列表裏面獲取一臺機器,然後通過負載均衡算法選擇一臺,把請求直接用 http 通信框架發送到指定的機器上面去。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章