SpringCloud的底層架構(gòu)原理

本篇內(nèi)容主要講解“Spring Cloud的底層架構(gòu)原理”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學(xué)習(xí)“Spring Cloud的底層架構(gòu)原理”吧!

目前成都創(chuàng)新互聯(lián)已為近1000家的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)頁空間、網(wǎng)站托管、服務(wù)器租用、企業(yè)網(wǎng)站設(shè)計、寬城網(wǎng)站維護等服務(wù),公司將堅持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。

Eureka

首先,我們得說說服務(wù)注冊中心 Eureka 了,它應(yīng)該是SpringCloud 技術(shù)棧中最核心的東西。

服務(wù)注冊與發(fā)現(xiàn)怎么實現(xiàn)的

服務(wù)注冊與發(fā)現(xiàn)是 Eureka 中最核心的東西。

比如現(xiàn)在我們有一個服務(wù)消費者 服務(wù)A,和兩個節(jié)點的服務(wù)提供者,服務(wù)B。服務(wù)A 和服務(wù)B 在啟動的時候都會向注冊中心進行服務(wù)注冊。

服務(wù)A 也會定時從服務(wù)注冊中心定時去拉取服務(wù)注冊表信息到本地來,這個過程叫服務(wù)發(fā)現(xiàn),默認是30S 一次,當(dāng)然了可以自己去配置。

如下圖:

Spring Cloud的底層架構(gòu)原理

實際上當(dāng)服務(wù)在拉取服務(wù)注冊表的時候,其實客戶端不是直接從 Eureka 中的 服務(wù)注冊表中獲取數(shù)據(jù)的。

Eureka 做了二級緩存,第一級叫做 ReadOnly 緩存,二級叫做 ReadWrite 緩存。

客戶端會直接從ReadOnly 緩存中讀取注冊表信息。

當(dāng)服務(wù)在進行注冊的時候,先往服務(wù)注冊表中寫入注冊信息,服務(wù)注冊表更新了,立馬會同步一份數(shù)據(jù)到 ReadWrite 緩存中去。

那什么時候 ReadWrite 緩存中的數(shù)據(jù)會到 ReadOnly 緩存中去?

此時有一個定時任務(wù)會定時去檢查 ReadWrite 是否跟  ReadOnly 不一致,不一致就把數(shù)據(jù)同步到 ReadOnly 中去。

這個定時任務(wù)也默認是 30S。也可以自己配置。

Spring Cloud的底層架構(gòu)原理

大家可以考慮一下,這么做的好處是什么,為什么要這么去做二級緩存?

這么做的好處在于,優(yōu)化并發(fā)讀寫的沖突。

如果服務(wù)進行注冊的時候,同時有服務(wù)來讀去注冊表信息,就會存在頻繁的讀寫加鎖的操作,寫的時候就不能讀,導(dǎo)致性能下降,所以我們需要避免大量的讀寫都去操作一個表。

那么有了這兩層,其實大部分的讀操作都會走 ReadOnly 緩存。只需要定時把 ReadWrite 緩存中的數(shù)據(jù)寫入到 ReadOnly 就好了。

 
心跳與故障檢測

服務(wù)注冊中心還有一個很重要的功能就是 心跳與故障檢查。心跳跟故障檢測其實就是為了知道注冊上來的這些服務(wù)是不是還活著的。

Eureka 還會開啟一個定時任務(wù)定時去檢查心跳,默認也是30秒,也可以自己設(shè)置。

當(dāng)出現(xiàn)機器故障沒有在約定的時間間隔內(nèi)上報自己的狀態(tài),那么Eureka 就會把這臺機器剔除注冊表,同時更新到 ReadWrite 緩存中去。如圖:

Spring Cloud的底層架構(gòu)原理

但是把數(shù)據(jù)從ReadWrite 緩存同步到 ReadOnly 緩存是有時間間隔的。當(dāng)服務(wù)消費者A 也只有等待下一次請求更新的時候才會把自己列表里面的服務(wù)給更新掉。

所以有時候會出現(xiàn)你注冊上去的服務(wù)經(jīng)過及時秒才被服務(wù)消費者發(fā)現(xiàn),或者服務(wù)的某個節(jié)點出現(xiàn)故障,沒有及時剔除掉。這里就是同步機制的時間差問題。

以上就是 Eureka 的核心運行原理了。

 

Feign & Ribbon

Feign,它其實就是對一個接口打了一個注解,它會針對這個注解標(biāo)注的接口生成動態(tài)代理對象,然后針對你的 feign 的動態(tài)代理代理對象去調(diào)用他方法的時候,此時會在底層生成,http 協(xié)議格式的請求如:/order/create?productId=1

Feign底層的使用的HTTP 通信框架 HttpClient ,先會使用 Ribbon 從本地的 Eureka 注冊表的緩存里面取出要調(diào)用服務(wù)的機器列表出來,然后根據(jù)負載均衡算法,選擇一臺機器出來,然后針對選擇出來的機器發(fā)送 Http 請求過去。

 

Zuul

Zuul 配置請求路徑與服務(wù)的對應(yīng)關(guān)系,你的請求到網(wǎng)關(guān),他就直接查找到匹配的服務(wù),然后就直接把請求轉(zhuǎn)發(fā)給那個服務(wù)的某臺機器, Ribbon 從 Eureka 本地緩存列表里面獲取一臺機器,然后通過負載均衡算法選擇一臺,把請求直接用 http 通信框架發(fā)送到指定的機器上面去。

 

Hystrix

在微服務(wù)的架構(gòu)中,會存在很多的服務(wù)調(diào)用,如果一個服務(wù)出現(xiàn)故障,就很容易導(dǎo)致整個調(diào)用鏈發(fā)生故障,發(fā)生服務(wù)雪崩的情況。

例如,當(dāng)一個服務(wù)出現(xiàn)故障,或者超時的問題,但是服務(wù)調(diào)用方不知道,一直在發(fā)送請求過去,那么等待的請求越來越多,形成任務(wù)積壓,最終導(dǎo)致服務(wù)崩潰,癱瘓。

Hystrix 的出現(xiàn)就是為了解決這種問題。它提供了服務(wù)降級、服務(wù)熔斷、線程和信號隔離、請求緩存、請求合并以及服務(wù)監(jiān)控等強大功能。

Hystrix使用艙壁模式實現(xiàn)線程池的隔離,它會為每一個依賴服務(wù)創(chuàng)建一個獨立的線程池,這樣就算某個依賴服務(wù)出現(xiàn)延遲過高的情況,也只是對該依賴服務(wù)的調(diào)用產(chǎn)生影響,而不會拖慢其他的依賴服務(wù)。

到此,相信大家對“Spring Cloud的底層架構(gòu)原理”有了更深的了解,不妨來實際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進入相關(guān)頻道進行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

標(biāo)題名稱:SpringCloud的底層架構(gòu)原理
網(wǎng)站路徑:http://muchs.cn/article40/pihieo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制開發(fā)、企業(yè)網(wǎng)站制作、App開發(fā)自適應(yīng)網(wǎng)站、品牌網(wǎng)站制作關(guān)鍵詞優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)