SpringCloud全家桶核心組件

Eureka

  • 服務註冊發現中心。
  • 比如一個微服務架構的電商系統,分爲會員、訂單、促銷、積分、庫存等服務系統。那麼會員支付的流程如下:調用訂單服務,修改訂單狀態,調用會員積分服務等增減積分,調用庫存服務加減庫存等等。
  • 那麼這些服務都部在不同的機器上,服務間是怎麼調用的呢?
  • 這時Eureka就登場了,上述每個服務都有一個Eureka Client組件,這個組件負責把該服務的信息註冊到Eureka Server上。大概就是告訴Eureka Server自己的服務的IP、端口號等信息。
  • 比如當訂單服務需要調用積分服務時,Eureka Client就會向Eureka Server詢問一下積分的地址、端口號等信息,然後可以把註冊表緩存到本地。這樣獲取到接口的具體信息,就可以直接通過接口方法調用服務了。

Feign

  • 傳統項目調用其他接口時需要HTTPClient構造各種請求報文、網絡請求等等,但是SpringCloud Feign爲我們提供了更爲優雅的解決方案。
  • 沒有底層建立連接、解析等等一系列冗雜的代碼,只需要使用註解定義一個FeignClient接口,然後直接調用那個接口就可以了。就像使用@Service註解,然後調用服務層方法時只需要將服務注入,然後就可以直接調用service方法。

Ribbon

  • 主要負責負載均衡。
  • Ribbon使用輪詢算法,均勻的把請求分發到各個服務器節點。比如如果服務部署在5臺服務器,那麼第一次請求第一臺服務器,接下來就會請求第二臺,依次第三臺…接着循環請求各個服務器。

Hystrix

  • Hystrix是熔斷、降級的一個架構。
  • 比如一個電商系統,訂單接收到100個下單請求,但是下單完成調用積分服務時積分服務掛掉了,那麼每次下單都要在積分這塊卡住一段時間,直到積分連接超時異常。當訂單積累很多的服務待處理,然後其他調用訂單的服務也會爲此連接超時,導致服務雪崩。
  • 此時就輪到Hystrix工作了,Hystrix會爲每個請求服務做一個小線程池,比如訂單請求積分服務是一個線程池,請求促銷服務也是一個線程池,當積分服務掛了後不會影響其他服務工作。所以當積分掛了後,不必每次都卡住一段時間,不走網絡請求直接將其熔斷。當然,熔斷也不是什麼都不幹,每次調用積分,可以在數據庫加一條記錄,記錄本次加減積分,訂單情況等。

Zuul

  • 微服務網關。
  • 如果前端、移動端要調用後臺服務,統一從Zuul網關進入,由網關轉發請求到指定的服務。這樣即使後臺幾百個服務,前端也不必記住所有的服務名。

參考 拜託!面試請不要再問我Spring Cloud底層原理

發佈了37 篇原創文章 · 獲贊 45 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章