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核心思路 本地化:内容、技术、用户体验全面适应目标市场。关键词策略:围绕目标用户的真实搜索习惯做关键词挖掘和布局。内容为王:持续输出高质量、解决用户痛点的内容。技术优化:保证网站速度、结构、移动端体验及安全…