SpringCloud03-Eureka01-概述与工作流程 - 实践

Eureka,是Spring Cloud中的服务注册与发现组件。

一、Eureka概述

Netflix开源的就是Eureka服务注册与发现Spring Cloud中的一个要紧组件。就是框架,也

它处理了微服务架构中的一个核心问题:在微服务众多且动态变化的环境中,如何让服务之间能够相互发现和调用。

Eureka包含两个关键角色:Eureka Server(服务注册中心)Eureka Client(服务提供者和消费者)。

1-1、服务调用关系

  • 服务提供者:暴露接口给其它微服务调用

  • 服务消费者:调用其它微服务提供的接口

  • 提供者与消费者角色其实是相对

  • 一个服务可以同时是服务提供者和服务消费者

1-2、Eureka原理分析

1、Eureka Server(服务注册中心)

Eureka Server是一个独立的服务,它维护了一个服务注册表,用于存储所有已注册的微服务信息。

主要功能:

  • 服务注册:接收Eureka Client的注册请求,将服务信息存储在注册表中(每个服务提供者都会向 Eureka Server 注册!!!
  • 服务注销:接收Eureka Client的注销请求,从注册表中删除服务信息
  • 心跳检测否仍然在线,如果服务在规定时间内就是:定期检测已注册服务未发送心跳,则将其标记为不可用或从注册表中删除
  • 信息查询:为Eureka Client给予查询接口,使其能够获取其他服务的信息
  • 集群同步:多个Eureka Server之间能够相互同步注册表中的信息,确保高可用性

2、Eureka Client(服务提供者和消费者)

Eureka Client是一个客户端库,集成在微服务应用中。每个微服务都是一个Eureka Client,可以同时充当服务提供者和服务消费者。

主要功能:

  • 服务注册:启动时向Eureka Server注册自己的服务信息(服务名、IP地址、端口等)
  • 心跳续约:定期向Eureka Server发送心跳信号,表示自己仍然在线
  • 服务发现:从Eureka Server查询其他服务的信息,获取服务列表
  • 本地缓存:缓存服务列表,减少对Eureka Server的依赖
  • 自我保护:当网络波动导致无法与Eureka Server通信时,仍然使用本地缓存的服务列表
(1)服务提供者(Provider)

比如:user-service。每个服务在启动时会:

  • 读取自己的配置(例如 spring.application.name=user-service);

  • 通过 Eureka Client 向 Eureka Server 发注册请求

  • 注册内容包括:

    • 服务名称(AppName)

    • 实例ID

    • IP / 主机名

    • 端口

    • 状态信息等

(2)服务消费者(Consumer)

通过 Eureka Server 拉取注册表(Registry),从中找到要调用的服务实例。

三、Eureka工作流程

1. 服务启动与注册

当一个Eureka Client启动时,它会读取配置文件中的Eureka Server地址,接着向Eureka Server发送注册请求,将自己的服务信息(如应用名、实例ID、IP、端口、健康检查URL等)提交给Eureka Server。

Eureka Server接收到请求后,会将该服务信息存储在内存中的注册表中。

2. 心跳续约

注册成功后,Eureka Client会定期(默认每30秒)向Eureka Server发送心跳信号,续约自己的租约。这表示该服务仍然处于活跃状态。Eureka Server收到心跳后,会更新该服务的最后续约时间。

  • Eureka Server 会定期检查注册表中的实例:
    如果发现某个实例超过 90 秒没有收到心跳,就认为它已经挂了(DOWN),并将其从注册表中剔除。

  • 这个 90 秒一个「容忍窗口」,允许偶发的网络延迟或心跳丢失。就是其实

也就是说:

Eureka Client 每 30 秒 发一次心跳;
如果 Eureka Server 连续 90 秒 没收到心跳,它才认为该服务实例“挂了”,从注册表移除。

3. 服务发现

当一个Eureka Client需调用其他服务时,它会向Eureka Server查询所需服务的信息。

Eureka Server返回该服务的所有实例列表(包括IP、端口等)。Eureka Client会将这些信息缓存到本地,以便高效运用。

4. 负载均衡

Eureka Client获取到服务列表后,配合Ribbon等负载均衡组件,许可从多个实例中选择一个进行调用。常见的负载均衡策略包括轮询、随机、权重等。

5. 健康检查

Eureka Server会定期对已注册的服务进行健康检查。

如果某个服务在规定时间内(默认90秒)没有发送心跳,Eureka Server会将其标记为不可用(DOWN状态),从而不会将其返回给其他请求的客户端。

6. 自我保护机制

Eureka Server在短时间内收到大量的心跳丢失时,它会进入自我保护模式

在这种模式下,Eureka Server会保留当前的注册表信息,即使这些服务可能已经宕机。这样做是为了防止由于网络难题导致的级联故障。自我保护机制会显示一条警告信息。

7. 服务注销

当一个Eureka Client正常关闭时,它会向Eureka Server发送注销请求。

Eureka Server接收到请求后,会立即从注册表中删除该服务信息。

四、Eureka的对比其他服务注册中心

4-1、Eureka的缺点

  • 官方已停止维护,逐步被其他服务注册中心(如Nacos、Consul)替代
  • 在大规模微服务场景下,心跳机制可能产生较大的网络开销。

4-2、Eureka与其他服务注册中心的对比

Spring Cloud中还有其他服务注册中心如Nacos、Consul等。

相比之下,Eureka更加轻量级,适合中小规模的微服务系统;而Nacos功能更强大,拥护更多特性,适合大规模的企业级应用。

总的来说,Eureka是微服务架构中一个重要的组件,通过服务注册与发现的机制,使得微服务之间能够灵活地相互通信,从而构建起一个高效、可靠的微服务生态。

posted @ 2026-01-26 21:46  gccbuaa  阅读(6)  评论(0)    收藏  举报