SpringCloud之Eureka

SpringCloud之Eureka


推薦參考:https://www.springcloud.cc/spring-cloud-dalston.html#_service_discovery_eureka_clients

1. 什么是Eureka

  • Eureka 用于簡化分布式系統的服務治理,基于REST的服務,用于服務的注冊與發現。通過注冊發現、客戶端負載均衡和故障轉移機制,提升中間層服務的彈性與可維護性有了服務注冊與發現,只需要使用服務的標識符,就可以訪問到服務,而不需要修改服務調用的配置文件了。 其設計優先保障可用性(AP 模型),尤其適合云環境中動態伸縮的服務架構。在 Spring Cloud 生態中,它已成為微服務基礎設施的關鍵組件。


2. 核心作用

  • 服務注冊與發現

    服務注冊:服務提供者(Provider)啟動時,將自身信息(如 IP、端口、服務名)注冊到 Eureka Server,形成服務注冊表。

    服務發現:服務消費者(Consumer)通過 Eureka Server 查詢并獲取目標服務的可用實例列表,基于本地緩存實現快速調用。

    動態更新:客戶端每 30 秒拉取一次服務注冊表,確保信息時效性。

  • 中間層負載均衡

    針對微服務架構中的中間層服務(如數據庫訪問層、業務邏輯層),提供客戶端負載均衡能力,支持輪詢等基礎算法。

    與 AWS ELB(面向終端 Web 流量)互補,解決 AWS 環境下中間層服務暴露的安全性問題。

  • 故障轉移與健康監測

    心跳機制:服務實例每 30 秒向 Eureka Server 發送心跳。若 90 秒未收到心跳,則自動剔除該實例。

    故障切換:消費者通過本地緩存的服務列表,自動切換到健康實例,避免單點故障影響系統可用性。


3. 基本架構

  • Springcloud 封裝了Netflix公司開發的Eureka模塊來實現服務注冊與發現.

  • Eureka采用了 C-S 的架構設計,Eureka Server作為服務注冊功能的服務器,他是服務注冊中心.
    而系統中的其他微服務,使用Eureka的客戶端連接到Eureka Server并維持心跳連接。這樣系統的維護人員就可以通過Eureka Server來監控系統中各個微服務是否正常運行,Springcloud 的一些其他模塊 (比如Zuul) 就可以通過Eureka Server來發現系統中的其他微服務,并執行相關的邏輯.

  • Eureka 包含兩個組件:Eureka ServerEureka Client:

    Eureka Server 提供服務注冊,各個節點啟動后,回在Eureka Server中進行注冊,這樣Eureka Server中的服務注冊表中將會儲存所有課用服務節點的信息,服務節點的信息可以在界面中直觀的看到.

    Eureka Client 是一個Java客戶端,用于簡化Eureka Server的交互,客戶端同時也具備一個內置的,使用輪詢負載算法的負載均衡器。在應用啟動后,將會向Eureka Server發送心跳(默認周期為30秒) 。如果Eureka Server在多個心跳周期內沒有接收到某個節點的心跳,Eureka Server將會從服務注冊表中把這個服務節點移除掉 (默認周期為90s).

  • 三大角色:

    Eureka Server:提供服務的注冊與發現

    Service Provider:服務生產方,將自身服務注冊到Eureka中,從而使服務消費方能夠找到

    Service Consumer:服務消費方,從Eureka中獲取注冊服務列表,從而找到消費服務


4. 自我保護機制

.
默認情況下,當Eureka Server在一定時間內沒有收到實例的心跳,便會把該實例從注冊表中刪除

(默認是90秒),但是,如果短時間內丟失大量的實例心跳,便會觸發Eureka Server的自我保護機

制,比如在開發測試時,需要頻繁地重啟微服務實例,但是我們很少會把Eureka Server一起重啟

(因為在開發過程中不會修改Eureka 注冊中心),當一分鐘內收到的心跳數大量減少時,會觸發該

保護機制。可以在Eureka 管理界面看到Renews threshold和Renews(last min),當后者(最后一分鐘

收到的心跳數)小于前者(心跳閾值)的時候,觸發保護機制,會出現紅色的警告:

EMERGENCY!EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN
THEY’RE NOT.RENEWALS ARE LESSER THAN THRESHOLD AND HENCE THE INSTANCES
ARE NOT BEGING EXPIRED JUST TO BE SAFE.

從警告中可以看到,Eureka 認為雖然收不到實例的心跳,但它認為實例還是健康的,Eureka 會保護這些實例,不會把它們從注冊表中刪掉。

該保護機制的目的是避免網絡連接故障,在發生網絡故障時,微服務和注冊中心之間無法正常通

信,但服務本身是健康的,不應該注銷該服務,如果Eureka因網絡故障而把微服務誤刪了,那即使

網絡恢復了,該微服務也不會重新注冊到Eureka Server了,因為只有在微服務啟動的時候才會發起

注冊請求,后面只會發送心跳和服務列表請求,這樣的話,該實例雖然是運行著,但永遠不會被其

它服務所感知。所以,Eureka Server在短時間內丟失過多的客戶端心跳時,會進入自我保護模式,
該模式下,Eureka 會保護注冊表中的信息,不在注銷任何微服務,當網絡故障恢復后,Eureka 會自動退出保護模式。自我保護模式可以讓集群更加健壯。

但是我們在開發測試階段,需要頻繁地重啟發布,如果觸發了保護機制,則舊的服務實例沒有被刪

除,這時請求有可能跑到舊的實例中,而該實例已經關閉了,這就導致請求錯誤,影響開發測試。

所以,在開發測試階段,我們可以把自我保護模式關閉,只需在Eureka server配置文件中加上如下

配置即可:eureka.server.enable-self-preservation=false【不推薦關閉自我保護機制】


5. 主流注冊中心對比(Eureka,Consul,Zookeeper,Nacos)

.
根據CAP原理,將NoSQL數據庫分成了滿足CA原則,滿足CP原則和滿足AP原則三大類, CAP理論
指出,一個分布式系統不可能同時滿足C (一致性) 、A (可用性) 、P (容錯性),由于分區容錯性P再分布式系統中是必須要保證的,因此我們只能再A和C之間進行權衡。

CA:單點集群,滿足一致性,可用性的系統,通常可擴展性較差
CP:滿足一致性,分區容錯的系統,通常性能不是特別高
AP:滿足可用性,分區容錯的系統,通常可能對一致性要求低一些

對比圖表:

注冊中心CAP模型一致性協議設計側重點典型適用場景
EurekaAP自定義復制協議高可用性、最終一致性Netflix 生態、Spring Cloud 體系、容忍短暫不一致的云原生環境
ConsulCPRaft強一致性、多數據中心支持金融、政務等強一致需求場景;多數據中心管理
ZookeeperCPZAB(類Paxos)強一致性、順序一致性分布式協調場景(如Kafka、Hadoop)、分布式鎖、選主
Nacos混合模式(AP/CP可切換)Distro(AP)Raft(CP)靈活適配、臨時實例AP/持久實例CP全場景覆蓋,微服務注冊發現與配置中心;動態切換需求

6. 問:作為分布式服務注冊中心,Eureka比Zookeeper好在哪里?

.
答:

Zookeeper保證的是CP:

當向注冊中心查詢服務列表時,我們可以容忍注冊中心返回的是幾分鐘以前的注冊信息,但不能接收服務直接down掉不可用。也就是說,服務注冊功能對可用性的要求要高于一致性。但zookeeper會出現這樣一種情況,當master節點因為網絡故障與其他節點失去聯系時,剩余節點會重新進行leader選舉。問題在于,選舉leader的時間太長,30-120s,且選舉期間整個zookeeper集群是不可用的,這就導致在選舉期間注冊服務癱瘓。在云部署的環境下,因為網絡問題使得zookeeper集群失去master節點是較大概率發生的事件,雖然服務最終能夠恢復,但是,漫長的選舉時間導致注冊長期不可用,是不可容忍的。

Eureka保證的是AP:

Eureka看明白了這一點,因此在設計時就優先保證可用性。Eureka各個節點都是平等的,幾個節點掛掉不會影響正常節點的工作,剩余的節點依然可以提供注冊和查詢服務。而Eureka的客戶端在向某個Eureka注冊時,如果發現連接失敗,則會自動切換至其他節點,只要有一臺Eureka還在,就能保住注冊服務的可用性,只不過查到的信息可能不是最新的,除此之外,Eureka還有之中自我保護機制,如果在15分鐘內超過85%的節點都沒有正常的心跳,那么Eureka就認為客戶端與注冊中心出現了網絡故障,此時會出現以下幾種情況:

  • Eureka不在從注冊列表中移除因為長時間沒收到心跳而應該過期的服務
  • Eureka仍然能夠接受新服務的注冊和查詢請求,但是不會被同步到其他節點上 (即保證當前節點依然可用)
  • 當網絡穩定時,當前實例新的注冊信息會被同步到其他節點中。

因此,Eureka可以很好的應對因網絡故障導致部分節點失去聯系的情況,而不會像zookeeper那樣使整個注冊服務癱瘓。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/90870.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/90870.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/90870.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

squash壓縮合并

要將test分支的多次提交合并到dev分支并壓縮為一個commit,核心是使用 git merge --squash 命令(壓縮合并),具體步驟如下: 詳細步驟: 1. 切換到dev分支并拉取最新代碼先確保本地dev分支是最新的,…

飛書CEO謝欣:挑戰巨頭,打造AI新時代的Office

引言:飛書要做AI時代辦公協作的逐夢者與破局者。文 | 大力財經在AI浪潮席卷的當下,企業對AI既滿懷期待又充滿焦慮。“AI到底能不能用?AI到底怎么用?”成為縈繞在眾多企業心頭的難題。7月9日召開的飛書未來無限大會,飛書…

React 組件中怎么做事件代理?它的原理是什么?

在 React 組件中,**事件代理(Event Delegation)**其實是 React 內部實現的一部分,開發者通常無需手動實現事件代理,但理解它的原理和使用方式對于優化性能和掌握底層機制非常重要。一、React 中事件代理的原理React 使…

Vue 2現代模式打包:雙包架構下的性能突圍戰

文章目錄一、場景痛點:兼容性與性能的撕裂二、技術解析:Modern Mode的雙引擎驅動1. 基礎認知:什么是Modern Mode?2. 原理深入:HTML智能分發與Safari 10修復3. 性能收益對比表三、Vue 2項目實戰:啟用Modern模…

UniHttp中HttpApiProcessor生命周期鉤子介紹以及公共參數填充-以百度天氣接口為例

目錄 引言 一、UniHttp與HttpApiProcessor簡介 1、生命周期鉤子的重要性 2、公共參數填充的需求 3、生命周期鉤子相關介紹 二、HttpApiProcessor的實際應用 1、在Yml中定義相關參數 2、自定義HttpAPI注解 3、對接接口的定義 4、HttpApiProcessor的具體實現 5、實際調…

pytorch深度學習—RNN-循環神經網絡

結合生活實例,先簡單認識一下什么是循環神經網絡先想個問題:為什么需要 “循環”?你平時看句子、聽語音、看視頻,都是 “按順序” 來的吧?比如 “我吃蘋果” 和 “蘋果吃我”,字一樣但順序不同,…

深度學習常見名詞解釋、評價指標

目錄 一、魯棒性(robustness) 二、泛化能力(Generalization Ability) 核心含義: 如何衡量泛化能力? 三、先驗信息(Prior Information) 四、mIoU (Mean Intersection over Union&#xff0…

docker-compose安裝常用中間件

分為3大部分:數據庫:mysql,redis,mongodb,elasticsearch,neo4j,minio,influxdb,canal-server應用中間件:nacos,apollo,zookeeper&…

基于無人機 RTK 和 yolov8 的目標定位算法

目錄 背景 算法思路 代碼實現 驗證 背景 在城市交通巡檢中如何進行車輛違停判斷很重要,一個方法是通過精確坐標判斷車輛中心是否位于違停框中,我們假設無人機坐標已知,并且無人機云臺鏡頭垂直地面朝下,可根據圖像分辨率、無人機參…

go入門 - day1 - 環境搭建

0. 介紹 go語言可以做什么? a. 區塊鏈 b. 分布式/微服務/云原生 c. 服務器/游戲軟件go的優勢 a. 代碼量比C和Java少 b. 編譯速度比Java或者C快上5到6倍,比Scale塊10被 c. 性能比C慢20%,但是比Java、python等快上5到10倍 d. 內存管理和C媲美&a…

【華為OD】MVP爭奪戰(C++、Java、Python)

文章目錄題目描述輸入描述輸出描述示例解題思路算法思路核心步驟代碼實現C實現Java實現Python實現算法要點復雜度分析解題總結題目描述 在星球爭霸籃球賽對抗賽中,最大的宇宙戰隊希望每個人都能拿到MVP,MVP的條件是單場最高分得分獲得者。可以并列所以宇…

Datawhale 2025 AI夏令營 MCP Server Task2

魔搭MCP &Agent賽事(MCP Server開發)/夏令營:動手開發MCP Server學習鏈接:魔搭MCP &Agent賽事(MCP Server開發) - Datawhale Task1回顧 1.task1應用功能 luner_info每日黃歷 這是一個可以獲取某天…

敏捷開發方法全景解析

核心理念:敏捷開發是以快速響應變化為核心的項目管理方法論,通過迭代式交付、自組織團隊和持續反饋,實現高質量軟件的高效交付。其本質是擁抱變化優于遵循計劃,強調"可工作的軟件高于詳盡的文檔"。 一、敏捷核心思想體系 #mermaid-svg-y7iyWsQGVWn3IpEi {font-fa…

Socket到底是什么(簡單來說)

簡單來說: Socket 抽象了網絡通信的復雜底層細節,讓應用程序開發者可以專注于發送和接收數據,而不用去操心數據在網絡上是如何傳輸的。 它就像一個“黑盒子”,你只需要把數據扔進去,或者從里面取數據,至于數…

linux系統mysql性能優化

1、系統最大打開文件描述符數查看限制 ulimit -n更改配置 # 第一步 sudo vim /etc/security/limits.conf* soft nofile 1048576 * hard nofile 1048576# 第二步 sudo vim /etc/sysctl.conffs.file-max 1048576# 第三步(重啟系統) sudo reboot驗證生效 u…

免費的需要嘗試claude code的API安利,截至今天可用(7月13號)

安裝方法放最后(很簡單,但是你得搞定網絡) 注冊如下: 鏈接如下(有詳細說明): 🚀 AnyRouter|Claude Code 免費共享平臺 安裝(windows用戶特殊點&#xff0…

Java 屬性配置文件讀取方法詳解

Java 屬性配置文件讀取方法詳解 一、配置文件基礎概念 1. 配置文件類型對比類型格式優點缺點適用場景Propertieskeyvalue簡單易讀,Java原生支持不支持層級結構簡單配置,JDBC參數XML標簽層級結構結構化強,支持復雜數據類型冗余,解析…

NW728NW733美光固態閃存NW745NW746

美光NW系列固態閃存深度解析:NW728、NW733、NW745與NW746的全方位評測技術架構與核心創新美光NW系列固態閃存(包括NW728、NW733、NW745、NW746)的技術根基源于其先進的G9 NAND架構。該架構通過5納米制程工藝和多層3D堆疊技術,在單…

【面試八股文】2025最新軟件測試面試

一、測試基礎 1、測試策略或測試包括哪些,測試要覆蓋哪些方面 UI、功能、性能、可靠性、易用性、兼容性、安全性、安裝卸載 2、設計測試用例的辦法 等價類、邊界值、錯誤推測法、場景法等設計方法來編寫測試用例的 (1)等價類分為有效等價…

AI軟件出海SEO教程

一、出海SEO核心思路 本地化:內容、技術、用戶體驗全面適應目標市場。關鍵詞策略:圍繞目標用戶的真實搜索習慣做關鍵詞挖掘和布局。內容為王:持續輸出高質量、解決用戶痛點的內容。技術優化:保證網站速度、結構、移動端體驗及安全…