簡單了解springboot eureka交流機制
一 前言
這篇文章參考了官方文檔,主要是描述了eureka client 和 eureka server 之間的交流機制; peer to peer 的 對等復(fù)制交流機制;
eureka 官方文檔
二 server client 之間的交流
euraka 的 client 與 server 之間的交流主要通過如下方面;
2.1 Register
Register (服務(wù)注冊) ; Eureka client 會向 Eureka server 注冊 關(guān)于自生運行實例的信息,比如 ip 地址,主機名,健康狀態(tài);
2.2 Renew
Renew(服務(wù)續(xù)約);Eureka client 會向 Eureka server 每隔30秒發(fā)送心跳;續(xù)約的目的是通知 Eureka server 自己代表的實例是處于存活狀態(tài);如果 Eureka server 90 秒內(nèi) 未收到 續(xù)約心跳,就會將這個實例從服務(wù)列表中剔除;官方建議是不要修改續(xù)約間隔,原因是服務(wù)器要使用這些信息去確認 Eureka server 與 Eureka client 之間的交流是否存在廣泛傳播的問題;
2.3 Fetch Registry
Fetch Registry(抓取注冊列表);Eureka clients 會 從 Eureka server 中 抓取注冊的服務(wù)列表并且緩存到本地;Eureka clients 緩存本地的服務(wù)列表信息會以30秒為間隔定期更新增量信息(上次抓取與當(dāng)前抓取的服務(wù)列表之間不同的信息);通常 Eureka server 會保存增量信息3分鐘;因此,Eureka clients 每個增量抓取的服務(wù)信息有可能是相同的實例;Eureka client 會自動處理這些重復(fù)的信息;
如果處于一些原因?qū)е伦ト〉男畔⒉黄ヅ洌珽ureka Client 就會重新抓取整個注冊列表的服務(wù)信息;Eureka 抓取的信息是以json或者xml格式,通常是josn格式,并且是被壓縮過信息,這些壓縮過的信息與沒壓縮過的細信息是相同,壓縮的目的就是減小體積,提升性能;
2.4 Cancel
Cancel(服務(wù)下線);Eureka client 會發(fā)送 下線請求給 Eureka server ,Eureka server 就會將 這個 client 的實例從注冊列表中剔除;發(fā)送下線請求代碼如下:
DiscoveryManager.getInstance().shutdownComponent()
2.5 Time Lag
Time Lag (時間差);所有的 Eureka client操作都會反應(yīng)給 Eureka Server 或者 接下來其他的 Eureka client ;由于 Eureka server 會緩存 有效信息并根據(jù)時間周期更新,Eureka Client 也會 根據(jù)時間周期定期更新增量信息;因此,可能會占據(jù)2分鐘左右的時間將更新的信息全部發(fā)送到Eureka Client ;
三 peer to peer 之間的交流
3.1 故障處理
Eureka clients 與 Eureka server 之間的交流是在相同的zone之間交流;如果 server發(fā)生問題或者不在相同的zone中,client 就會將 故障轉(zhuǎn)移到server 的其他zone中處理,每個node中都會有一個zone用于專門處理故障;
3.2 peer to peer
如果 server 開始接受流量,Eureka client所有的操作都會在server 上執(zhí)行,附近的 集群node就會嘗試復(fù)制一份server已知信息到自己的node;如果Eureka clinet 操作出于某些原因失敗了,這些信息就會遺留到下次心跳進行協(xié)調(diào),心跳也會在server之間復(fù)制;
如果server啟動 ,就會嘗試獲取附近 node 的信息復(fù)制一份過來;如果從這個node復(fù)制過來的信息存在問題,就會放棄與之peer to peer(對等復(fù)制);如果client續(xù)約的時間低至一個閾值(15 分鐘內(nèi)低于 85%),那么server 也會停止這些過期的 client 以保護 已經(jīng)注冊的信息;
peer to peer 也就是 eureka 的自我保護機制; 當(dāng) Eureka client 與 Eureka server之間存在網(wǎng)絡(luò)分區(qū)的情況,Eureka server 會 保護已經(jīng)保存的信息,此時 Eureka client 是不能向 Eureka server 注冊自己,最好的方法就是嘗試向其他的 Eureka server注冊自己;在這種情況下 server 無法從附近的 node 獲取注冊信息,此時會等待 5分鐘 讓 client 注冊信息,因此流量傾斜到某組實例,會造成容量問題;
3.3 peer之間斷網(wǎng)
peer之間斷網(wǎng)會發(fā)生如下情況:
peers 之間心跳復(fù)制就會失敗,server 會檢查到這種情況并且進入自我保護機制,保護當(dāng)前已經(jīng)保存的信息;
server會出現(xiàn)孤立情況,換句話說有些 Eureka Client 會 收到 新的注冊信息,有些則收不到;也就是我們經(jīng)常說的數(shù)據(jù)丟失;
當(dāng)網(wǎng)絡(luò)恢復(fù)并且穩(wěn)定,peers 之間能夠進行健康交流,注冊信息會自動的同步到其他server;
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。
相關(guān)文章:
1. HTTP協(xié)議常用的請求頭和響應(yīng)頭響應(yīng)詳解說明(學(xué)習(xí))2. XML入門的常見問題(三)3. XML在語音合成中的應(yīng)用4. HTML5實戰(zhàn)與剖析之觸摸事件(touchstart、touchmove和touchend)5. Vue如何使用ElementUI對表單元素進行自定義校驗及踩坑6. HTML DOM setInterval和clearInterval方法案例詳解7. 不要在HTML中濫用div8. XML 非法字符(轉(zhuǎn)義字符)9. CSS清除浮動方法匯總10. jscript與vbscript 操作XML元素屬性的代碼
