SpringCloud升級之路2020.0.x版-16.Eureka架構和核心概念


本系列代碼地址:https://github.com/HashZhang/spring-cloud-scaffold/tree/master/spring-cloud-iiford

image

Eureka 目前 1.x 版本還在更新,但是應該不會更新新的功能了,只是對現有功能進行維護,升級並兼容所需的依賴。 Eureka 2.x 已經胎死腹中了。但是,這也不代表 Eureka 就是不能用了。如果你需要一個簡便易於部署的注冊中心,Eureka 還是一個很好的選擇。雲服務環境中,基本上所有實例地址和微服務名稱都在不斷變化,也並不太需要 Eureka 所缺少的持久化特性。當你的集群屬於中小規模的時候(節點小於 1000 個), Eureka 依然是一個不錯的選擇。當你的集群很大的時候,Eureka 的同步機制可能就限制了他的表現。

Eureka 的設計比較小巧,沒有復雜的同步機制(例如 Nacos 基於 Raft,Zookeeper 基於 Zab),也沒有復雜的持久化機制,集群關系只是簡單的將收到的客戶端請求轉發到集群內的其他 Eureka 實例。Eureka 本身也只有注冊中心的功能,不像其他種類的注冊中心那樣,將注冊中心和配置中心合在一起,例如 Consul 和 nacos。

image

這里我們忽略所有的 AWS 相關的術語以及配置還有相關邏輯處理。

Eureka 中的術語:

  1. Eureka 實例:每個注冊到 Eureka 上面的實例就是 Eureka 實例
  2. Eureka 實例狀態:包括 UP(可以處理請求),DOWN(健康檢查失敗,不能正常處理請求),STARTING(啟動中,不能處理請求),OUT_OF_SERVICE(人為下線,暫時不處理請求),UNKNOWN(未知狀態)。
  3. Eureka 服務器:作為注冊中心運行,主要提供實例管理功能(處理實例注冊(register)請求、處理實例注銷(cancel)請求、處理實例心跳(renew)請求、內部處理實例過期(evict))、實例查詢功能(各種查詢實例信息的接口,例如通過 AppName 獲取實例列表,通過實例 id 獲取實例信息等等)
  4. Eureka 服務器集群:Eureka 服務器的集群,每個 Eureka 服務器都配置了區域以及可用區,Eureka 服務器收到的客戶端請求會轉發到同一區域內的其他 Eureka 服務器,可以配置優先發到同一可用區的 Eureka 服務器。非同一區域內 Eureka 服務器,通過定時拉取的方式進行同步。
  5. Eureka 客戶端:請求 Eureka 服務器的客戶端。封裝發送實例注冊(register)請求、實例注銷(cancel)請求和實例心跳(renew)請求。
  6. VIP(或者是 Virtual Hostname): Eureka 中可以通過兩種方式獲取實例,一個是通過服務名稱,另一種是通過 VIP。每個實例都有服務名稱,以及 VIP。Eureka 服務器中的索引方式是以服務名稱為 key 的索引,我們也可以通過遍歷所有實例信息的方式通過 VIP 字符串匹配獲取相關的實例。在 Spring Cloud 體系中,一個實例的 VIP、SVIP(其實就是 Secure VIP,即 https 的地址)以及服務名稱都是 spring.application.name 指定的服務名稱。

image

image

首先,Service A 通過 Eureka Client 發送注冊請求(Register)到同一可用區的 Eureka Server 1。之后通過發送心跳請求(Renew)到這個 Eureka Server 1. Eureka Server 1 收到這些請求的時候,會處理這些請求並將這些請求轉發到其他的集群內的 Eureka Server 2 和 Eureka Server 3. Eureka Server 2 和 Eureka Server 3 不會再轉發收到的 Eureka Server 1 轉發過來的請求。然后,Service B 還有 Service C 通過 Eureka 獲取到了 Service A 的位置,最后調用了 Service A。

對於本地沒有查詢到的微服務,Eureka Server 還會從遠程 Region 的 Eureka Server 去獲取,例如這里對於 Service D,本地沒有查到,Eureka Server 會返回遠程 Region 的 Service D 的實例。由於本地有 Service A,所以肯定不會返回遠程 Region 的 Service A 的實例。並且,本地是定時拉取的遠程 Region 的 Service 列表,並不是每次查詢的時候現查詢的。

一般的,微服務之間的互相調用,並不經過 Eureka,也不會涉及到 Eureka 客戶端了,而是通過負載均衡器調用,這個我們后面就會提到。

我們這一節詳細分析了 Eureka 的架構,以及其中的核心概念。下一節,我們將開始介紹我們微服務的注冊中心 Eureka 的實例配置。

微信搜索“我的編程喵”關注公眾號,每日一刷,輕松提升技術,斬獲各種offer


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM