SpringCloud Eureka服務注冊

什么是Eureka?

? ??Eureka是基于REST(具像狀態(tài)傳輸)的服務,主要用于AWS云中定位服務,以實現(xiàn)中間層服務器的負載平衡和故障轉(zhuǎn)移。我們將此服務稱為Eureka服務器。當然現(xiàn)在大部分公司都用它來當做微服務發(fā)現(xiàn)的模塊。Eureka還附帶了一個基于java的客戶端組件Eureka客戶端,這使得與服務的交互更加容易。

下圖為Eureka服務端和客戶端的交互圖


上面的架構(gòu)描述了Eureka在Netflix上的部署方式,這是您通常運行它的方式。每個區(qū)域有一個eureka集群,它只知道該區(qū)域中的實例。每個區(qū)域至少有一個eureka服務器來處理區(qū)域故障。服務在Eureka注冊,然后每30秒發(fā)送一次心跳來續(xù)簽租約。如果客戶端有幾次無法續(xù)訂租約,那么它將在大約90秒內(nèi)從服務器注冊表中取出。將注冊信息和更新復制到集群????中的所有eureka節(jié)點。任何區(qū)域的客戶機都可以查找注冊表信息(每30秒發(fā)生一次)來定位其服務(可能在任何區(qū)域)并進行遠程調(diào)用。

1 對于非java的服務和客戶端

????對于非基于Java的服務,您可以選擇用其服務語言實現(xiàn)eureka的客戶端部分,或者您可以運行一個sideCar,它本質(zhì)上是一個Java應用程序,帶有一個處理注冊和心跳的嵌入式eureka客戶端?;赗EST的端點還公開給Eureka客戶機支持的所有操作。非java客戶機可以使用REST端點查詢關(guān)于其他服務的信息。

2 理解eureka客戶端服務器通信?

Register:服務注冊


當Eureka客戶端向Eureka Server注冊時,它提供自身的元數(shù)據(jù),比如IP地址、端口,運行狀況指示符URL,主頁等。

Renew:服務續(xù)約


Eureka客戶會每隔30秒發(fā)送一次心跳來續(xù)約。 通過續(xù)約來告知Eureka Server該Eureka客戶仍然存在,沒有出現(xiàn)問題。 正常情況下,如果Eureka Server在90秒沒有收到Eureka客戶的續(xù)約,它會將實例從其注冊表中刪除。 建議不要更改續(xù)約間隔。

Fetch Registries:獲取注冊列表信息


Eureka客戶機從服務器獲取注冊表信息并在本地緩存它。之后,客戶端使用這些信息來查找其他服務。通過獲取上一個獲取周期和當前獲取周期之間的增量更新,定期(每30秒)更新此信息。delta信息在服務器中保存的時間更長(大約3分鐘),因此獲取的delta可能再次返回相同的實例。Eureka客戶端自動處理重復的信息。

在獲得增量之后,Eureka客戶機通過比較服務器返回的實例計數(shù)來與服務器協(xié)調(diào)信息,如果由于某種原因信息不匹配,則再次獲取整個注冊表信息。Eureka服務器緩存delta、整個注冊表以及每個應用程序的壓縮有效負載和未壓縮信息。負載還同時支持JSON/XML格式。Eureka客戶端使用jersey apache客戶端以壓縮JSON格式獲取信息。

Cancel:服務下線

在停機時,Eureka客戶端向Eureka服務器發(fā)送一個取消請求。這將從服務器的實例注冊表中刪除該實例,從而有效地從通信流中刪除該實例。這是在Eureka客戶端關(guān)閉時完成的,應用程序應該確保在關(guān)閉期間調(diào)用以下命令。

DiscoveryManager.getInstance().shutdownComponent();

Eviction 服務剔除

在默認的情況下,當Eureka客戶端連續(xù)90秒沒有向Eureka服務器發(fā)送服務續(xù)約,即心跳,Eureka服務器會將該服務實例從服務注冊列表刪除,即服務剔除。

參考:https://github.com/Netflix/eureka/wiki/Eureka-REST-operations

3? 理解Eureka點對點通信

集群同步類型:

?Heartbeat :心跳續(xù)約 ?? ??

?Register : 注冊???

?Cancel : 下線?

?StatusUpdate : 添加覆蓋狀態(tài)?? ? ?

?DeleteStatusOverride : 刪除覆蓋狀態(tài)

????Eureka客戶端試圖與同一區(qū)域的Eureka服務器通信。如果與服務器的對話出現(xiàn)問題,或者服務器不在同一區(qū)域,則客戶機將故障轉(zhuǎn)移到其他區(qū)域的服務器。

????一旦服務器開始接收流量,在服務器上執(zhí)行的所有操作將復制到服務器所知道的所有對等節(jié)點。如果某個操作由于某種原因失敗,則在服務器之間復制的下一個心跳上協(xié)調(diào)信息。

????當Eureka服務器啟動時,它試圖從鄰近節(jié)點獲取所有實例注冊表信息。如果從節(jié)點獲取信息存在問題,服務器會在放棄之前嘗試所有的對等點。如果服務器能夠成功地獲取所有實例,它將根據(jù)這些信息設置應該接收的更新閾值。如果任何時候,續(xù)訂低于為該值配置的百分比(在15分鐘內(nèi)低于85%),服務器將停止實例過期以保護當前實例注冊中心信息。

????在Netflix中,上述保護稱為自我保護模式,主要用于在一組客戶機和Eureka服務器之間存在網(wǎng)絡分區(qū)故障的情況下進行保護。在這些場景中,服務器試圖保護它已經(jīng)擁有的信息。

1、Eureka Server不再從注冊列表中移除因為長時間沒收到心跳而應該過期的服務。

2、Eureka Server仍然能夠接受新服務的注冊和查詢請求,但是不會被同步到其它節(jié)點上,保證當前節(jié)點依然可用。

3、當網(wǎng)絡穩(wěn)定時,當前Eureka Server新的注冊信息會被同步到其它節(jié)點中。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容