Eureka 介绍与原理详解

news2025/1/6 1:11:05

在微服务架构中,服务发现(Service Discovery)是一个至关重要的组件。随着服务数量的增加,手动管理服务的地址和端口变得不切实际。Eureka 是 Netflix 开源的一款服务发现工具,旨在解决微服务架构中的服务注册与发现问题。本文将详细介绍 Eureka 的基本概念、工作原理以及如何在微服务架构中使用它。

1. 什么是 Eureka?

Eureka 是 Netflix 开源的一个基于 REST 的服务发现组件,主要用于 AWS 云环境中的中间层服务的负载均衡和故障转移。Eureka 由两个主要组件组成:

  1. Eureka Server:服务注册中心,负责管理所有注册的服务实例。
  2. Eureka Client:服务客户端,负责将自身注册到 Eureka Server,并从 Eureka Server 获取其他服务的实例信息。

Eureka 的设计目标是高可用性和可扩展性,能够在大规模分布式系统中稳定运行。

在这里插入图片描述

2. Eureka 的核心概念

2.1 服务注册(Service Registration)

当一个微服务启动时,它会通过 Eureka Client 向 Eureka Server 注册自己的信息,包括服务名、IP 地址、端口号等。Eureka Server 会将这些信息存储在一个服务注册表中。

2.2 服务续约(Service Renewal)

为了防止服务实例因为网络故障或其他原因而无法正常提供服务,Eureka Client 会定期向 Eureka Server 发送心跳(默认每 30 秒一次),以表明自己仍然存活。如果 Eureka Server 在一定时间内(默认 90 秒)没有收到某个服务实例的心跳,则会将其从注册表中移除。

2.3 服务发现(Service Discovery)

当一个微服务需要调用另一个微服务时,它可以通过 Eureka Client 向 Eureka Server 查询目标服务的实例列表。Eureka Server 会返回所有可用的服务实例信息,客户端可以根据这些信息进行负载均衡和故障转移。

2.4 服务下线(Service Shutdown)

当一个微服务正常关闭时,它会通过 Eureka Client 向 Eureka Server 发送一个下线请求,Eureka Server 会将该服务实例从注册表中移除。

3. Eureka 的工作原理

3.1 Eureka Server 的启动与初始化

Eureka Server 启动时,会初始化一个服务注册表(Service Registry),用于存储所有注册的服务实例信息。Eureka Server 还提供了一个 RESTful API,供 Eureka Client 进行服务注册、续约、发现和下线操作。

3.2 Eureka Client 的注册与续约

Eureka Client 启动时,会向 Eureka Server 发送一个注册请求,将自己的服务信息注册到 Eureka Server。注册成功后,Eureka Client 会定期向 Eureka Server 发送心跳,以维持服务的存活状态。

3.3 服务发现的实现

当一个微服务需要调用另一个微服务时,它会通过 Eureka Client 向 Eureka Server 查询目标服务的实例列表。Eureka Server 会返回所有可用的服务实例信息,客户端可以根据这些信息进行负载均衡和故障转移。

3.4 服务下线的处理

当一个微服务正常关闭时,它会通过 Eureka Client 向 Eureka Server 发送一个下线请求,Eureka Server 会将该服务实例从注册表中移除。如果 Eureka Server 在一定时间内没有收到某个服务实例的心跳,也会将其从注册表中移除。

4. Eureka 的高可用性

Eureka 通过多节点部署来实现高可用性。多个 Eureka Server 节点可以相互注册,形成一个集群。当其中一个节点宕机时,其他节点仍然可以提供服务注册与发现功能,确保整个系统的稳定性。

5. Eureka 的优缺点

5.1 优点

  1. 简单易用:Eureka 提供了简单的 RESTful API,易于集成和使用。
  2. 高可用性:通过多节点部署,Eureka 可以实现高可用性。
  3. 自我保护机制:Eureka 具有自我保护机制,当网络分区发生时,Eureka Server 会保护现有的服务注册信息,避免因为网络问题导致服务实例被错误地移除。

5.2 缺点

  1. 性能瓶颈:在大规模分布式系统中,Eureka Server 可能成为性能瓶颈。
  2. 功能相对简单:相比于其他服务发现工具(如 Consul、Zookeeper),Eureka 的功能相对简单,缺乏一些高级特性。

6. 如何在微服务架构中使用 Eureka

6.1 部署 Eureka Server

首先,需要部署一个或多个 Eureka Server 节点。可以通过 Spring Cloud 提供的 @EnableEurekaServer 注解快速搭建一个 Eureka Server。

@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {
    public static void main(String[] args) {
        SpringApplication.run(EurekaServerApplication.class, args);
    }
}

6.2 注册 Eureka Client

在微服务中,通过 @EnableEurekaClient 注解将服务注册到 Eureka Server。

@SpringBootApplication
@EnableEurekaClient
public class ServiceApplication {
    public static void main(String[] args) {
        SpringApplication.run(ServiceApplication.class, args);
    }
}

6.3 服务发现与调用

在需要调用其他服务的微服务中,可以通过 RestTemplateFeign 客户端从 Eureka Server 获取服务实例信息,并进行服务调用。

@RestController
public class ConsumerController {

    @Autowired
    private RestTemplate restTemplate;

    @GetMapping("/call")
    public String callService() {
        String serviceUrl = "http://SERVICE-NAME/endpoint";
        return restTemplate.getForObject(serviceUrl, String.class);
    }
}

7. 总结

Eureka 作为 Netflix 开源的服务发现工具,在微服务架构中扮演着重要的角色。通过 Eureka,微服务可以自动注册、发现和调用其他服务,极大地简化了微服务架构中的服务管理。尽管 Eureka 在某些方面存在局限性,但其简单易用和高可用性使其成为许多微服务架构中的首选服务发现工具。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2268945.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++和OpenGL实现3D游戏编程【连载19】——着色器光照初步(平行光和光照贴图)(附源码)

1、本节要实现的内容 我们在前期的教程中,讨论了在即时渲染模式下的光照内容。但在我们后期使用着色器的核心模式下,会经常在着色器中使光照,我们这里就讨论一下着色器光照效果,以及光照贴图效果,同时这里知识会为后期的更多光照效果做一些铺垫。本节我们首先讨论冯氏光照…

RedisDesktopManager新版本不再支持SSH连接远程redis后

背景 RedisDesktopManager(又名RDM)是一个用于Windows、Linux和MacOS的快速开源Redis数据库管理应用程序。这几天从新下载RedisDesktopManager最新版本,结果发现新版本开始不支持SSH连接远程redis了。 解决方案 第一种 根据网上有效的信息,可以回退版…

【图像处理lec10】图像压缩

目录 一、图像压缩基础 1、图像压缩的基本概念 2、数据冗余与压缩比 3、三种主要的数据冗余类型 4、保真度评估标准(Fidelity Criteria) 5、应用与实践 二、图像压缩模型 1、图像压缩模型概述 (1)压缩系统的结构 &#…

Python-网络爬虫

随着网络的迅速发展,如何有效地提取并利用信息已经成为一个巨大的挑战。为了更高效地获取指定信息,需定向抓取并分析网页资源,从而促进了网络爬虫的发展。本章将介绍使用Python编写网络爬虫的方法。 学习目标: 理解网络爬虫的基本…

curl+openssl 踩坑笔记

curl编译:点击跳转 踩坑一 * SSL certificate problem: unable to get local issuer certificate * closing connection #0 curl: (60) SSL certificate problem: unable to get local issuer certificate More details here: https://curl.se/docs/sslcerts.html …

mysql-二进制安装方式

目录 1. 安装组件即依赖包 2. 创建用户 3. 关闭防火墙 4. 解压mysql二进制源码包 5. 创建文件夹并赋予权限 6. 编译安装mysql,安装完成最后面,会有一串英文,那是登录数据库的密码 7. 设置配置文件 8. 将mysql添加进环境变量 9. 复制…

【MySQL】深度学习数据库开发技术:使用CC++语言访问数据库

**前言:**本节内容介绍使用C/C访问数据库, 包括对数据库的增删查改操作。 主要是学习一些接口的调用, 废话不多说, 开始我们的学习吧! ps:本节内容比较容易, 友友们放心观看哦! 目录 准备mysql…

Vscode左大括号不另起一行、注释自动换行

参考大佬的博客VSCode 格式化 cpp 文件时配置左大括号不换行_vscode大括号不换行-CSDN博客 Clang_format_style {BasedOnStyle: Chromium, IndentWidth: 4}

1、Jmeter、jdk下载与安装

1、访问官网,点击下载Jmeter http://jmeter.apache.org/ 2、在等待期间,下载对应的Java https://www.oracle.com/cn/java/technologies/downloads/#jdk23-windows 3、全部下载好,先安装JDK ![在这里插入图片描述](https://i-blog.csdnimg…

【Vim Masterclass 笔记02】第3章:Vim 核心知识 + L08:Vim 核心浏览命令 + L09:Vim 核心浏览命令同步练习

文章目录 Section 3:Vim Essentials(Vim 核心知识)S03L08 Essential Navigation Commands1 光标的上下左右移动2 上 / 下翻页3 基于单词前移4 基于单词后移5 重新定位视图中的文本(页面重绘)6 定位到所在行的行首7 光标…

docker学习记录-部署若依springcloud项目

使用docker compse部署RuoYi v3.6.4 一、打包代码 Java代码 打包前需要将127.0.0.1改成宿主机ip, 使用docker部署的nacos,应该是要改成ruoyi-nacos(docker中的服务容器名)。 使用idea window系统可能没有sh命令,不能…

Unity 实现Canvas显示3D物体

新建一个UI相机,选择渲染层为UI 将主相机的渲染层去掉UI层 、 将Canvas的RenderMode设置为Screen Space - Camera,将RenderCamera设置为UI相机 新建3D物体的UI父物体,并将3D物体的层级设置为UI层 适当的放缩3DObjParent,让3D物体能显示出来…

【spring】参数校验Validation

前言 在实际开发中,我们无法保证客户端传来的请求都是合法的。比如一些要求必传的参数没有传递,传来的参数长度不符合要求等,这种时候如果放任不管,继续执行后续业务逻辑,很有可能就会出现意想不到的bug。 有人可能会…

STM32 SPI读取SD卡

七个响应类型: R1 Response (Normal Response): R1响应是最基本的响应,包含一个字节的状态位,用于指示命令是否成功执行。常用。最高位为0。最低位为1表示是空闲状态。其他位是各种错误提示。 R1b Response (Normal with Busy): 类似于R1&a…

【Solidity】入门指南:智能合约开发基础

🌈个人主页: 鑫宝Code 🔥热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础 ​💫个人格言: "如无必要,勿增实体" 文章目录 Solidity入门指南:智能合约开发基础引言1. 开发环境搭建1.1 Remix I…

EasyExcel(读取操作和填充操作)

文章目录 1.准备Read.xlsx(具有两个sheet)2.读取第一个sheet中的数据1.模板2.方法3.结果 3.读取所有sheet中的数据1.模板2.方法3.结果 EasyExcel填充1.简单填充1.准备 Fill01.xlsx2.无模版3.方法4.结果 2.列表填充1.准备 Fill02.xlsx2.模板3.方法4.结果 …

OCR实践-问卷表格统计

前言 书接上文 OCR实践—PaddleOCROCR实践-Table-Transformer 本项目代码已开源 放在 Github上,欢迎参考使用,Star https://github.com/caibucai22/TableAnalysisTool 主要功能说明:对手动拍照的问卷图片进行统计分数(对应分数…

BOE(京东方)“向新2025”年终媒体智享会落地深圳

12月27日,BOE(京东方)“向新 2025”年终媒体智享会的收官之站在创新之都深圳圆满举行,为这场为期两周、横跨三地的年度科技盛会画上了完美句号。活动期间,全面回顾了 BOE(京东方)2024年在多个关键领域取得的卓越成绩,深入剖析其在六大维度构建的“向新”发展格局,精彩呈现了以“…

Kinova在开源家庭服务机器人TidyBot++研究里大展身手

在科技日新月异的今天,机器人技术在家庭场景中的应用逐渐成为现实,改变着我们的生活方式。今天,我们将深入探讨一篇关于家用机器人研究的论文,剖析其中的创新成果, 论文引用链接:http://tidybot2.github.i…

LCE软机器人登场!热场光控下的多模态运动传奇?

大家好!今天来了解一项液晶弹性体(LCE)软机器人研究——《Multimodal Autonomous Locomotion of Liquid Crystal Elastomer Soft Robot》发表于《Advanced Science》。在机器人技术不断演进的进程中,软机器人虽有潜力但面临诸多挑…