這篇文章參考了官方文件,主要是描述了eureka client 和 eureka server 之間的交流機制; peer to peer 的 對等複製交流機制;
eureka 官方文件
euraka 的 client 與 server 之間的交流主要通過如下方面;
register (服務註冊) ; eureka client 會向 eureka server 註冊 關於自生執行例項的資訊,比如 ip 位址,主機名,健康狀態;
renew(服務續約);eureka client 會向 eureka server 每隔30秒傳送心跳;續約的目的是通知 eureka server 自己代表的例項是處於存活狀態;如果 eureka server 90 秒內 未收到 續約心跳,就會將這個例項從服務列表中剔除;官方建議是不要修改續約間隔,原因是伺服器要使用這些資訊去確認 eureka server 與 eureka client 之間的交流是否存在廣泛傳播的問題;
fetch registry(抓取註冊列表);eureka clients 會 從 eureka server 中 抓取註冊的服務列表並且快取到本地;eureka clients 快取本地的服務列表資訊會以30秒為間隔定期更新增量資訊(上次抓取與當前抓取的服務列表之間不同的資訊);通常 eureka server 會儲存增量資訊3分鐘;因此,eureka clients 每個增量抓取的服務資訊有可能是相同的例項;eureka client 會自動處理這些重複的資訊;
如果處於一些原因導致抓取的資訊不匹配,eureka client 就會重新抓取整個註冊列表的服務資訊;eureka 抓取的資訊是以json或者xml格式,通常是josn格式,並且是被壓縮過資訊,這些壓縮過的資訊與沒壓縮過的細資訊是相同,壓縮的目的就是減小體積,提公升效能;
cancel(服務下線);eureka client 會傳送 下線請求給 eureka server ,eureka server 就會將 這個 client 的例項從註冊列表中剔除;傳送下線請求**如下:
discoverymanager.getinstance().shutdowncomponent()time lag (時間差);所有的 eureka client操作都會反應給 eureka server 或者 接下來其他的 eureka client ;由於 eureka server 會快取 有效資訊並根據時間週期更新,eureka client 也會 根據時間週期定期更新增量資訊;因此,可能會佔據2分鐘左右的時間將更新的資訊全部傳送到eureka client ;
eureka clients 與 eureka server 之間的交流是在相同的zone之間交流;如果 server發生問題或者不在相同的zone中,client 就會將 故障轉移到server 的其他zone中處理,每個node中都會有乙個zone用於專門處理故障;
如果 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 註冊資訊,因此流量傾斜到某組例項,會造成容量問題;
peer之間斷網會發生如下情況:
peers 之間心跳複製就會失敗,server 會檢查到這種情況並且進入自我保護機制,保護當前已經儲存的資訊;
server會出現孤立情況,換句話說有些 eureka client 會 收到 新的註冊資訊,有些則收不到;也就是我們經常說的資料丟失;
當網路恢復並且穩定,peers 之間能夠進行健康交流,註冊資訊會自動的同步到其他server;
SpringBoot Eureka啟動失敗
異常 springboot eureka啟動失敗 解決方法 org.springframework.cloud spring cloud dependencies 版本pom import 是因為cloud版本和boot版本不匹配 大版本對應 spring boot spring cloud 1.2...
微控制器魔法程式設計百度雲 微控制器學習交流
相對來說,微控制器入門還是比較難的,剛接觸到微控制器的人肯定是一臉迷茫,並不清楚它到底是何方神獸,也不清楚它具體是做什麼的,也無從下手,我相信初學者肯定會這樣。都是這樣過來的,我們學校的微控制器課程安排的是大二下學期才上課,但是大一的時候就遇到了教微控制器課程的老師,然後就一直跟著老師學習,按著老師...
鑽研還是交流
今天開會,確定新專案的開發計畫,也正式給了我個名分 專案經理。會上,我提出希望以後隊員之間加強交流,碰到困難不要一味孤軍奮戰。因為交流可以促進知識互補,相互學習,共同提高 也可以讓成員少走彎路,提高工作效率。但是副總經理反駁了我的意見,她認為過多交流會降低成員鑽研問題的積極性,增加依賴心理。以後有人...