Eureka原理及工作流程

Eureka作爲分佈式系統的註冊中心,主要作用是用於服務治理,Eureka分爲Eureka Server和Eureka Client。
(1)Eureka Server—註冊中心服務端:服務提供者啓動時,會通過 Eureka Client 向 Eureka Server 註冊信息,Eureka Server 會在服務註冊表中存儲該服務的信息。服務消費者在調用服務時,如果 Eureka Client 沒有緩存註冊表的話,會從 Eureka Server 獲取最新的註冊表。
(2)Eureka Client—註冊中心客戶端:Eureka Client 是一個 Java 客戶端,用於簡化與 Eureka Server 的交互。Eureka Client 會拉取、更新和緩存 Eureka Server 中的信息。因此當所有的 Eureka Server 節點都宕掉,服務消費者依然可以使用緩存中的信息找到服務提供者,但是當服務有更改的時候會出現信息不一致。
(3)服務註冊後,Eureka Server會將註冊信息向其他Eureka Server進行同步,當服務消費者要調用服務提供者,則向服務註冊中心獲取服務提供者地址,然後會將服務提供者地址緩存在本地,下次再調用時,則直接從本地緩存中取,完成一次調用。
(4)微服務默認每30秒,就會從eureka服務端獲取一次最新的服務列表。如果某臺微服務down機,或者添加了幾臺機器,此時eureka server會通知訂閱他的客戶端,並讓客戶端更新服務列表,而且還會通知其他eureka server更新此信息。
(5)心跳檢測,微服務每30秒向eureka server發送心跳,eureka server若90s之內都沒有收到某個客戶端的心跳,則認爲此服務提供者出了問題,會從註冊的服務列表中將其刪除,並通知訂閱它的客戶端更新服務列表,而且還會通知其他eureka server更新此信息。
(6)保護機制:默認情況下,如果 Eureka Server 在一定的 90s 內沒有接收到某個微服務實例的心跳,會註銷該實例。但是在微服務架構下服務之間通常都是跨進程調用,網絡通信往往會面臨着各種問題,比如微服務狀態正常,網絡故障,導致此實例被註銷。固定時間內大量實例被註銷,可能會嚴重威脅整個微服務架構的可用性。爲了解決這個問題,Eureka 開發了自我保護機制。
在這裏插入圖片描述
Eureka進入自我保護機制後,將不再從註冊表中移除因長時間沒收到心跳而應該過期的服務,並且仍然能夠接收新服務的註冊和查詢請求,但是不會被同步到其他節點上,當網絡穩定時,當前實例新的註冊信息會被同步到其他節點中。
Eureka 自我保護機制是爲了防止誤殺服務而提供的一個機制。當個別客戶端出現心跳失聯時,則認爲是客戶端的問題,剔除掉客戶端;當 Eureka 捕獲到大量的心跳失敗時,則認爲可能是網絡問題,進入自我保護機制;當客戶端心跳恢復時,Eureka 會自動退出自我保護機制。
如果在保護期內剛好這個服務提供者非正常下線了,此時服務消費者就會拿到一個無效的服務實例,即會調用失敗。對於這個問題需要服務消費者端要有一些容錯機制。
(7)工作流程
1)Eureka Server 啓動成功,等待服務註冊,每個Eureka Server 都存在獨立完整的服務註冊表信息
2)Eureka Client 啓動時根據配置的 Eureka Server 地址去註冊中心註冊服務
3)Eureka Client 會每 30s 向 Eureka Server 發送一次心跳請求,證明客戶端服務正常
4)當 Eureka Server 90s 內沒有收到 Eureka Client 的心跳,註冊中心則認爲該節點失效,會註銷該實例
5)單位時間內 Eureka Server 統計到有大量的 Eureka Client 沒有上送心跳,則認爲可能爲網絡異常,進入自我保護機制,不再剔除沒有上送心跳的客戶端
6)當 Eureka Client 心跳請求恢復正常之後,Eureka Server 自動退出自我保護模式
7)Eureka Client 定時全量或者增量從註冊中心獲取服務註冊表,並且將獲取到的信息緩存到本地
8)服務調用時,Eureka Client 會先從本地緩存找尋調取的服務。如果獲取不到,先從註冊中心刷新註冊表,再同步到本地緩存
9)Eureka Client 獲取到目標服務器信息,發起服務調用
10)Eureka Client 程序關閉時向 Eureka Server 發送取消請求,Eureka Server 將實例從註冊表中刪除
(8)Eureka Server 之間通過複製的方式完成數據的同步,Eureka還提供了客戶端緩存機制,即使所有的Eureka Server 都掛掉,客戶端依然可以利用緩存中的信息消費其他服務的API。綜上,Eureka通過心跳檢查、客戶端緩存等機制,確保了系統的高可用性、靈活性和可伸縮性。
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章