五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

Eureka 工作原理

2021-08-10 17:22 作者:每天一個禿頂小技巧  | 我要投稿

Eureka 工作原理

Eureka 作為 Spring Cloud 體系中最核心、默認(rèn)的注冊中心組件,研究它的運(yùn)行機(jī)制,有助于我們在工作中更好地使用它。

Eureka 核心概念

回到上節(jié)的服務(wù)注冊調(diào)用示意圖,服務(wù)提供者和服務(wù)的消費(fèi)者,本質(zhì)上也是 Eureka Client 角色。整體上可以分為兩個主體:Eureka Server 和 Eureka Client。


Eureka Server:注冊中心服務(wù)端

注冊中心服務(wù)端主要對外提供了三個功能:

服務(wù)注冊

服務(wù)提供者啟動時,會通過 Eureka Client 向 Eureka Server 注冊信息,Eureka Server 會存儲該服務(wù)的信息,Eureka Server 內(nèi)部有二層緩存機(jī)制來維護(hù)整個注冊表

提供注冊表

服務(wù)消費(fèi)者在調(diào)用服務(wù)時,如果 Eureka Client 沒有緩存注冊表的話,會從 Eureka Server 獲取最新的注冊表

同步狀態(tài)

Eureka Client 通過注冊、心跳機(jī)制和 Eureka Server 同步當(dāng)前客戶端的狀態(tài)。

Eureka Client:注冊中心客戶端

Eureka Client 是一個 Java 客戶端,用于簡化與 Eureka Server 的交互。Eureka Client 會拉取、更新和緩存 Eureka Server 中的信息。因此當(dāng)所有的 Eureka Server 節(jié)點都宕掉,服務(wù)消費(fèi)者依然可以使用緩存中的信息找到服務(wù)提供者,但是當(dāng)服務(wù)有更改的時候會出現(xiàn)信息不一致。

Register: 服務(wù)注冊

服務(wù)的提供者,將自身注冊到注冊中心,服務(wù)提供者也是一個 Eureka Client。當(dāng) Eureka Client 向 Eureka Server 注冊時,它提供自身的元數(shù)據(jù),比如 IP 地址、端口,運(yùn)行狀況指示符 URL,主頁等。

Renew: 服務(wù)續(xù)約

Eureka Client 會每隔 30 秒發(fā)送一次心跳來續(xù)約。 通過續(xù)約來告知 Eureka Server 該 Eureka Client 運(yùn)行正常,沒有出現(xiàn)問題。 默認(rèn)情況下,如果 Eureka Server 在 90 秒內(nèi)沒有收到 Eureka Client 的續(xù)約,Server 端會將實例從其注冊表中刪除,此時間可配置,一般情況不建議更改。

服務(wù)續(xù)約的兩個重要屬性


Eviction 服務(wù)剔除

當(dāng) Eureka Client 和 Eureka Server 不再有心跳時,Eureka Server 會將該服務(wù)實例從服務(wù)注冊列表中刪除,即服務(wù)剔除。

Cancel: 服務(wù)下線

Eureka Client 在程序關(guān)閉時向 Eureka Server 發(fā)送取消請求。 發(fā)送請求后,該客戶端實例信息將從 Eureka Server 的實例注冊表中刪除。該下線請求不會自動完成,它需要調(diào)用以下內(nèi)容:

GetRegisty: 獲取注冊列表信息

Eureka Client 從服務(wù)器獲取注冊表信息,并將其緩存在本地。客戶端會使用該信息查找其他服務(wù),從而進(jìn)行遠(yuǎn)程調(diào)用。該注冊列表信息定期(每30秒鐘)更新一次。每次返回注冊列表信息可能與 Eureka Client 的緩存信息不同,Eureka Client 自動處理。

如果由于某種原因?qū)е伦粤斜硇畔⒉荒芗皶r匹配,Eureka Client 則會重新獲取整個注冊表信息。 Eureka Server 緩存注冊列表信息,整個注冊表以及每個應(yīng)用程序的信息進(jìn)行了壓縮,壓縮內(nèi)容和沒有壓縮的內(nèi)容完全相同。Eureka Client 和 Eureka Server 可以使用 JSON/XML 格式進(jìn)行通訊。在默認(rèn)情況下 Eureka Client 使用壓縮 JSON 格式來獲取注冊列表的信息。

獲取服務(wù)是服務(wù)消費(fèi)者的基礎(chǔ),所以必有兩個重要參數(shù)需要注意:

Remote Call: 遠(yuǎn)程調(diào)用

當(dāng) Eureka Client 從注冊中心獲取到服務(wù)提供者信息后,就可以通過 Http 請求調(diào)用對應(yīng)的服務(wù);服務(wù)提供者有多個時,Eureka Client 客戶端會通過 Ribbon 自動進(jìn)行負(fù)載均衡。

自我保護(hù)機(jī)制

默認(rèn)情況下,如果 Eureka Server 在一定的 90s 內(nèi)沒有接收到某個微服務(wù)實例的心跳,會注銷該實例。但是在微服務(wù)架構(gòu)下服務(wù)之間通常都是跨進(jìn)程調(diào)用,網(wǎng)絡(luò)通信往往會面臨著各種問題,比如微服務(wù)狀態(tài)正常,網(wǎng)絡(luò)分區(qū)故障,導(dǎo)致此實例被注銷。

固定時間內(nèi)大量實例被注銷,可能會嚴(yán)重威脅整個微服務(wù)架構(gòu)的可用性。為了解決這個問題,Eureka 開發(fā)了自我保護(hù)機(jī)制,那么什么是自我保護(hù)機(jī)制呢?

Eureka Server 在運(yùn)行期間會去統(tǒng)計心跳失敗比例在 15 分鐘之內(nèi)是否低于 85%,如果低于 85%,Eureka Server 即會進(jìn)入自我保護(hù)機(jī)制。

Eureka Server 觸發(fā)自我保護(hù)機(jī)制后,頁面會出現(xiàn)提示:

Eureka Server 進(jìn)入自我保護(hù)機(jī)制,會出現(xiàn)以下幾種情況:

(1 Eureka 不再從注冊列表中移除因為長時間沒收到心跳而應(yīng)該過期的服務(wù)

(2 Eureka 仍然能夠接受新服務(wù)的注冊和查詢請求,但是不會被同步到其它節(jié)點上(即保證當(dāng)前節(jié)點依然可用)

(3 當(dāng)網(wǎng)絡(luò)穩(wěn)定時,當(dāng)前實例新的注冊信息會被同步到其它節(jié)點中

Eureka 自我保護(hù)機(jī)制是為了防止誤殺服務(wù)而提供的一個機(jī)制。當(dāng)個別客戶端出現(xiàn)心跳失聯(lián)時,則認(rèn)為是客戶端的問題,剔除掉客戶端;當(dāng) Eureka 捕獲到大量的心跳失敗時,則認(rèn)為可能是網(wǎng)絡(luò)問題,進(jìn)入自我保護(hù)機(jī)制;當(dāng)客戶端心跳恢復(fù)時,Eureka 會自動退出自我保護(hù)機(jī)制。

如果在保護(hù)期內(nèi)剛好這個服務(wù)提供者非正常下線了,此時服務(wù)消費(fèi)者就會拿到一個無效的服務(wù)實例,即會調(diào)用失敗。對于這個問題需要服務(wù)消費(fèi)者端要有一些容錯機(jī)制,如重試,斷路器等。

通過在 Eureka Server 配置如下參數(shù),開啟或者關(guān)閉保護(hù)機(jī)制,生產(chǎn)環(huán)境建議打開:


Eureka 集群原理

再來看看 Eureka 集群的工作原理。我們假設(shè)有三臺 Eureka Server 組成的集群,第一臺 Eureka Server 在北京機(jī)房,另外兩臺 Eureka Server 在深圳和西安機(jī)房。這樣三臺 Eureka Server 就組建成了一個跨區(qū)域的高可用集群,只要三個地方的任意一個機(jī)房不出現(xiàn)問題,都不會影響整個架構(gòu)的穩(wěn)定性。

從圖中可以看出 Eureka Server 集群相互之間通過 Replicate 來同步數(shù)據(jù),相互之間不區(qū)分主節(jié)點和從節(jié)點,所有的節(jié)點都是平等的。在這種架構(gòu)中,節(jié)點通過彼此互相注冊來提高可用性,每個節(jié)點需要添加一個或多個有效的 serviceUrl 指向其他節(jié)點。

如果某臺 Eureka Server 宕機(jī),Eureka Client 的請求會自動切換到新的 Eureka Server 節(jié)點。當(dāng)宕機(jī)的服務(wù)器重新恢復(fù)后,Eureka 會再次將其納入到服務(wù)器集群管理之中。當(dāng)節(jié)點開始接受客戶端請求時,所有的操作都會進(jìn)行節(jié)點間復(fù)制,將請求復(fù)制到其它 Eureka Server 當(dāng)前所知的所有節(jié)點中。

另外 Eureka Server 的同步遵循著一個非常簡單的原則:只要有一條邊將節(jié)點連接,就可以進(jìn)行信息傳播與同步。所以,如果存在多個節(jié)點,只需要將節(jié)點之間兩兩連接起來形成通路,那么其它注冊中心都可以共享信息。每個 Eureka Server 同時也是 Eureka Client,多個 Eureka Server 之間通過 P2P 的方式完成服務(wù)注冊表的同步。

Eureka Server 集群之間的狀態(tài)是采用異步方式同步的,所以不保證節(jié)點間的狀態(tài)一定是一致的,不過基本能保證最終狀態(tài)是一致的。

Eureka 分區(qū)

Eureka 提供了 Region 和 Zone 兩個概念來進(jìn)行分區(qū),這兩個概念均來自于亞馬遜的 AWS:

region:可以理解為地理上的不同區(qū)域,比如亞洲地區(qū),中國區(qū)或者深圳等等。沒有具體大小的限制。根據(jù)項目具體的情況,可以自行合理劃分 region。

zone:可以簡單理解為 region 內(nèi)的具體機(jī)房,比如說 region 劃分為深圳,然后深圳有兩個機(jī)房,就可以在此 region 之下劃分出 zone1、zone2 兩個 zone。


上圖中的 us-east-1c、us-east-1d、us-east-1e 就代表了不同的 Zone。Zone 內(nèi)的 Eureka Client 優(yōu)先和 Zone 內(nèi)的 Eureka Server 進(jìn)行心跳同步,同樣調(diào)用端優(yōu)先在 Zone 內(nèi)的 Eureka Server 獲取服務(wù)列表,當(dāng) Zone 內(nèi)的 Eureka Server 掛掉之后,才會從別的 Zone 中獲取信息。

Eurka 保證 AP

Eureka Server 各個節(jié)點都是平等的,幾個節(jié)點掛掉不會影響正常節(jié)點的工作,剩余的節(jié)點依然可以提供注冊和查詢服務(wù)。而 Eureka Client 在向某個 Eureka 注冊時,如果發(fā)現(xiàn)連接失敗,則會自動切換至其它節(jié)點。只要有一臺 Eureka Server 還在,就能保證注冊服務(wù)可用(保證可用性),只不過查到的信息可能不是最新的(不保證強(qiáng)一致性)。


Eurka 工作流程

了解完 Eureka 核心概念,自我保護(hù)機(jī)制,以及集群內(nèi)的工作原理后,我們來整體梳理一下?

Eureka 的工作流程:

  1. Eureka Server 啟動成功,等待服務(wù)端注冊。在啟動過程中如果配置了集群,集群之間定時通過 Replicate 同步注冊表,每個 Eureka Server 都存在獨(dú)立完整的服務(wù)注冊表信息

  2. Eureka Client 啟動時根據(jù)配置的 Eureka Server 地址去注冊中心注冊服務(wù)

  3. Eureka Client 會每 30s 向 Eureka Server 發(fā)送一次心跳請求,證明客戶端服務(wù)正常

  4. 當(dāng) Eureka Server 90s 內(nèi)沒有收到 Eureka Client 的心跳,注冊中心則認(rèn)為該節(jié)點失效,會注銷該實例

  5. 單位時間內(nèi) Eureka Server 統(tǒng)計到有大量的 Eureka Client 沒有上送心跳,則認(rèn)為可能為網(wǎng)絡(luò)異常,進(jìn)入自我保護(hù)機(jī)制,不再剔除沒有上送心跳的客戶端

  6. 當(dāng) Eureka Client 心跳請求恢復(fù)正常之后,Eureka Server 自動退出自我保護(hù)模式

  7. Eureka Client 定時全量或者增量從注冊中心獲取服務(wù)注冊表,并且將獲取到的信息緩存到本地

  8. 服務(wù)調(diào)用時,Eureka Client 會先從本地緩存找尋調(diào)取的服務(wù)。如果獲取不到,先從注冊中心刷新注冊表,再同步到本地緩存

  9. Eureka Client 獲取到目標(biāo)服務(wù)器信息,發(fā)起服務(wù)調(diào)用

  10. 10、Eureka Client 程序關(guān)閉時向 Eureka Server 發(fā)送取消請求,Eureka Server 將實例從注冊表中刪除


這就是Eurka基本工作流程

總結(jié)

講了 Eureka 核心概念、Eureka 自我保護(hù)機(jī)制和 Eureka 集群原理。通過分析 Eureka 工作原理,你可以明顯地感覺到 Eureka 的設(shè)計之巧妙,通過一些列的機(jī)制,完美地解決了注冊中心的穩(wěn)定性和高可用性。

Eureka 為了保障注冊中心的高可用性,容忍了數(shù)據(jù)的非強(qiáng)一致性,服務(wù)節(jié)點間的數(shù)據(jù)可能不一致, Client-Server 間的數(shù)據(jù)可能不一致。比較適合跨越多機(jī)房、對注冊中心服務(wù)可用性要求較高的使用場景。



Eureka 工作原理的評論 (共 條)

分享到微博請遵守國家法律
通辽市| 梓潼县| 板桥市| 齐河县| 深州市| 剑河县| 岳阳市| 探索| 揭阳市| 汨罗市| 久治县| 昭通市| 鄂尔多斯市| 五大连池市| 喀喇沁旗| 黑河市| 阿拉善左旗| 甘德县| 固阳县| 萝北县| 沙田区| 依兰县| 应用必备| 阿合奇县| 梅州市| 桂平市| 托克托县| 东乌珠穆沁旗| 高台县| 鹰潭市| 湟中县| 大洼县| 马尔康县| 阿合奇县| 石林| 澜沧| 贵港市| 奉新县| 康马县| 斗六市| 高要市|