搞清楚Spring Cloud架構原理的這4個點,輕鬆應對面試官

前言

現在分佈式系統基本上都是標配了,如果你現在還在玩兒單機,沒有接觸過這些東西的話,權當是爲你打開一扇新的大門吧。

大的單體項目

以前我們做單機系統的時候,所有的代碼都在一個項目裏面,只是不同的模塊按照包名來劃分的。我們以前做的一個某省的教育項目,有學生信息和就業系統、有高校培訓系統、有一個人資系統等一共六個,4個小夥伴都在一個代碼裏面進行開發,各個系統之間有一定的聯繫,但是大部分是不相關的,但管理頁面在一起。

那時候我們都在一個項目裏面碼代碼,每次啓動好幾分鐘,還有就是包版本衝突問題,搞得真是蛋疼。大家經歷過大型的單體項目開發,相信你有體會的。

還有各系統的使用量也不一樣,有的比較大。比如學生信息和就業系統,面向的是所有高校,特別是快畢業那段時間,每個學校會上報就業率等信息,還有就是打印報到證呀什麼的。有的系統就使用比較少,比如人資、培訓系統 使用的基本上就教育廳的一些員工,和部分老師,流量不大,勉強能扛得住。

模擬業務背景

大點的企業,比如做電商的,用戶幾十萬的,日活幾萬的,背後好幾十人上百人的團隊在支撐開發,單體系統就不太合適了。

比如現在有一個下單買東西的需求,就需要訂單系統、庫存系統、倉庫系統和積分系統 等來進行處理。如下圖:

訂單系統、庫存系統、倉儲和積分系統都是部署到不同的機器上的。

當用戶下單了,那麼訂單服務會發進行扣件庫存、通知倉儲系統要發貨、通知積分系統累加積分的操作。

如果我們此時需要用到 Spring Cloud 來做一個分佈式架構的話,那麼我們需要什麼東西呢?每個東西都是幹嘛的呢?

如果使用 Spring Cloud 來實現,需要哪些組件?

Eureka

首先,我們需要一個註冊中心 Eureka ,主要負責每個服務的註冊和發現。

每個微服務中都有一個Euraka client組件,專門負責將這個服務的服務id(serviceId)、ip、端口等信息註冊到Eureka server中。

Euraka Server是一個註冊中心,該組件內部維護了一個註冊表,保存了各個服務所在的機器ip和端口號等信息。

Feign

其次每個服務還需要一個遠程服務調用的組件 Feign ,他主要負責與其他服務建立連接,構造請求,然後發起請求來調用其他服務來獲取數據。

Ribbon

然後我們一個服務可能會部署很多臺機器,那麼我們使用Feign 去調用這個服務的時候,到底把請求發送到哪臺機器上去呢?此時我們就需要一個組件來根據一定的策略來選擇一臺機器。不管怎麼選的,總之得選一臺機器給 Feign 去調用就好了。

這個組件就是 Ribbon,Ribbon 主要負責就是負載均衡。Ribbon 會定期去從Eureka 註冊中心拉取註冊中心,緩存到本地,每次發起遠程調用的時候,Ribbon 就會從 Eureka 註冊表拉取下來的數據中挑選一個機器讓 Feign 來發起遠程調用。

Zuul

我們這麼多的微服務,如果一個服務一個IP,使用方都需要進行調用的話,是不是得知道每一個服務的IP地址才行呢?那得記住多少才行呀,多不好管理。

如果有一個統一的地址,然後根據不同的請求路徑來跟我進行轉發多少是不,比如 /user/* 是轉發到用戶服務 ,/product/* 是轉向到商品服務等等。我使用的時候,只需要訪問同一個IP ,只是路徑不一樣,就行了。

Spring Cloud 也給我們提供了一個組件,那就是 Zuul ,他是一個網關,就是負責網絡的路由的。每個請求都經過這個網關,我們還可以做統一鑑權等等很多事情。

Hystrix

還有一個東西也得說一下,就是 Hystrix,它是一個隔離、熔斷以及降級的一個框架 。

在微服務的相互調用過程中,可能會出現被調用服務錯誤或者超時的情況,從而導致整個系統崩潰不可用,也就是我們常說的服務雪崩問題,Hystrix 的存在就是爲了解決這種問題的。

整體架構

我們按照以上使用到的這些組件,來往下單這個流程來套一下:

整個調用流程:

  1. 首先每個服務啓動的時候都需要往註冊中心進行註冊。

  2. 用戶先對網關發起下單請求,網關收到請求後發現呃,是下單操作,要到訂單系統,然後把請求路由到訂單系統。

  3. 訂單系統啪啦啪啦一頓操作,然後通過 Feign 去調用 庫存系統減庫存,通知倉儲服務發貨,調用積分系統加積分。

  4. 在發起調用之前,訂單系統還得通過Ribbon 去註冊中心去拉取各系統的註冊表信息,並且挑一臺機器給 Feign 來發起網絡調用。

總結

OK,以上就是整個Spring Cloud 的核心架構了,面試題額,別錯過了,朋友。這只是給大家一些普及,面試的時候遇到了可以這麼去說的。

回過頭來再看看這8道Spring Cloud微服務面試題你能回答對幾道?

1.什麼是 Spring Cloud?

2.使用 Spring Cloud 有什麼優勢?

3.服務註冊和發現是什麼意思?Spring Cloud 如何實現?

4.負載平衡的意義什麼?

5.什麼是 Hystrix?它如何實現容錯?

6.什麼是 Hystrix 斷路器?我們需要它嗎?

7.什麼是 Netflix Feign?它的優點是什麼?

8.什麼是 Spring Cloud Bus?我們需要它嗎?

最後

歡迎大家一起交流,喜歡文章記得關注我點個贊喲,感謝支持!

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