天天看點

Spring Cloud架構——Eureka一、基本概念二、基本組成三、主要調用過程四、Eureka server叢集

一、基本概念

Spring Cloud架構——Eureka一、基本概念二、基本組成三、主要調用過程四、Eureka server叢集

在spring cloud架構中,eureka的核心作用是服務的注冊和發現,并實作服務治理。

二、基本組成

由三部分組成:

Eureka Server

:提供服務注冊和發現,多個Eureka Server之間會同步資料,做到狀态一緻(最終一緻性)

Service Provider

:服務提供方,将自身服務注冊到Eureka,進而使服務消費方能夠找到

Service Consumer

:服務消費方,從Eureka擷取注冊服務清單,進而能夠消費服務

三、主要調用過程

1.服務生産者

1)服務注冊

由服務生産者發送一個post請求給Eureka Server,請求内容包括:提供服務的名稱和位址;

2)服務續約

服務續約(renew)會由服務提供者定期調用,類似于

心跳

,用來告知注冊中心 Eureka Server 自己的狀态,避免被 Eureka Server 認為服務失效将其剔除下線。服務續約就是發送一個 PUT 請求(30s);

3)服務下線

當服務提供者停止服務時,會發送請求告知注冊中心 Eureka Server 進行服務剔除下線操作,防止服務消費者從注冊中心調用到不存在的服務。服務下線就是發送一個 DELETE 請求;

2.服務消費者

1)擷取服務清單,服務消費者啟動時,會全量拉取服務清單資訊,同時本地緩存一份;

2)更新服務清單,增量拉取。擷取到全量服務清單後,服務消費者會定期到注冊中心Eureka server擷取服務的最新配置, 然後比較更新本地緩存,更新時間預設30s;

3.Eureka Server

1)服務剔除

服務剔除是注冊中心 Eureka Server 在啟動時就啟動一個守護線程 evictionTimer 來定期(預設為 60 秒)執行檢測服務的,判斷标準就是超過一定時間沒有進行 Renew 的服務,預設的失效時間是 90 秒,也就是說當一個已注冊的服務在 90 秒内沒有向注冊中心 Eureka Server 進行服務續約(Renew),就會被從注冊中心剔除下線;

2)自我保護模式

當Eureka Server在短時間内丢失過多用戶端時(可能發生了網絡分區故障),過期的服務數量比例超過門檻值(可配置,預設為0.85)時,那麼eureka就會進入自我保護模式。一旦進入該模式,Eureka Server就會保護服務系統資料庫中的資訊,不再删除服務系統資料庫中的資料(也就是不會登出任何微服務)。當網絡故障恢複後,該Eureka Server節點會自動退出自我保護模式。它的架構哲學是甯可同時保留所有微服務(健康和不健康的),也不盲目登出任何健康的微服務,使用自我保護模式,可用讓eureka更加健壯、穩定。

4.Eurka 工作流程

我們來整體梳理一下 Eureka 的工作流程:

1)Eureka Server 啟動成功,等待服務端注冊。在啟動過程中如果配置了叢集,叢集之間定時通過 Replicate 同步系統資料庫,每個 Eureka Server 都存在獨立完整的服務系統資料庫資訊

2)Eureka Client 啟動時根據配置的 Eureka Server 位址去注冊中心注冊服務

3)Eureka Client 會每 30s 向 Eureka Server 發送一次心跳請求,證明用戶端服務正常

4)當 Eureka Server 90s 内沒有收到 Eureka Client 的心跳,注冊中心則認為該節點失效,會登出該執行個體

5)機關時間内 Eureka Server 統計到有大量的 Eureka Client 沒有上送心跳,則認為可能為網絡異常,進入自我保護機制,不再剔除沒有上送心跳的用戶端

6)當 Eureka Client 心跳請求恢複正常之後,Eureka Server 自動退出自我保護模式

7)Eureka Client 定時全量或者增量從注冊中心擷取服務系統資料庫,并且将擷取到的資訊緩存到本地

8)服務調用時,Eureka Client 會先從本地緩存找尋調取的服務。如果擷取不到,先從注冊中心重新整理系統資料庫,再同步到本地緩存

9)Eureka Client 擷取到目标伺服器資訊,發起服務調用

10)Eureka Client 程式關閉時向 Eureka Server 發送取消請求,Eureka Server 将執行個體從系統資料庫中删除

四、Eureka server叢集

1.叢集基本概念

為了保證高可用,在生産環境都會搭建eureka叢集。Eureka Server 叢集互相之間通過 Replicate 來同步資料,互相之間不區分主節點和從節點,所有的節點都是平等的。在這種架構中,節點通過彼此互相注冊來提高可用性,每個節點需要添加一個或多個有效的 serviceUrl 指向其他節點。

2.叢集間消息同步

Eureka Server之間會互相進行注冊,建構Eureka Server叢集,不同Eureka Server之間會進行服務同步,采用異步任務的方式,用來保證服務資訊的一緻性。當服務提供者發送注冊請求到一個服務注冊中心時, 它會将該請求轉發給叢集中相連的其他注冊中心, 進而實作注冊中心之間的服務同步。 在CAP中,Eureka 滿足了AP,對C隻滿足的弱一緻性(最終一緻性),犧牲了強一緻性保證了高可用性。如果同步過程中,出現了異常,這時會根據異常資訊做對應的處理,如果是讀取逾時或者網絡連接配接異常,則稍後重試;如果其他異常則列印錯誤日志不再後續處理。

繼續閱讀