Eureka 核心概念
Eureka 是 Netflix 开源的服务发现框架,用于构建分布式系统中的服务注册与发现机制。其核心角色分为 Eureka Server (服务端)和 Eureka Client(客户端)。
- Eureka Server:注册中心,管理所有服务的注册信息,提供心跳检测、负载均衡等功能。
- Eureka Client:微服务实例,通过注册到 Eureka Server 实现服务的暴露与发现。
Eureka 服务注册流程
-
服务启动注册
微服务启动时,Eureka Client 向 Eureka Server 发送 REST 请求,包含自身元数据(如服务名、IP、端口、健康状态等)。
Eureka Server 将注册信息存储到双层结构的注册表中(内存缓存 + 持久层)。
-
心跳维持
Eureka Client 默认每 30 秒向 Eureka Server 发送心跳(
renew)。若 90 秒未收到心跳,Server 将该实例标记为不可用。 -
注册表同步
Eureka Server 集群间通过异步复制机制同步注册表数据,保证最终一致性。
Eureka 服务发现流程
-
拉取注册表
Eureka Client 定时(默认 30 秒)从 Eureka Server 拉取全量服务注册表,缓存在本地。
-
服务调用
客户端通过本地缓存的注册表获取目标服务的实例列表,结合负载均衡策略(如 Ribbon)发起调用。
-
自我保护机制
当网络分区故障导致大量实例心跳失败时,Eureka Server 进入自我保护模式,保留过期实例信息,避免误删健康实例。
服务注册与发现流程图
Eureka Client Eureka Server 1. 启动注册 (/register) 响应注册成功 2. 定时心跳 (/renew) loop [心跳维持] 3. 拉取注册表 (/fetch) 返回服务列表 4. 本地缓存 & 负载均衡 Eureka Client Eureka Server
- 注册阶段:Client 向 Server 发送注册请求。
- 心跳阶段:Client 定期续约。
- 发现阶段:Client 拉取服务列表并缓存。
- 调用阶段:Client 根据列表发起服务调用。
关键配置参数
Eureka Server 配置
yaml
eureka:
server:
enable-self-preservation: true # 是否开启自我保护
eviction-interval-timer-in-ms: 60000 # 清理失效实例间隔
Eureka Client 配置
yaml
eureka:
client:
fetch-registry: true # 是否拉取注册表
register-with-eureka: true # 是否注册到Eureka
service-url:
defaultZone: http://eureka-server1:8761/eureka/
instance:
lease-renewal-interval-in-seconds: 30 # 心跳间隔
lease-expiration-duration-in-seconds: 90 # 心跳超时时间
与其他组件的协作
- Ribbon:通过 Eureka 获取服务列表后实现客户端负载均衡。
- Feign:基于 Eureka 的服务发现声明式 REST 调用。
- Spring Cloud Gateway:结合 Eureka 实现动态路由。