Eureka 简介:Spring Cloud 生态的经典服务注册中心
Eureka 是 Netflix 开源的服务发现组件,作为 Spring Cloud 早期推荐的注册中心,凭借高可用性设计和与 Spring 生态的无缝集成,成为微服务架构中服务治理的经典方案。它通过Eureka Server(注册中心)和Eureka Client(服务端 / 客户端)的角色分工,实现服务的注册、发现和健康管理。
Eureka 的核心架构
Eureka 的设计遵循AP 原则(可用性优先,兼顾最终一致性),核心组件包括:
Eureka Server(注册中心)
- 提供服务注册接口,存储所有可用服务的元数据(IP、端口、状态等);
- 支持集群部署,通过节点间数据复制实现高可用;
- 提供 Web 控制台(默认地址
http://localhost:8761),直观展示服务状态。
Eureka Client(服务端 / 客户端)
服务提供者:启动时向 Eureka Server 注册自身信息,定期发送心跳证明可用性;
服务消费者:从 Eureka Server 拉取服务列表并缓存到本地,通过服务名调用接口;
这种方式可以使得微服务不需要每次请求都查询Eureka Server,从而降低了Eureka Server的压力,如果Eureka Server所有节点都宕掉,服务消费者依然可以使用缓存中的信息找到服务提供者完成调用
内置轮询负载均衡算法,简化服务调用流程。
Eureka 的核心特性
自我保护机制
当网络分区导致 Eureka Server 无法收到大部分服务的心跳时,会触发自我保护:- 不剔除任何服务实例(避免误判健康服务为失效);
- 控制台显示警告信息:
EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY'RE NOT. RENEWALS ARE LESS THAN THRESHOLD AND HENCE THE INSTANCES ARE NOT BEING EXPIRED JUST TO BE SAFE. - 适合分布式系统网络不稳定的场景,默认开启(生产环境推荐保留)。
客户端缓存
服务消费者会缓存服务列表,即使 Eureka Server 宕机,仍可通过缓存调用服务,降低注册中心压力。对等集群
Eureka Server 集群中无主从之分,节点地位平等,相互同步服务注册表:- 任一节点可接收注册请求,异步复制到其他节点;
- 少数节点故障不影响整体可用性,保证高可用。
eureka的高可用性,不需要等注册信息replicate到其他节点,也不保证注册信息是否replicate成功,当数据出现不一致时,虽然A,B上的注册信息不完全相同,但每个Eureka节点依然能够正常对外提供服务,这会出现查询服务信息如果请求A查不到,但请求B就能查到
心跳与剔除机制
- 服务提供者每 30 秒发送一次心跳(
lease-renewal-interval-in-seconds); - 若 90 秒未收到心跳(
lease-expiration-duration-in-seconds),Eureka Server 会剔除该服务(自我保护关闭时)。
- 服务提供者每 30 秒发送一次心跳(
Eureka Server 配置(注册中心)
1. 引入依赖
根据 Spring Cloud 版本选择依赖:
Spring Cloud F 版及以上:
1
2
3
4<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>旧版本(如 Edgware):
1
2
3
4<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka-server</artifactId>
</dependency>
2. 启动类配置
通过 @EnableEurekaServer 注解启用注册中心功能:
1 |
|
3. 核心配置(application.yml)
1 | server: |
业务微服务配置(Eureka Client)
1. 引入依赖
Spring Cloud F 版及以上:
1
2
3
4<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>旧版本:
1
2
3
4<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
2. 启动类配置
通过 @EnableEurekaClient 或 @EnableDiscoveryClient 启用服务注册:
1 |
|
3. 核心配置(application.yml)
1 | server: |
Eureka 的局限性
- 停止维护:Netflix 已停止 Eureka 2.x 开发,目前依赖社区维护;
- 一致性弱:采用最终一致性,集群节点数据可能短暂不一致;
- 功能单一:仅支持服务注册发现,无配置管理、健康检查扩展等功能。
适用场景
- 中小规模微服务架构,优先保证可用性;
- 网络环境不稳定,需要自我保护机制的场景;
- 基于 Spring Cloud 生态,追求快速集成和低学习成本。
总结
Eureka 作为 Spring Cloud 生态的经典注册中心,以 AP 原则为核心,通过自我保护、客户端缓存和对等集群实现高可用性,适合分布式系统中服务动态变化的场景。尽管已停止官方更新,但其设计思想(如客户端缓存、自我保护)对理解服务注册中心仍有重要意义
v1.3.10