Eureka详解

news/2024/5/5 2:45:58

Eureka详解

一、Eureka概述

1. 什么是Eureka

Eureka 是 Netflix 开发的一款基于 REST 的服务注册与发现组件,广泛应用于基于 Spring Cloud 构建的微服务架构中。作为服务治理的核心组件之一,Eureka 负责维护服务注册表,使得各个分布式服务能够相互发现并进行通信。

二、Eureka架构与组件

1. Eureka Server

Eureka Server 是 Eureka 提供的服务端,主要负责服务注册与发现的功能。它可以部署为单节点或多节点集群,以实现高可用性和容错性。

主要职责:

  • 服务注册:接收服务提供者(Service Provider)的注册请求,将其元数据(如服务名、IP地址、端口、健康状态等)存储在服务注册表中。
  • 服务续约:服务提供者定期向 Eureka Server 发送心跳以更新其服务状态,保持注册信息的有效性。
  • 服务发现:响应服务消费者的查询请求,返回服务提供者的列表及其元数据,使消费者能够定位和访问所需服务。
  • 服务剔除:检测到服务提供者长时间未发送心跳时,将其从注册表中移除,避免消费者访问已失效的服务实例。

2. Service Provider(服务提供者)

Service Provider 是指提供服务的应用,通常基于 Spring Boot 或遵循 Eureka 通信协议的其他技术平台构建。它们将自己的服务注册到 Eureka Server,使得其他服务能够发现并调用这些服务。

关键行为:

  • 注册服务:启动时向 Eureka Server 注册服务实例,提交服务的元数据。
  • 发送心跳:定时向 Eureka Server 发送心跳(renewal request),证明服务实例仍然存活且可用。
  • 更新状态:当服务实例状态发生变化(如负载均衡策略、元数据更新等)时,及时通知 Eureka Server 更新注册信息。

3. Service Consumer(服务消费者)

Service Consumer 是依赖于服务提供者的服务或应用。它们通过 Eureka Server 查询所需服务的可用实例,并基于获取的信息进行动态服务调用。

关键操作:

  • 发现服务:从 Eureka Server 获取服务提供者的注册列表,包括服务实例的 IP 地址、端口和其他必要信息。
  • 负载均衡:利用 Ribbon、Feign 或其他客户端负载均衡器,根据 Eureka 返回的服务列表选择一个或多个实例进行调用。

三、Eureka配置详解

1. Eureka Server配置

  • eureka.client.register-with-eureka: 是否将当前Eureka Server作为客户端注册到其他Eureka Server上(通常设置为false,因为Eureka Server通常不需互相注册)。
  • eureka.client.fetch-registry: 是否从其他Eureka Server拉取服务注册表信息(同样通常设为false,除非构建多区域服务发现架构)。
  • eureka.server.enable-self-preservation: 是否开启自我保护模式,防止因网络波动导致的正常服务实例被误剔除。
  • eureka.server.eviction-interval-timer-in-ms: 清理无效服务实例的时间间隔。
  • eureka.instance.hostname: 服务实例的主机名。
  • eureka.instance.appname: 服务应用名称。
  • eureka.instance.instance-id: 服务实例唯一标识,通常结合主机名、端口等信息生成。
  • eureka.instance.prefer-ip-address: 是否优先使用IP地址而非主机名进行注册。
  • eureka.client.service-url.defaultZone: 指定Eureka Server的注册地址,用于服务提供者和服务消费者连接。

2. Service Provider配置

  • 与上述Eureka Server配置中的eureka.instance.*相同,用于定义服务实例的元数据。
  • eureka.client.service-url.defaultZone: 指定Eureka Server的注册地址,用于服务提供者注册自身服务。

3. Service Consumer配置

  • 与Service Provider类似,需要配置eureka.client.service-url.defaultZone指向Eureka Server。
  • 可能需要配置客户端负载均衡器(如Ribbon)的相关参数,如超时、重试策略等。

四、Eureka工作流程

  1. 服务注册:服务提供者启动时向Eureka Server发送注册请求,将自己的服务信息注册到服务注册表中。
  2. 服务续约:服务提供者定时向Eureka Server发送心跳,更新服务状态。
  3. 服务发现:服务消费者通过Eureka Client查询服务注册表,获取服务提供者的列表。
  4. 服务调用:服务消费者根据获取的服务实例信息,通过负载均衡策略选择一个实例进行调用。
  5. 服务下线与剔除:服务提供者正常关闭时会向Eureka Server发送下线请求;若未发送心跳超时,Eureka Server将自动剔除该服务实例。

五、总结

Eureka作为Spring Cloud生态系统中的服务注册与发现组件,为构建高可用、可伸缩的微服务架构提供了基础服务治理能力。通过合理配置Eureka Server、Service Provider与Service Consumer,可以实现服务的自动注册、发现、负载均衡以及故障隔离,简化微服务间的交互复杂性。随着技术发展,虽然出现了Consul、ZooKeeper等替代方案,但Eureka因其简单易用和与Spring Cloud的良好集成,仍被许多项目广泛采用。在实际使用中,应结合项目需求和团队熟悉度,选择最适合的服务发现解决方案。


http://www.mrgr.cn/p/58345318

相关文章

【Linux学习】Linux进程(二)

文章目录 📕查看进程🚀/proc目录🚀cwd与exe 📕改变进程的工作目录🚀chdir指令 📕vim卡住了怎么解决 本篇文章接着【LInux进程(一)】继续编写。 📕查看进程 &#x1f68…

《统计学习方法》 第4章 朴素贝叶斯法

文章目录 前言一、朴素贝叶斯法二、朴素贝叶斯法的学习和分类三、朴素贝叶斯算法四、贝叶斯估计总结 前言 本文只要记录一些书中的一些小知识点,挑一些本人认为重要的地方进行总结。 各位道友!道长(zhǎng) 道长(chǎng) 一、朴素贝叶斯法 朴素贝叶斯…

最新AI创作系统ChatGPT网站源码Midjourney-AI绘画系统,Suno-v3-AI音乐生成大模型。

一、前言 SparkAi创作系统是基于ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统,支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美,那么如何搭建部署AI创作ChatGPT?小编这里写一个详细图文教程吧。已支持GPT…

用于车载T-BOX汽车级的RA8900CE

用于车载T-BOX等高精度计时的汽车级时钟模块RTC:RA8900CE.车载实时时钟芯片RA8900CE内置32.768Khz的晶体,实现年、月、日、星期、小时、分钟和秒精准计时。RA8900CE满足AEC-Q200认证,内置温补功能,保证实时时钟的稳定可靠,功耗低至…

c++ - 模板(一)

文章目录 一、函数模板 一、函数模板 1、概念 函数模板代表了一个函数家族,该函数模板与类型无关,在使用时被参数化,根据实参类型产生函数的特定 类型版本。 2、原理 函数模板是一个蓝图,它本身并不是函数,是编译器用…

ADOP带您科普:精准分配/稳定传输:光纤耦合器的未来

光纤自环器,也称为光模块自环测试回路器,用于测试系统或网络系统中的信号回传。通过回传信号(主要是成对连接TX发射端到RX的接收端一侧),可以检测网络链路中各种潜在的异常。 让我们深入了解一下这个设备的作用和分类&…

Spring Boot 的文件配置

SpringBoot的配置文件,有三种格式 1.properties 2.yaml 3.yml(yaml的简写) 这里主要介绍1和3格式的。 在项目中,同时存在properties和yml配置文件, properties的优先级更高 同时存在时,两个文件都生效 如果两个文件中,都包含同一个配置,以properties为主。 properties的配置…

oracle 12c+ max_string_size参数

一个客户的数据库版本是19.3,在做数据库复制的时候,目标端报错了,查看了一下问题发现表的字段长度有不对,在12c以前我们都知道varchar的长度最大是4000,但是客户这里居然有32767: 把客户的建表语句弄出来,放到我的一个19c的测试环境进行测试: 发现报错了: 这里报错很明显了,是M…

Linux:动静态库介绍

动静态库 库的介绍开发环境 & 编译器库存在的意义库的实现库的命名静态库制作和使用总结 动态库的制作和使用动态库的使用方法方法一方法二方法三 库加载问题静态库加载问题动态库的加载问题与位置无关码 C/C静态库下载方式 库的介绍 静态库:程序在编译链接的时…

mac IDEA激活 亲测有效

1、官网下载mac版本IDEA并安装 2、打开激活页面 3、下载脚本文件 链接: https://pan.baidu.com/s/1I2BqdfxSJv1A96422rflnA?pwdm494 提取码: m494 4、命令行到该界面,执行 sudo bash idea.sh 可能出现的问题: 查看sh文件,targetFilePath…

如何爬出 Kotlin 协程死锁的坑?

作者:悬衡 一、前言 在 Java 中有一个非常经典的死锁问题, 就是明明自己已经占用了线程池, 却还继续去申请它, 自己等自己, 就死锁了, 如下图和代码: // 这段代码将死锁到天荒地老final ExecutorService executorService Executors.newSingleThreadExecutor();exe…

uniapp——组件多颜色模块展示、气泡框

一、自定义颜色&#xff1a; 样式 代码 <template><view class"content"><!-- 右上角 --><view class"coverStatus" :class"[itemClass, positionClass,cornerClass,sanJiaoCss,sanJiaoCss2]":style"dynamicStyle&q…

云南旅游攻略

丽江景点 Day1 ——丽江古城 丽江古城是一个充满文化和历史的地方&#xff0c;拥有丰富的景点和活动。 推荐游玩&#xff1a; 参观标志性建筑&#xff1a;大水车是丽江古城的标志性建筑&#xff0c;可以在这里拍照留念。 探索中心广场&#xff1a;四方街是古城的中心&#xf…

EPSON晶振应用到汽车电子产品上的型号有哪些?

EPSON品牌应用在汽车电子产品上的晶振.&#xff0c;当然也少不了晶振可能最熟悉的就是32.768K系列和26MHZGPS晶振用的多。 在汽车里每一个部件都应有的不一样,甚至多次使用到同一尺寸,不同频率的晶振.爱普生品牌晶振型号就有几百种,很容易混淆,要想记住汽车里所应用到的不是件…

架构师系列-MYSQL调优(六)- 排序优化

MySQL中的两种排序方式 索引排序: 通过有序索引顺序扫描直接返回有序数据额外排序: 对返回的数据进行文件排序ORDER BY优化的核心原则: 尽量减少额外的排序&#xff0c;通过索引直接返回有序数据。 索引排序 因为索引的结构是B树&#xff0c;索引中的数据是按照一定顺序进行…

19--Scarpy05:增量式爬虫、分布式爬虫

19--Scarpy05--增量式爬虫、分布式爬虫 一. 增量式爬虫 顾名思义:可以对网站进行反复抓取,然后发现新东西了就保存起来,遇到了以前抓取过的内容就自动过滤掉即可 其核心思想:去重,并且可以反复去重。随时运行一下,将不同的数据保存出来,相同的数据去除掉(不保存)即可 增…

系统架构设计精华知识

数据流风格&#xff1a;适合于分阶段做数据处理&#xff0c;交互性差&#xff0c;包括&#xff1a;批处理序列、管理过滤器。调用/返回风格&#xff1a;一般系统都要用到&#xff0c;包括&#xff1a;主程序/子程序&#xff0c;面向对象&#xff0c;层次结构&#xff08;分层越…

C++从入门到出门

C 概述 c 融合了3中不同的编程方式&#xff1a; C语言代表的过程性语言C 在C语言基础上添加的类代表的面向对象语言C 模板支持的泛型编程 1、在c语言中头文件使用扩展名.h,将其作为一种通过名称标识文件类型的简单方式。但是c得用法改变了&#xff0c;c头文件没有扩展名。但是…

The_Maya_Society

突然发现自己做了一些逆向题都没有写笔记 今天&#xff0c;发现这道题有意思 1.解压文件 三个文件The Maya Society.html&#xff0c;maim.cc,maya.png 当时我看到这个题的时候&#xff0c;我以为是不是会是js逆向 看来是我蠢了 这三个文件&#xff0c;main.css和maya.png这两…

循序渐进丨使用 Python 向 MogDB 数据库批量操作数据的方法

当我们有时候需要向数据库里批量插入数据&#xff0c;或者批量导出数据时&#xff0c;除了使用传统的gsql copy命令&#xff0c;也可以通过Python的驱动psycopg2进行批量操作。本文介绍了使用psycopg2里的executemany、copy_from、copy_to、copy_expert等方式来批量操作 MogDB …