面试题:Eureka 的实现原理说一下?

Eureka 是 Netflix 开源的一个 服务发现 组件,主要用于微服务架构中的服务注册与发现。Eureka 的核心目标是实现高可用的服务注册与发现,确保在分布式系统中服务能够动态地注册、发现和调用。以下是 Eureka 的实现原理:


1. Eureka 的架构

Eureka 的架构主要包括以下几个组件:

  1. Eureka Server
    • Eureka Server 是服务注册中心,负责存储和管理服务实例的注册信息。
    • Eureka Server 支持多节点集群,通过互相注册实现高可用。
  2. Eureka Client
    • Eureka Client 是服务提供者和服务消费者,负责向 Eureka Server 注册服务,并从 Eureka Server 获取服务实例列表。
    • 服务提供者(Service Provider):将自身注册到 Eureka Server。
    • 服务消费者(Service Consumer):从 Eureka Server 获取服务实例列表,并调用服务。
  3. 服务实例(Service Instance)
    • 服务实例是具体的服务提供者,每个服务实例都有一个唯一的实例 ID(Instance ID)。

2. Eureka 的核心机制

2.1 服务注册

  • 过程
    • 服务启动时,Eureka Client 会向 Eureka Server 发送注册请求,包含服务名称、IP 地址、端口等信息。
    • Eureka Server 将服务实例的注册信息存储在内存中,并定期同步到其他 Eureka Server 节点。
  • 示例
    • 服务 A 启动时,向 Eureka Server 发送注册请求,Eureka Server 将服务 A 的注册信息存储在内存中。

2.2 服务发现

  • 过程
    • 服务消费者通过 Eureka Client 从 Eureka Server 获取服务实例列表。
    • Eureka Client 会定期从 Eureka Server 获取最新的服务实例列表,并缓存到本地。
  • 示例
    • 服务 B 通过 Eureka Client 从 Eureka Server 获取服务 A 的实例列表,并缓存到本地。

2.3 服务续约

  • 过程
    • 服务实例会定期向 Eureka Server 发送心跳(默认每 30 秒一次),表明自己仍然存活。
    • 如果 Eureka Server 在一定时间内(默认 90 秒)未收到服务实例的心跳,则认为该服务实例不可用,并将其从注册列表中移除。
  • 示例
    • 服务 A 每 30 秒向 Eureka Server 发送一次心跳,如果 Eureka Server 在 90 秒内未收到心跳,则认为服务 A 不可用。

2.4 服务下线

  • 过程
    • 服务实例在关闭时,会向 Eureka Server 发送下线请求,Eureka Server 将该服务实例从注册列表中移除。
  • 示例
    • 服务 A 关闭时,向 Eureka Server 发送下线请求,Eureka Server 将服务 A 从注册列表中移除。

2.5 自我保护机制

  • 过程
    • 当 Eureka Server 在一定时间内(默认 15 分钟)收到的心跳数低于某个阈值时,Eureka Server 会进入自我保护模式。
    • 在自我保护模式下,Eureka Server 不会移除任何服务实例,即使它们没有发送心跳。
  • 目的
    • 防止在网络分区或大量服务下线时,Eureka Server 误删健康的服务实例。

3. Eureka 的集群机制

Eureka Server 支持多节点集群,通过互相注册实现高可用。每个 Eureka Server 节点都会将服务实例的注册信息同步到其他节点。

  • 集群配置
    • 在 application.yml 中配置 Eureka Server 的集群节点:
      eureka:
        client:
          service-url:
            defaultZone: http://peer1:8761/eureka/,http://peer2:8761/eureka/
  • 数据同步
    • 每个 Eureka Server 节点都会将服务实例的注册信息同步到其他节点,确保数据的一致性。

4. Eureka 的配置项

4.1 Eureka Server 配置项

  • 服务注册
    eureka:
      instance:
        hostname: localhost
      client:
        register-with-eureka: false
        fetch-registry: false
        service-url:
          defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

4.2 Eureka Client 配置项

  • 服务注册
    spring:
      application:
        name: service-a
    eureka:
      client:
        service-url:
          defaultZone: http://localhost:8761/eureka/
  • 服务续约
    eureka:
      instance:
        lease-renewal-interval-in-seconds: 30
        lease-expiration-duration-in-seconds: 90

5. Eureka 的优缺点

5.1 优点

  • 高可用:支持多节点集群,通过互相注册实现高可用。
  • 自我保护机制:在网络分区或大量服务下线时,Eureka Server 会进入自我保护模式,保留已有的服务注册信息。
  • 简单易用:与 Spring Cloud 生态无缝集成,配置简单。

5.2 缺点

  • 功能单一:仅支持服务注册与发现,不支持配置管理。
  • 社区支持较弱:Netflix 已停止维护 Eureka,社区支持较弱。

总结

Eureka 是一个高可用的服务注册与发现组件,通过服务注册、服务发现、服务续约、服务下线和自我保护机制,确保在分布式系统中服务能够动态地注册、发现和调用。Eureka 支持多节点集群,通过互相注册实现高可用。尽管 Eureka 的功能相对单一,但其简单易用和高可用性使其在微服务架构中得到了广泛应用。

THE END
点赞12 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容