1. 程式人生 > 程式設計 >簡單瞭解springboot eureka交流機制

簡單瞭解springboot eureka交流機制

一 前言

這篇文章參考了官方文件,主要是描述了eureka client 和 eureka server 之間的交流機制; peer to peer 的 對等複製交流機制;

eureka 官方文件

二 server client 之間的交流

euraka 的 client 與 server 之間的交流主要通過如下方面;

2.1 Register

Register (服務註冊) ; Eureka client 會向 Eureka server 註冊 關於自生執行例項的資訊,比如 ip 地址,主機名,健康狀態;

2.2 Renew

Renew(服務續約);Eureka client 會向 Eureka server 每隔30秒傳送心跳;續約的目的是通知 Eureka server 自己代表的例項是處於存活狀態;如果 Eureka server 90 秒內 未收到 續約心跳,就會將這個例項從服務列表中剔除;官方建議是不要修改續約間隔,原因是伺服器要使用這些資訊去確認 Eureka server 與 Eureka client 之間的交流是否存在廣泛傳播的問題;

簡單瞭解springboot eureka交流機制

2.3 Fetch Registry

Fetch Registry(抓取註冊列表);Eureka clients 會 從 Eureka server 中 抓取註冊的服務列表並且快取到本地;Eureka clients 快取本地的服務列表資訊會以30秒為間隔定期更新增量資訊(上次抓取與當前抓取的服務列表之間不同的資訊);通常 Eureka server 會儲存增量資訊3分鐘;因此,Eureka clients 每個增量抓取的服務資訊有可能是相同的例項;Eureka client 會自動處理這些重複的資訊;

如果處於一些原因導致抓取的資訊不匹配,Eureka Client 就會重新抓取整個註冊列表的服務資訊;Eureka 抓取的資訊是以json或者xml格式,通常是josn格式,並且是被壓縮過資訊,這些壓縮過的資訊與沒壓縮過的細資訊是相同,壓縮的目的就是減小體積,提升效能;

簡單瞭解springboot eureka交流機制

2.4 Cancel

Cancel(服務下線);Eureka client 會發送 下線請求給 Eureka server ,Eureka server 就會將 這個 client 的例項從註冊列表中剔除;傳送下線請求程式碼如下:

DiscoveryManager.getInstance().shutdownComponent()

2.5 Time Lag

Time Lag (時間差);所有的 Eureka client操作都會反應給 Eureka Server 或者 接下來其他的 Eureka client ;由於 Eureka server 會快取 有效資訊並根據時間週期更新,Eureka Client 也會 根據時間週期定期更新增量資訊;因此,可能會佔據2分鐘左右的時間將更新的資訊全部發送到Eureka Client ;

三 peer to peer 之間的交流

3.1 故障處理

Eureka clients 與 Eureka server 之間的交流是在相同的zone之間交流;如果 server發生問題或者不在相同的zone中,client 就會將 故障轉移到server 的其他zone中處理,每個node中都會有一個zone用於專門處理故障;

3.2 peer to peer

簡單瞭解springboot eureka交流機制

如果 server 開始接受流量,Eureka client所有的操作都會在server 上執行,附近的 叢集node就會嘗試複製一份server已知資訊到自己的node;如果Eureka clinet 操作出於某些原因失敗了,這些資訊就會遺留到下次心跳進行協調,心跳也會在server之間複製;

如果server啟動 ,就會嘗試獲取附近 node 的資訊複製一份過來;如果從這個node複製過來的資訊存在問題,就會放棄與之peer to peer(對等複製);如果client續約的時間低至一個閾值(15 分鐘內低於 85%),那麼server 也會停止這些過期的 client 以保護 已經註冊的資訊;

peer to peer 也就是 eureka 的自我保護機制; 當 Eureka client 與 Eureka server之間存在網路分割槽的情況,Eureka server 會 保護已經儲存的資訊,此時 Eureka client 是不能向 Eureka server 註冊自己,最好的方法就是嘗試向其他的 Eureka server註冊自己;在這種情況下 server 無法從附近的 node 獲取註冊資訊,此時會等待 5分鐘 讓 client 註冊資訊,因此流量傾斜到某組例項,會造成容量問題;

3.3 peer之間斷網

peer之間斷網會發生如下情況:

peers 之間心跳複製就會失敗,server 會檢查到這種情況並且進入自我保護機制,保護當前已經儲存的資訊;

server會出現孤立情況,換句話說有些 Eureka Client 會 收到 新的註冊資訊,有些則收不到;也就是我們經常說的資料丟失;

當網路恢復並且穩定,peers 之間能夠進行健康交流,註冊資訊會自動的同步到其他server;

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。