Eureka面试题
2026/1/15大约 6 分钟Eureka面试题Spring Cloud
Eureka 面试题
一、基础概念
1.1 什么是 Eureka?
答:Eureka 是 Netflix 开源的服务发现组件,Spring Cloud 将其集成在 Spring Cloud Netflix 项目中。主要功能:
- 服务注册:服务启动时向 Eureka Server 注册自身信息
- 服务发现:消费者从 Eureka Server 获取服务提供者列表
- 健康检查:通过心跳机制检测服务是否可用
1.2 Eureka 的架构是怎样的?
答:
核心组件:
- Eureka Server:服务注册中心
- Eureka Client:服务提供者和消费者
- Service Provider:向 Server 注册服务
- Service Consumer:从 Server 获取服务列表
1.3 Eureka 和 Zookeeper 的区别?
答:
| 特性 | Eureka | Zookeeper |
|---|---|---|
| CAP | AP(可用性+分区容错) | CP(一致性+分区容错) |
| 设计理念 | 去中心化 | 中心化 |
| 健康检查 | 心跳机制 | 长连接 |
| 自我保护 | 有 | 无 |
| 数据一致性 | 最终一致 | 强一致 |
选择建议:
- 对可用性要求高:选 Eureka
- 对一致性要求高:选 Zookeeper
二、核心原理
2.1 Eureka 的服务注册流程是怎样的?
答:
- 服务启动时,向 Server 发送 REST 请求注册
- Server 将实例信息存入注册表(ConcurrentHashMap)
- Server 将注册信息同步到集群其他节点
- 客户端定时发送心跳续约(默认 30 秒)
2.2 Eureka 的自我保护机制是什么?
答:
自我保护是 Eureka 应对网络分区的安全措施。当 Server 在短时间内丢失过多心跳时,会进入自我保护模式,不再剔除任何服务。
触发条件:
实际心跳数 < 期望心跳数 × 85%作用:
- 防止网络分区导致的误剔除
- 保护服务注册信息
问题:
- 可能保留已下线的服务
- 需要配合熔断机制使用
2.3 Eureka 的三级缓存是什么?
答:
| 缓存层级 | 说明 | 过期时间 |
|---|---|---|
| registry | 实时数据 | 不过期 |
| readWriteCacheMap | 读写缓存 | 180秒 |
| readOnlyCacheMap | 只读缓存 | 30秒同步 |
作用:提高读取性能,降低注册表压力。
2.4 Eureka Client 如何获取服务列表?
答:
- 启动时:全量获取注册表
- 运行时:每 30 秒增量获取变更
- 增量校验:通过 hashCode 校验数据一致性
- 本地缓存:客户端缓存服务列表,即使 Server 不可用也能使用
// 全量获取
GET /eureka/apps
// 增量获取
GET /eureka/apps/delta三、配置与使用
3.1 Eureka Server 的核心配置有哪些?
答:
eureka:
server:
# 自我保护
enable-self-preservation: true
# 剔除间隔
eviction-interval-timer-in-ms: 60000
# 续约阈值
renewal-percent-threshold: 0.85
instance:
hostname: localhost
client:
register-with-eureka: false # 单机模式
fetch-registry: false
service-url:
defaultZone: http://localhost:8761/eureka/3.2 Eureka Client 的核心配置有哪些?
答:
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka/
# 获取注册表间隔
registry-fetch-interval-seconds: 30
instance:
# 使用 IP 注册
prefer-ip-address: true
# 心跳间隔
lease-renewal-interval-in-seconds: 30
# 过期时间
lease-expiration-duration-in-seconds: 903.3 如何搭建 Eureka 集群?
答:
- 配置互相注册:每个节点向其他节点注册
- 配置 defaultZone:包含所有节点地址
# 节点1
eureka:
instance:
hostname: eureka1
client:
service-url:
defaultZone: http://eureka2:8762/eureka/,http://eureka3:8763/eureka/- 客户端配置所有节点:
eureka:
client:
service-url:
defaultZone: http://eureka1:8761/eureka/,http://eureka2:8762/eureka/四、高级问题
4.1 Eureka 如何保证高可用?
答:
- 集群部署:多节点互相注册
- 数据同步:节点间自动同步注册信息
- 客户端缓存:即使 Server 不可用,客户端仍可使用缓存
- 自我保护:网络分区时保护注册信息
4.2 Eureka 的 AP 特性如何体现?
答:
可用性(A):
- 自我保护机制保证服务可用
- 客户端缓存保证调用可用
- 集群任一节点可提供服务
分区容错(P):
- 网络分区时各节点独立工作
- 分区恢复后自动同步数据
牺牲一致性(C):
- 节点间数据最终一致
- 短时间内可能数据不一致
4.3 Eureka 停止维护后有什么替代方案?
答:
| 方案 | 特点 | 推荐场景 |
|---|---|---|
| Nacos | 阿里开源,功能丰富 | 新项目首选 |
| Consul | HashiCorp 出品,功能完善 | 多语言环境 |
| Zookeeper | 强一致性 | 对一致性要求高 |
迁移建议:
- 新项目:直接使用 Nacos
- 老项目:逐步迁移到 Nacos
4.4 Eureka 和 Ribbon 如何配合工作?
答:
- Ribbon 从 Eureka Client 获取服务实例列表
- 根据负载均衡策略选择实例
- 发送请求到具体实例
五、问题排查
5.1 服务注册后显示 UNKNOWN 怎么办?
答:配置 spring.application.name:
spring:
application:
name: user-service5.2 服务频繁上下线怎么办?
答:
- 检查网络稳定性
- 调整心跳和过期时间:
eureka:
instance:
lease-renewal-interval-in-seconds: 30
lease-expiration-duration-in-seconds: 905.3 首次调用服务很慢怎么办?
答:配置 Ribbon 饥饿加载:
ribbon:
eager-load:
enabled: true
clients: user-service六、面试回答模板
6.1 请介绍一下 Eureka
Eureka 是 Netflix 开源的服务发现组件,主要用于微服务架构中的服务注册与发现。
核心功能:
- 服务注册:服务启动时向 Server 注册
- 服务发现:消费者从 Server 获取服务列表
- 健康检查:通过心跳机制检测服务状态
特点:
- AP 模型,保证可用性
- 自我保护机制
- 客户端缓存
注意:Eureka 2.x 已停止维护,新项目建议使用 Nacos。
6.2 请介绍一下 Eureka 的自我保护机制
自我保护是 Eureka 应对网络分区的安全措施。
触发条件:当最近一分钟收到的心跳数低于期望值的 85% 时触发。
行为:进入自我保护模式后,不再剔除任何服务实例。
作用:防止网络分区导致的误剔除,保护服务注册信息。
问题:可能保留已下线的服务,需要配合熔断机制使用。
配置:开发环境可关闭
enable-self-preservation: false。
