簡(jiǎn)單了解springboot eureka交流機(jī)制
一 前言
這篇文章參考了官方文檔,主要是描述了eureka client 和 eureka server 之間的交流機(jī)制; peer to peer 的 對(duì)等復(fù)制交流機(jī)制;
eureka 官方文檔
二 server client 之間的交流
euraka 的 client 與 server 之間的交流主要通過(guò)如下方面;
2.1 Register
Register (服務(wù)注冊(cè)) ; Eureka client 會(huì)向 Eureka server 注冊(cè) 關(guān)于自生運(yùn)行實(shí)例的信息,比如 ip 地址,主機(jī)名,健康狀態(tài);
2.2 Renew
Renew(服務(wù)續(xù)約);Eureka client 會(huì)向 Eureka server 每隔30秒發(fā)送心跳;續(xù)約的目的是通知 Eureka server 自己代表的實(shí)例是處于存活狀態(tài);如果 Eureka server 90 秒內(nèi) 未收到 續(xù)約心跳,就會(huì)將這個(gè)實(shí)例從服務(wù)列表中剔除;官方建議是不要修改續(xù)約間隔,原因是服務(wù)器要使用這些信息去確認(rèn) Eureka server 與 Eureka client 之間的交流是否存在廣泛傳播的問(wèn)題;
2.3 Fetch Registry
Fetch Registry(抓取注冊(cè)列表);Eureka clients 會(huì) 從 Eureka server 中 抓取注冊(cè)的服務(wù)列表并且緩存到本地;Eureka clients 緩存本地的服務(wù)列表信息會(huì)以30秒為間隔定期更新增量信息(上次抓取與當(dāng)前抓取的服務(wù)列表之間不同的信息);通常 Eureka server 會(huì)保存增量信息3分鐘;因此,Eureka clients 每個(gè)增量抓取的服務(wù)信息有可能是相同的實(shí)例;Eureka client 會(huì)自動(dòng)處理這些重復(fù)的信息;
如果處于一些原因?qū)е伦ト〉男畔⒉黄ヅ洌珽ureka Client 就會(huì)重新抓取整個(gè)注冊(cè)列表的服務(wù)信息;Eureka 抓取的信息是以json或者xml格式,通常是josn格式,并且是被壓縮過(guò)信息,這些壓縮過(guò)的信息與沒(méi)壓縮過(guò)的細(xì)信息是相同,壓縮的目的就是減小體積,提升性能;
2.4 Cancel
Cancel(服務(wù)下線);Eureka client 會(huì)發(fā)送 下線請(qǐng)求給 Eureka server ,Eureka server 就會(huì)將 這個(gè) client 的實(shí)例從注冊(cè)列表中剔除;發(fā)送下線請(qǐng)求代碼如下:
DiscoveryManager.getInstance().shutdownComponent()
2.5 Time Lag
Time Lag (時(shí)間差);所有的 Eureka client操作都會(huì)反應(yīng)給 Eureka Server 或者 接下來(lái)其他的 Eureka client ;由于 Eureka server 會(huì)緩存 有效信息并根據(jù)時(shí)間周期更新,Eureka Client 也會(huì) 根據(jù)時(shí)間周期定期更新增量信息;因此,可能會(huì)占據(jù)2分鐘左右的時(shí)間將更新的信息全部發(fā)送到Eureka Client ;
三 peer to peer 之間的交流
3.1 故障處理
Eureka clients 與 Eureka server 之間的交流是在相同的zone之間交流;如果 server發(fā)生問(wèn)題或者不在相同的zone中,client 就會(huì)將 故障轉(zhuǎn)移到server 的其他zone中處理,每個(gè)node中都會(huì)有一個(gè)zone用于專(zhuān)門(mén)處理故障;
3.2 peer to peer
如果 server 開(kāi)始接受流量,Eureka client所有的操作都會(huì)在server 上執(zhí)行,附近的 集群node就會(huì)嘗試復(fù)制一份server已知信息到自己的node;如果Eureka clinet 操作出于某些原因失敗了,這些信息就會(huì)遺留到下次心跳進(jìn)行協(xié)調(diào),心跳也會(huì)在server之間復(fù)制;
如果server啟動(dòng) ,就會(huì)嘗試獲取附近 node 的信息復(fù)制一份過(guò)來(lái);如果從這個(gè)node復(fù)制過(guò)來(lái)的信息存在問(wèn)題,就會(huì)放棄與之peer to peer(對(duì)等復(fù)制);如果client續(xù)約的時(shí)間低至一個(gè)閾值(15 分鐘內(nèi)低于 85%),那么server 也會(huì)停止這些過(guò)期的 client 以保護(hù) 已經(jīng)注冊(cè)的信息;
peer to peer 也就是 eureka 的自我保護(hù)機(jī)制; 當(dāng) Eureka client 與 Eureka server之間存在網(wǎng)絡(luò)分區(qū)的情況,Eureka server 會(huì) 保護(hù)已經(jīng)保存的信息,此時(shí) Eureka client 是不能向 Eureka server 注冊(cè)自己,最好的方法就是嘗試向其他的 Eureka server注冊(cè)自己;在這種情況下 server 無(wú)法從附近的 node 獲取注冊(cè)信息,此時(shí)會(huì)等待 5分鐘 讓 client 注冊(cè)信息,因此流量?jī)A斜到某組實(shí)例,會(huì)造成容量問(wèn)題;
3.3 peer之間斷網(wǎng)
peer之間斷網(wǎng)會(huì)發(fā)生如下情況:
peers 之間心跳復(fù)制就會(huì)失敗,server 會(huì)檢查到這種情況并且進(jìn)入自我保護(hù)機(jī)制,保護(hù)當(dāng)前已經(jīng)保存的信息;
server會(huì)出現(xiàn)孤立情況,換句話說(shuō)有些 Eureka Client 會(huì) 收到 新的注冊(cè)信息,有些則收不到;也就是我們經(jīng)常說(shuō)的數(shù)據(jù)丟失;
當(dāng)網(wǎng)絡(luò)恢復(fù)并且穩(wěn)定,peers 之間能夠進(jìn)行健康交流,注冊(cè)信息會(huì)自動(dòng)的同步到其他server;
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。
相關(guān)文章:
1. css進(jìn)階學(xué)習(xí) 選擇符2. html清除浮動(dòng)的6種方法示例3. ASP中解決“對(duì)象關(guān)閉時(shí),不允許操作。”的詭異問(wèn)題……4. ASP基礎(chǔ)知識(shí)Command對(duì)象講解5. ASP.NET Core按用戶等級(jí)授權(quán)的方法6. HTML <!DOCTYPE> 標(biāo)簽7. XML入門(mén)精解之結(jié)構(gòu)與語(yǔ)法8. asp知識(shí)整理筆記4(問(wèn)答模式)9. 淺談SpringMVC jsp前臺(tái)獲取參數(shù)的方式 EL表達(dá)式10. .NET6打包部署到Windows Service的全過(guò)程
