本篇內(nèi)容主要講解“Spring Cloud的底層架構(gòu)原理”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“Spring Cloud的底層架構(gòu)原理”吧!
目前成都創(chuàng)新互聯(lián)已為近1000家的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)頁(yè)空間、網(wǎng)站托管、服務(wù)器租用、企業(yè)網(wǎng)站設(shè)計(jì)、寬城網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長(zhǎng),共同發(fā)展。
首先,我們得說(shuō)說(shuō)服務(wù)注冊(cè)中心 Eureka 了,它應(yīng)該是SpringCloud 技術(shù)棧中最核心的東西。
服務(wù)注冊(cè)與發(fā)現(xiàn)是 Eureka 中最核心的東西。
比如現(xiàn)在我們有一個(gè)服務(wù)消費(fèi)者 服務(wù)A,和兩個(gè)節(jié)點(diǎn)的服務(wù)提供者,服務(wù)B。服務(wù)A 和服務(wù)B 在啟動(dòng)的時(shí)候都會(huì)向注冊(cè)中心進(jìn)行服務(wù)注冊(cè)。
服務(wù)A 也會(huì)定時(shí)從服務(wù)注冊(cè)中心定時(shí)去拉取服務(wù)注冊(cè)表信息到本地來(lái),這個(gè)過(guò)程叫服務(wù)發(fā)現(xiàn),默認(rèn)是30S 一次,當(dāng)然了可以自己去配置。
如下圖:
實(shí)際上當(dāng)服務(wù)在拉取服務(wù)注冊(cè)表的時(shí)候,其實(shí)客戶端不是直接從 Eureka 中的 服務(wù)注冊(cè)表中獲取數(shù)據(jù)的。
Eureka 做了二級(jí)緩存,第一級(jí)叫做 ReadOnly 緩存,二級(jí)叫做 ReadWrite 緩存。
客戶端會(huì)直接從ReadOnly 緩存中讀取注冊(cè)表信息。
當(dāng)服務(wù)在進(jìn)行注冊(cè)的時(shí)候,先往服務(wù)注冊(cè)表中寫(xiě)入注冊(cè)信息,服務(wù)注冊(cè)表更新了,立馬會(huì)同步一份數(shù)據(jù)到 ReadWrite 緩存中去。
那什么時(shí)候 ReadWrite 緩存中的數(shù)據(jù)會(huì)到 ReadOnly 緩存中去?
此時(shí)有一個(gè)定時(shí)任務(wù)會(huì)定時(shí)去檢查 ReadWrite 是否跟 ReadOnly 不一致,不一致就把數(shù)據(jù)同步到 ReadOnly 中去。
這個(gè)定時(shí)任務(wù)也默認(rèn)是 30S。也可以自己配置。
大家可以考慮一下,這么做的好處是什么,為什么要這么去做二級(jí)緩存?
這么做的好處在于,優(yōu)化并發(fā)讀寫(xiě)的沖突。
如果服務(wù)進(jìn)行注冊(cè)的時(shí)候,同時(shí)有服務(wù)來(lái)讀去注冊(cè)表信息,就會(huì)存在頻繁的讀寫(xiě)加鎖的操作,寫(xiě)的時(shí)候就不能讀,導(dǎo)致性能下降,所以我們需要避免大量的讀寫(xiě)都去操作一個(gè)表。
那么有了這兩層,其實(shí)大部分的讀操作都會(huì)走 ReadOnly 緩存。只需要定時(shí)把 ReadWrite 緩存中的數(shù)據(jù)寫(xiě)入到 ReadOnly 就好了。
服務(wù)注冊(cè)中心還有一個(gè)很重要的功能就是 心跳與故障檢查。心跳跟故障檢測(cè)其實(shí)就是為了知道注冊(cè)上來(lái)的這些服務(wù)是不是還活著的。
Eureka 還會(huì)開(kāi)啟一個(gè)定時(shí)任務(wù)定時(shí)去檢查心跳,默認(rèn)也是30秒,也可以自己設(shè)置。
當(dāng)出現(xiàn)機(jī)器故障沒(méi)有在約定的時(shí)間間隔內(nèi)上報(bào)自己的狀態(tài),那么Eureka 就會(huì)把這臺(tái)機(jī)器剔除注冊(cè)表,同時(shí)更新到 ReadWrite 緩存中去。如圖:
但是把數(shù)據(jù)從ReadWrite 緩存同步到 ReadOnly 緩存是有時(shí)間間隔的。當(dāng)服務(wù)消費(fèi)者A 也只有等待下一次請(qǐng)求更新的時(shí)候才會(huì)把自己列表里面的服務(wù)給更新掉。
所以有時(shí)候會(huì)出現(xiàn)你注冊(cè)上去的服務(wù)經(jīng)過(guò)及時(shí)秒才被服務(wù)消費(fèi)者發(fā)現(xiàn),或者服務(wù)的某個(gè)節(jié)點(diǎn)出現(xiàn)故障,沒(méi)有及時(shí)剔除掉。這里就是同步機(jī)制的時(shí)間差問(wèn)題。
以上就是 Eureka 的核心運(yùn)行原理了。
Feign,它其實(shí)就是對(duì)一個(gè)接口打了一個(gè)注解,它會(huì)針對(duì)這個(gè)注解標(biāo)注的接口生成動(dòng)態(tài)代理對(duì)象,然后針對(duì)你的 feign 的動(dòng)態(tài)代理代理對(duì)象去調(diào)用他方法的時(shí)候,此時(shí)會(huì)在底層生成,http 協(xié)議格式的請(qǐng)求如:/order/create?productId=1
Feign底層的使用的HTTP 通信框架 HttpClient ,先會(huì)使用 Ribbon 從本地的 Eureka 注冊(cè)表的緩存里面取出要調(diào)用服務(wù)的機(jī)器列表出來(lái),然后根據(jù)負(fù)載均衡算法,選擇一臺(tái)機(jī)器出來(lái),然后針對(duì)選擇出來(lái)的機(jī)器發(fā)送 Http 請(qǐng)求過(guò)去。
Zuul 配置請(qǐng)求路徑與服務(wù)的對(duì)應(yīng)關(guān)系,你的請(qǐng)求到網(wǎng)關(guān),他就直接查找到匹配的服務(wù),然后就直接把請(qǐng)求轉(zhuǎn)發(fā)給那個(gè)服務(wù)的某臺(tái)機(jī)器, Ribbon 從 Eureka 本地緩存列表里面獲取一臺(tái)機(jī)器,然后通過(guò)負(fù)載均衡算法選擇一臺(tái),把請(qǐng)求直接用 http 通信框架發(fā)送到指定的機(jī)器上面去。
在微服務(wù)的架構(gòu)中,會(huì)存在很多的服務(wù)調(diào)用,如果一個(gè)服務(wù)出現(xiàn)故障,就很容易導(dǎo)致整個(gè)調(diào)用鏈發(fā)生故障,發(fā)生服務(wù)雪崩的情況。
例如,當(dāng)一個(gè)服務(wù)出現(xiàn)故障,或者超時(shí)的問(wèn)題,但是服務(wù)調(diào)用方不知道,一直在發(fā)送請(qǐng)求過(guò)去,那么等待的請(qǐng)求越來(lái)越多,形成任務(wù)積壓,最終導(dǎo)致服務(wù)崩潰,癱瘓。
Hystrix 的出現(xiàn)就是為了解決這種問(wèn)題。它提供了服務(wù)降級(jí)、服務(wù)熔斷、線程和信號(hào)隔離、請(qǐng)求緩存、請(qǐng)求合并以及服務(wù)監(jiān)控等強(qiáng)大功能。
Hystrix使用艙壁模式實(shí)現(xiàn)線程池的隔離,它會(huì)為每一個(gè)依賴服務(wù)創(chuàng)建一個(gè)獨(dú)立的線程池,這樣就算某個(gè)依賴服務(wù)出現(xiàn)延遲過(guò)高的情況,也只是對(duì)該依賴服務(wù)的調(diào)用產(chǎn)生影響,而不會(huì)拖慢其他的依賴服務(wù)。
到此,相信大家對(duì)“Spring Cloud的底層架構(gòu)原理”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!
標(biāo)題名稱:SpringCloud的底層架構(gòu)原理
網(wǎng)站路徑:http://m.kartarina.com/article40/pihieo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制開(kāi)發(fā)、企業(yè)網(wǎng)站制作、App開(kāi)發(fā)、自適應(yīng)網(wǎng)站、品牌網(wǎng)站制作、關(guān)鍵詞優(yōu)化
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)