您好,登錄后才能下訂單哦!
Spring Cloud 的核心架構原理是怎么樣的,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。
最近在補一些分布式系列的面試內容,提前幾個月做做準備吧,你們懂的,也跟大家分享分享。現在分布式系統基本上都是標配了,如果你現在還在玩兒單機,沒有接觸過這些東西的話,權當是為你打開一扇新的大門吧。
以前我們做單機系統的時候,所有的代碼都在一個項目里面,只是不同的模塊按照包名來劃分的。我們以前做的一個某省的教育項目,有學生信息和就業系統、有高校培訓系統、有一個人資系統等一共六個,4個小伙伴都在一個代碼里面進行開發,各個系統之間有一定的聯系,但是大部分是不相關的,但管理頁面在一起。
那時候我們都在一個項目里面碼代碼,每次啟動好幾分鐘,還有就是包版本沖突問題,搞得真是蛋疼。大家經歷過大型的單體項目開發,相信你有體會的。
還有各系統的使用量也不一樣,有的比較大。比如學生信息和就業系統,面向的是所有高校,特別是快畢業那段時間,每個學校會上報就業率等信息,還有就是打印報到證呀什么的。有的系統就使用比較少,比如人資、培訓系統 使用的基本上就教育廳的一些員工,和部分老師,流量不大,勉強能扛得住。
大點的企業,比如做電商的,用戶幾十萬的,日活幾萬的,背后好幾十人上百人的團隊在支撐開發,單體系統就不太合適了。
比如現在有一個下單買東西的需求,就需要訂單系統、庫存系統、倉庫系統和積分系統 等來進行處理。如下圖:
訂單系統、庫存系統、倉儲和積分系統都是部署到不同的機器上的。
當用戶下單了,那么訂單服務會發進行扣件庫存、通知倉儲系統要發貨、通知積分系統累加積分的操作。
如果我們此時需要用到 Spring Cloud 來做一個分布式架構的話,那么我們需要什么東西呢?每個東西都是干嘛的呢?
首先,我們需要一個注冊中心 Eureka ,主要負責每個服務的注冊和發現。
每個微服務中都有一個Euraka client組件,專門負責將這個服務的服務id(serviceId)、ip、端口等信息注冊到Eureka server中。
Euraka Server是一個注冊中心,該組件內部維護了一個注冊表,保存了各個服務所在的機器ip和端口號等信息。
其次每個服務還需要一個遠程服務調用的組件 Feign ,他主要負責與其他服務建立連接,構造請求,然后發起請求來調用其他服務來獲取數據。
然后我們一個服務可能會部署很多臺機器,那么我們使用Feign 去調用這個服務的時候,到底把請求發送到哪臺機器上去呢?此時我們就需要一個組件來根據一定的策略來選擇一臺機器。不管怎么選的,總之得選一臺機器給 Feign 去調用就好了。
這個組件就是 Ribbon,Ribbon 主要負責就是負載均衡。Ribbon 會定期去從Eureka 注冊中心拉取注冊中心,緩存到本地,每次發起遠程調用的時候,Ribbon 就會從 Eureka 注冊表拉取下來的數據中挑選一個機器讓 Feign 來發起遠程調用。
我們這么多的微服務,如果一個服務一個IP,使用方都需要進行調用的話,是不是得知道每一個服務的IP地址才行呢?那得記住多少才行呀,多不好管理。
如果有一個統一的地址,然后根據不同的請求路徑來跟我進行轉發多少是不,比如 /user/* 是轉發到用戶服務 ,/product/* 是轉向到商品服務等等。我使用的時候,只需要訪問同一個IP ,只是路徑不一樣,就行了。
Spring Cloud 也給我們提供了一個組件,那就是 Zuul ,他是一個網關,就是負責網絡的路由的。每個請求都經過這個網關,我們還可以做統一鑒權等等很多事情。
還有一個東西也得說一下,就是 Hystrix,它是一個隔離、熔斷以及降級的一個框架 。
在微服務的相互調用過程中,可能會出現被調用服務錯誤或者超時的情況,從而導致整個系統崩潰不可用,也就是我們常說的服務雪崩問題,Hystrix 的存在就是為了解決這種問題的。
我們按照以上使用到的這些組件,來往下單這個流程來套一下:
整個調用流程:
首先每個服務啟動的時候都需要往注冊中心進行注冊。
用戶先對網關發起下單請求,網關收到請求后發現呃,是下單操作,要到訂單系統,然后把請求路由到訂單系統。
訂單系統啪啦啪啦一頓操作,然后通過 Feign 去調用 庫存系統減庫存,通知倉儲服務發貨,調用積分系統加積分。
在發起調用之前,訂單系統還得通過Ribbon 去注冊中心去拉取各系統的注冊表信息,并且挑一臺機器給 Feign 來發起網絡調用。
看完上述內容,你們掌握Spring Cloud 的核心架構原理是怎么樣的的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。