Eureka 服务注册与发现
Eureka 是 Netflix 开源的一个服务注册与发现组件,它在微服务架构中扮演着关键角色,用于动态管理服务的注册和发现。以下是对 服务注册 和 服务发现 的详细解释:
1. 服务注册
服务注册是指服务提供者(Service Provider)在启动时,将自己的信息(如服务名称、IP 地址、端口号、状态等)注册到 Eureka Server 中。
工作流程:
-
服务启动:
- 服务实例通过嵌入的 Eureka Client,与 Eureka Server 建立连接。
- Eureka Client 会将服务实例的元数据信息发送给 Eureka Server。
-
注册信息存储:
- Eureka Server 将服务实例的信息存储在其注册表(Registry)中。
- 注册表是一个映射表,存储服务名和对应服务实例的信息。
-
心跳续约:
- 服务实例定期向 Eureka Server 发送心跳请求,表明自己仍然在线。
- 如果 Eureka Server 在一定时间内未接收到心跳,则会将该服务标记为失效。
作用:
- 动态维护服务的可用性。
- 使服务消费者能够通过 Eureka Server 查找到最新的服务实例信息。
2. 服务发现
服务发现是指服务消费者(Service Consumer)通过 Eureka Server 获取目标服务提供者的信息,从而完成服务调用。
工作流程:
-
服务查询:
- 服务消费者通过嵌入的 Eureka Client,向 Eureka Server 发起查询请求。
- Eureka Server 返回目标服务的所有可用实例信息。
-
负载均衡:
- 服务消费者根据查询到的服务实例列表,选择其中一个进行调用。
- 通常配合 Ribbon 等负载均衡组件使用。
-
缓存更新:
- Eureka Client 会定期拉取 Eureka Server 的注册表,并缓存下来。
- 即使 Eureka Server 不可用,消费者仍可以从本地缓存中获取服务信息。
作用:
- 动态获取目标服务的可用实例。
- 避免硬编码服务地址,实现服务调用的灵活性和动态性。
服务注册与发现的核心特性
-
动态性:
- 服务实例可以随时上下线,Eureka 自动更新注册表,确保服务调用的实时性和正确性。
-
去中心化:
- Eureka 的设计支持多个 Eureka Server 节点互相同步注册信息,形成高可用集群。
-
自我保护机制:
- 在网络分区或大规模实例宕机时,Eureka Server 会进入自我保护模式,避免误删实例。
-
高可用性:
- 即使某些 Eureka Server 节点不可用,客户端可以通过其他节点查询服务。
服务注册与发现的应用场景
-
微服务架构:
- 在微服务架构中,服务数量多且分布动态变化,Eureka 提供了动态管理的能力。
-
弹性伸缩:
- 当服务实例因负载变化进行扩容或缩容时,Eureka 能自动更新注册信息,适配新的实例数量。
-
容器化与云原生环境:
- 容器服务通常动态分配 IP 和端口,Eureka 的动态注册功能特别适合这种场景。