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

浙公网安备 33010602011771号