簡單了解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 之間的交流是否存在廣泛傳播的問題;
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格式,并且是被壓縮過信息,這些壓縮過的信息與沒壓縮過的細信息是相同,壓縮的目的就是減小體積,提升性能;
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
如果 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;
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。
相關文章: