溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

搞清楚Spring Cloud架構(gòu)原理的這4個點(diǎn),輕松應(yīng)對面試官

發(fā)布時間:2020-04-07 18:17:21 來源:網(wǎng)絡(luò) 閱讀:513 作者:架構(gòu)師追風(fēng) 欄目:編程語言

前言

現(xiàn)在分布式系統(tǒng)基本上都是標(biāo)配了,如果你現(xiàn)在還在玩兒單機(jī),沒有接觸過這些東西的話,權(quán)當(dāng)是為你打開一扇新的大門吧。

搞清楚Spring Cloud架構(gòu)原理的這4個點(diǎn),輕松應(yīng)對面試官

大的單體項(xiàng)目

以前我們做單機(jī)系統(tǒng)的時候,所有的代碼都在一個項(xiàng)目里面,只是不同的模塊按照包名來劃分的。我們以前做的一個某省的教育項(xiàng)目,有學(xué)生信息和就業(yè)系統(tǒng)、有高校培訓(xùn)系統(tǒng)、有一個人資系統(tǒng)等一共六個,4個小伙伴都在一個代碼里面進(jìn)行開發(fā),各個系統(tǒng)之間有一定的聯(lián)系,但是大部分是不相關(guān)的,但管理頁面在一起。

那時候我們都在一個項(xiàng)目里面碼代碼,每次啟動好幾分鐘,還有就是包版本沖突問題,搞得真是頭疼。大家經(jīng)歷過大型的單體項(xiàng)目開發(fā),相信你有體會的。

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

模擬業(yè)務(wù)背景

大點(diǎn)的企業(yè),比如做電商的,用戶幾十萬的,日活幾萬的,背后好幾十人上百人的團(tuán)隊(duì)在支撐開發(fā),單體系統(tǒng)就不太合適了。

比如現(xiàn)在有一個下單買東西的需求,就需要訂單系統(tǒng)、庫存系統(tǒng)、倉庫系統(tǒng)和積分系統(tǒng) 等來進(jìn)行處理。如下圖:

搞清楚Spring Cloud架構(gòu)原理的這4個點(diǎn),輕松應(yīng)對面試官

訂單系統(tǒng)、庫存系統(tǒng)、倉儲和積分系統(tǒng)都是部署到不同的機(jī)器上的。

當(dāng)用戶下單了,那么訂單服務(wù)會發(fā)進(jìn)行扣件庫存、通知倉儲系統(tǒng)要發(fā)貨、通知積分系統(tǒng)累加積分的操作。

如果我們此時需要用到 Spring Cloud 來做一個分布式架構(gòu)的話,那么我們需要什么東西呢?每個東西都是干嘛的呢?

如果使用 Spring Cloud 來實(shí)現(xiàn),需要哪些組件?

Eureka

首先,我們需要一個注冊中心 Eureka ,主要負(fù)責(zé)每個服務(wù)的注冊和發(fā)現(xiàn)。

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

Euraka Server是一個注冊中心,該組件內(nèi)部維護(hù)了一個注冊表,保存了各個服務(wù)所在的機(jī)器ip和端口號等信息。

Feign

其次每個服務(wù)還需要一個遠(yuǎn)程服務(wù)調(diào)用的組件 Feign ,他主要負(fù)責(zé)與其他服務(wù)建立連接,構(gòu)造請求,然后發(fā)起請求來調(diào)用其他服務(wù)來獲取數(shù)據(jù)。

Ribbon

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

這個組件就是 Ribbon,Ribbon 主要負(fù)責(zé)就是負(fù)載均衡。Ribbon 會定期去從Eureka 注冊中心拉取注冊中心,緩存到本地,每次發(fā)起遠(yuǎn)程調(diào)用的時候,Ribbon 就會從 Eureka 注冊表拉取下來的數(shù)據(jù)中挑選一個機(jī)器讓 Feign 來發(fā)起遠(yuǎn)程調(diào)用。

Zuul

我們這么多的微服務(wù),如果一個服務(wù)一個IP,使用方都需要進(jìn)行調(diào)用的話,是不是得知道每一個服務(wù)的IP地址才行呢?那得記住多少才行呀,多不好管理。

如果有一個統(tǒng)一的地址,然后根據(jù)不同的請求路徑來跟我進(jìn)行轉(zhuǎn)發(fā)多少是不,比如 /user/* 是轉(zhuǎn)發(fā)到用戶服務(wù) ,/product/* 是轉(zhuǎn)向到商品服務(wù)等等。我使用的時候,只需要訪問同一個IP ,只是路徑不一樣,就行了。

Spring Cloud 也給我們提供了一個組件,那就是 Zuul ,他是一個網(wǎng)關(guān),就是負(fù)責(zé)網(wǎng)絡(luò)的路由的。每個請求都經(jīng)過這個網(wǎng)關(guān),我們還可以做統(tǒng)一鑒權(quán)等等很多事情。

Hystrix

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

在微服務(wù)的相互調(diào)用過程中,可能會出現(xiàn)被調(diào)用服務(wù)錯誤或者超時的情況,從而導(dǎo)致整個系統(tǒng)崩潰不可用,也就是我們常說的服務(wù)雪崩問題,Hystrix 的存在就是為了解決這種問題的。

整體架構(gòu)

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

搞清楚Spring Cloud架構(gòu)原理的這4個點(diǎn),輕松應(yīng)對面試官

整個調(diào)用流程:

  1. 首先每個服務(wù)啟動的時候都需要往注冊中心進(jìn)行注冊。

  2. 用戶先對網(wǎng)關(guān)發(fā)起下單請求,網(wǎng)關(guān)收到請求后發(fā)現(xiàn)呃,是下單操作,要到訂單系統(tǒng),然后把請求路由到訂單系統(tǒng)。

  3. 訂單系統(tǒng)啪啦啪啦一頓操作,然后通過 Feign 去調(diào)用 庫存系統(tǒng)減庫存,通知倉儲服務(wù)發(fā)貨,調(diào)用積分系統(tǒng)加積分。

  4. 在發(fā)起調(diào)用之前,訂單系統(tǒng)還得通過Ribbon 去注冊中心去拉取各系統(tǒng)的注冊表信息,并且挑一臺機(jī)器給 Feign 來發(fā)起網(wǎng)絡(luò)調(diào)用。

總結(jié)

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

搞清楚Spring Cloud架構(gòu)原理的這4個點(diǎn),輕松應(yīng)對面試官

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

1.什么是 Spring Cloud?

2.使用 Spring Cloud 有什么優(yōu)勢?

3.服務(wù)注冊和發(fā)現(xiàn)是什么意思?Spring Cloud 如何實(shí)現(xiàn)?

4.負(fù)載平衡的意義什么?

5.什么是 Hystrix?它如何實(shí)現(xiàn)容錯?

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

7.什么是 Netflix Feign?它的優(yōu)點(diǎn)是什么?

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

最后

歡迎大家一起交流,喜歡文章記得點(diǎn)個贊喲,感謝支持!


向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI