Eureka简介
2026/1/15大约 4 分钟Eureka服务注册服务发现Spring Cloud
Eureka 简介
一、什么是服务注册与发现
在微服务架构中,服务实例的网络位置(IP 和端口)是动态分配的,而且服务实例会频繁地启动和停止。这就需要一种机制来管理服务实例的注册和发现。
1.1 传统方式的问题
- 服务地址硬编码,修改需要重新部署
- 无法动态感知服务上下线
- 负载均衡难以实现
- 服务扩容困难
1.2 服务注册与发现的作用
| 功能 | 说明 |
|---|---|
| 服务注册 | 服务启动时将自身信息注册到注册中心 |
| 服务发现 | 消费者从注册中心获取服务提供者列表 |
| 健康检查 | 定期检测服务是否可用 |
| 负载均衡 | 在多个服务实例间分配请求 |
二、Eureka 概述
Eureka 是 Netflix 开源的服务发现组件,Spring Cloud 将其集成在 Spring Cloud Netflix 项目中。
2.1 Eureka 的特点
- AP 模型:保证可用性和分区容错性,牺牲一致性
- 去中心化:Eureka Server 之间相互注册,形成集群
- 自我保护:网络分区时保护注册信息不被误删
- 客户端缓存:即使注册中心不可用,客户端仍可使用缓存
2.2 Eureka 架构
2.3 核心组件
| 组件 | 说明 |
|---|---|
| Eureka Server | 服务注册中心,存储所有服务实例信息 |
| Eureka Client | 服务提供者和消费者,与 Server 交互 |
| Service Provider | 服务提供者,向 Server 注册服务 |
| Service Consumer | 服务消费者,从 Server 获取服务列表 |
三、Eureka vs 其他注册中心
| 特性 | Eureka | Zookeeper | Consul | Nacos |
|---|---|---|---|---|
| CAP | AP | CP | CP | AP/CP |
| 健康检查 | 心跳 | 长连接 | HTTP/TCP | 心跳/TCP |
| 雪崩保护 | 有 | 无 | 无 | 有 |
| 访问协议 | HTTP | TCP | HTTP/DNS | HTTP |
| Spring Cloud 集成 | 原生支持 | 需适配 | 原生支持 | 原生支持 |
| 维护状态 | 停止更新 | 活跃 | 活跃 | 活跃 |
四、Eureka 的工作流程
4.1 服务注册(Register)
服务启动时,向 Eureka Server 发送 REST 请求,携带自身元数据(IP、端口、健康状态等)。
4.2 服务续约(Renew)
服务每隔 30 秒(默认)向 Server 发送心跳,表明自己仍然存活。
4.3 服务发现(Fetch Registry)
消费者启动时获取全量注册表,之后每 30 秒增量获取变更信息。
4.4 服务剔除(Eviction)
Server 在 90 秒内未收到某服务的心跳,将其从注册表中剔除。
4.5 服务下线(Cancel)
服务正常关闭时,向 Server 发送下线请求,Server 将其从注册表中移除。
五、适用场景
5.1 适合使用 Eureka 的场景
- Spring Cloud 技术栈的微服务项目
- 对可用性要求高于一致性的场景
- 需要自我保护机制的场景
- 服务实例数量较多的场景
5.2 不适合使用 Eureka 的场景
- 需要强一致性的场景
- 需要配置中心功能(Eureka 不提供)
- 新项目(Eureka 已停止更新,建议使用 Nacos)
六、总结
Eureka 作为 Netflix OSS 的核心组件,在微服务架构中扮演着重要角色:
- 简单易用:与 Spring Cloud 无缝集成
- 高可用:支持集群部署,去中心化架构
- 自我保护:网络分区时保护服务信息
- 客户端缓存:提高系统容错能力
⚠️ 注意:Eureka 2.x 已停止开发,Netflix 官方建议迁移到其他方案。新项目建议使用 Nacos 或 Consul。
