1.服務提供者:
服務註冊:
服務提供者在啟動的時候,會通過rest請求將自己註冊到eureka server上,同時帶上了自身服務的一些元資料資訊。eureka收到這個請求之後,會將元資料(參見文末註解)儲存到乙個雙層的map中。第一層map的key為服務名,第二層的key為具體服務的例項名。
服務同步:
當乙個服務註冊到乙個服務註冊中心上時,由於註冊中心之間也互相註冊為服務,因此註冊中心會將該請求**給集群中相關聯的其他註冊中心。從而實現服務註冊的同步。
服務續約:
在註冊完服務之後,服務提供者會維護乙個心跳來持續告訴eureka server該服務依然處於可用狀態,從而避免eureka server將該服務從註冊中心剔除
關於服務續約有兩個重要屬性:
eureka.instance.lease-renewal-interval-in-seconds=30
eureka.instance.lease-expiration-duration-in-seconds=90
前者使用者服務續約的呼叫間隔時間,預設為30s。也就是說每隔30秒服務提供者會傳送乙個心跳包給eureka server。
後者是用於定義服務失效的事件,預設為90s。也就是說若90s未收到心跳包則認為該服務不可用,將從註冊中心剔除。
2.服務消費者:
獲取服務:
當我們啟動服務消費者例項的時候,消費者會傳送乙個rest請求到註冊中心,來獲取上面的可用服務列表。eureka server 會維護乙份唯讀的服務列表清單給客戶端,並且該清單每隔30s更新一次。此引數可以通過 eureka.client.registry-fetch-interval-seconds=**來更改。
服務呼叫:
服務消費者在獲取服務清單後,可以根據服務名稱,獲取具體提供服務的例項名稱和元資料資訊。客戶端可以自主選擇使用哪乙個服務例項來提供服務,ribbon中預設採用輪詢的方式進行呼叫以實現負載均衡。
對於選擇例項,eureka 中有region 和 zone的概念。乙個region可以包含多個zone。每個客戶端均需要註冊到zone,因此每個客戶端對應乙個region和乙個zone,在進行服務呼叫的時候,缺省會優先選擇同乙個zone的服務提供方,若未能獲取到服務則會呼叫其他zone的服務。
服務下線:
當服務例項正常的關閉時,會觸發乙個服務下線的rest請求給eureka server。服務端在接收到請求之後,將該服務的狀態置為down下線,並把該下線事件傳播給其他服務端和客戶端。
3.服務註冊中心:
失效剔除:
有的服務並不一定能正常退出或者關閉,有可能有因為網路、記憶體、效能或者其他亂七八糟的么蛾子(相信做開發的同學都有類似慘痛的經歷)而導致服務不能正常提供服務,此時服務註冊中心並不能接收到乙個請求下線的rest請求。為了保持維護的服務都處於可用狀態,eureka server會有乙個定時任務, 預設每隔60s觸發一次將服務清單中沒有續約(還記得嗎?預設90s)的服務剔除掉
自我保護:
之前介紹過,服務提供者會維護乙個心跳連線,在eureka server執行過程中,會統計心跳失敗的比例,若在15min內超過85% ,則會觸發eureka server的保護機制,將當前的實力註冊資訊保護起來,讓這些例項不會過期。但是此期間若服務例項本身出現了問題,那麼很可能出現客戶端拿到的服務例項已經不可用,會出現呼叫服務失敗的情況,因此,客戶端要有自己的容錯機制,比如請求重試、斷路器等方案。
ps:據說本地除錯很容易觸發自我保護機制,為了確保所有的服務例項都處於可用狀態,建議本地除錯的時候把引數eureka.server.enable-self-preservation=false來關閉註冊中心的自我保護機制。
此處對元資料做一些註解:元資料是eureka客戶端在向服註冊中心傳送註冊請求時,用來描述自身服務資訊的物件,其中包含了一些標準化的元資料比如:服務名稱、例項名稱、例項ip、例項提供服務的埠等用於服務治理的重要資訊,以及一些使用者負載均衡策略或者是其他特殊用途的一些資料。這些元資料是可以通過配置檔案來配置的。
Spring Cloud底層原理
不過大多數講解還停留在對 spring cloud 功能使用的層面,其底層的很多原理,很多人可能並不知曉。實際上,spring cloud 是乙個全家桶式的技術棧,它包含了很多元件。本文先從最核心的幾個元件,也就是 eureka ribbon feign hystrix zuul 入手,來剖析其底層...
springcloud的 作原理
springcloud的 作原理 springcloud由以下 個核 元件構成 eureka 各個服務啟動時,eureka client都會將服務註冊到eureka server,並且eureka client還可以反過來從eureka server拉 取登錄檔,從 知道其他服務在哪 ribbon ...
深度剖析Spring Cloud底層原理
毫無疑問,spring cloud 是目前微服務架構領域的翹楚,無數的書籍部落格都在講解這個技術。不過大多數講解還停留在對 spring cloud 功能使用的層面,其底層的很多原理,很多人可能並不知曉。實際上,spring cloud 是乙個全家桶式的技術棧,它包含了很多元件。本文先從最核心的幾個...