什么是 Eureka?
Eureka 是 Netflix 开源的一个服务注册与发现工具,专为云原生架构设计。Eureka 分为两个主要部分:
- Eureka Server:服务注册中心,负责管理所有服务实例的注册信息。
- Eureka Client:服务消费者和服务提供者都通过它与 Eureka Server 通信,用于注册自身服务或获取其他服务的信息。
Eureka 最初由 Netflix 提出并开源,现已成为 Spring Cloud Netflix 组件的一部分,在微服务生态系统中占据重要地位。
Eureka 的核心功能
Eureka 的核心功能包括:
1. 服务注册与注销
服务启动时,服务实例会向 Eureka Server 注册自身的信息(如服务名称、IP 地址、端口号等)。当服务停止或发生故障时,Eureka Server 会通过心跳检测或显式通知将其从注册表中移除。
2. 服务发现
服务消费者通过 Eureka Client 从 Eureka Server 获取其他服务实例的信息,以便进行负载均衡和服务调用。
3. 心跳检测与续约
服务实例会定期向 Eureka Server 发送心跳,表明自己处于健康状态。Eureka Server 依赖心跳续约机制来维护服务的可用性。
4. 自我保护模式
当大量服务实例不可达(如网络故障)时,Eureka 会启用自我保护模式,停止清除不可达的实例,确保整个系统的可用性。
Eureka 的架构与工作原理
架构组成
Eureka 的架构分为以下部分:
-
Eureka Server
- 负责维护服务注册表。
- 为服务消费者提供服务实例列表。
- 支持多节点部署以实现高可用性。
-
Eureka Client
- 服务提供者通过 Eureka Client 注册自身。
- 服务消费者通过 Eureka Client 获取其他服务的注册信息。
-
服务注册表
- 保存所有注册服务实例的信息,包括服务名称、IP、端口、健康状态等。
工作流程
Eureka 的典型工作流程如下:
-
服务注册:
- 服务实例启动后,向 Eureka Server 发送注册请求,包含服务元数据信息。
- Eureka Server 将服务实例的信息存储在注册表中。
-
服务续约:
- 服务实例定期向 Eureka Server 发送心跳请求,表示自己仍然健康。
- 如果超过一定时间未收到心跳,Eureka Server 会将其标记为不可用。
-
服务发现:
- 服务消费者向 Eureka Server 请求服务实例列表。
- Eureka Server 返回最新的服务注册表信息。
-
自我保护模式:
- 当检测到大量心跳丢失时,Eureka Server 停止删除过期实例,以避免误判。