interview
springcloud
Eureka是怎么实现高可用的?

SpringCloud面试题, Eureka 是怎么实现高可用的?

SpringCloud面试题, Eureka 是怎么实现高可用的?

QA

Step 1

Q:: Eureka 是怎么实现高可用的?

A:: Eureka 通过集群来实现高可用。Eureka 集群中的每个节点既是一个服务注册中心,同时也会向其他节点注册自己。在服务注册时,服务实例会将自己的元数据(如主机名、IP 地址、端口号、状态等)注册到 Eureka Server。当 Eureka Server 集群中的一个节点宕机时,其他节点依然可以提供服务,从而保证了高可用性。此外,Eureka 还采用了心跳机制和自我保护机制。当服务实例注册到 Eureka Server 后,会定期发送心跳请求来表明自己仍然存活。如果 Eureka Server 在一定时间内没有收到服务实例的心跳请求,就会认为该实例已经不可用并将其从注册表中剔除。而自我保护机制的引入,可以防止因为网络问题导致的误判。

Step 2

Q:: Eureka 的自我保护机制是什么?

A:: Eureka 的自我保护机制是一种容错保护模式,当 Eureka Server 在短时间内丢失了大量客户端心跳连接时,会触发该机制。Eureka Server 会停止移除服务注册表中的实例,这样做的目的是为了保护已经注册的微服务实例,防止因为网络分区或者短时间内的大量实例宕机而导致的服务不可用。在自我保护模式下,Eureka Server 仍然能够提供注册和发现服务,但不会剔除任何实例,直到网络恢复正常或者系统管理员手动解除该模式。

Step 3

Q:: Eureka 的服务注册和发现流程是怎样的?

A:: 在 Eureka 中,服务实例启动后,会将自己的信息(如 IP 地址、端口、版本号等)注册到 Eureka Server 中,并在 Eureka Server 中维护一个租约(Lease),租约的有效期通常是 90 秒。Eureka Client 会每隔 30 秒向 Eureka Server 发送一次心跳请求以续约租期。在注册和续约的过程中,如果 Eureka Server 没有在规定时间内收到服务实例的心跳请求,那么 Eureka Server 会将该实例标记为不可用并最终从注册表中移除。服务发现的过程是:当一个服务实例需要调用另一个服务时,它会向 Eureka Server 查询可用的服务列表,并从中选择一个实例进行调用。

Step 4

Q:: Eureka 的自我保护机制的优缺点是什么?

A:: 自我保护机制的优点是可以防止网络分区问题导致的大规模服务下线,确保在网络恢复之前服务能够继续运行。但缺点是当自我保护机制被触发时,Eureka Server 可能会保留已经不可用的服务实例信息,这会导致客户端调用失败。因此,在开启自我保护机制时,需要权衡服务的可用性和一致性。

用途

Eureka 是 Spring Cloud 微服务架构中用于服务注册与发现的核心组件。在微服务架构中,服务实例可能会频繁上下线,因此服务的动态注册与发现显得尤为重要。通过 Eureka,服务实例可以在启动时自动注册到服务注册中心,并且其他服务可以从注册中心获取到最新的服务实例列表。这一机制在生产环境下尤为关键,因为它可以大幅度提高系统的可用性和灵活性,特别是在分布式系统和容器化部署的场景中。面试这一内容主要是为了考察候选人对微服务架构中服务注册与发现机制的理解,判断其是否能够在实际项目中正确配置和使用 Eureka,确保系统的稳定性和高可用性。\n

相关问题

🦆
如何实现 Eureka 的集群部署?

Eureka 的集群部署可以通过配置多个 Eureka Server 实例来实现,每个实例之间相互注册。通过 eureka.client.service-url.defaultZone 参数配置集群中的 Eureka Server 地址,使得每个实例在启动时都能与其他实例进行通信,形成一个高可用的服务注册中心集群。集群中的每个实例会同步所有服务注册信息,确保在某个实例宕机时,其他实例仍然能够提供服务。

🦆
在 Eureka 中如何处理网络分区问题?

网络分区问题是指由于网络原因导致部分节点之间无法通信,可能导致某些服务实例的心跳信号无法传达到 Eureka Server,从而被误判为不可用。Eureka 通过自我保护机制来缓解网络分区问题。当 Eureka Server 在短时间内丢失大量客户端心跳连接时,会触发自我保护机制,停止清除服务实例,直到网络恢复正常。这种机制确保了在网络问题下,服务不会被误判为不可用。

🦆
什么是 Spring Cloud Config?它与 Eureka 如何配合?

Spring Cloud Config 是一个用于外部化配置管理的工具,它提供了集中化的配置管理能力,支持版本控制,可以用于管理应用程序在不同环境下的配置。Spring Cloud Config Server 可以与 Eureka 配合使用,使得配置服务本身也可以注册到 Eureka 中,从而实现配置服务的高可用性。客户端可以从 Eureka 中发现并调用配置服务,获取最新的配置信息。

🦆
Eureka 与其他服务注册中心如 Consul,Zookeeper的对比?

Eureka 主要用于 Netflix 的 OSS 生态系统,具有较好的扩展性和灵活性,自我保护机制也是其一大特色。而 Consul 除了服务注册与发现外,还提供了分布式 KV 存储和健康检查等功能。Zookeeper 则是一种强一致性的分布式协调系统,通常用于需要严格一致性的场景,如分布式锁、领导者选举等。相比之下,Eureka 更加适合动态的微服务环境,而 Consul 和 Zookeeper 则更适用于要求严格一致性的场景。