Spring Cloud Eureka面试题
Spring Cloud Eureka面试题
- 1. Eureka基础概念
-
- 1.1 什么是Eureka?
- 1.2 Eureka的组件和架构有哪些元素组成?
- 1.3 Eureka Server和Eureka Client有什么区别?
- 1.4 如何描述Eureka的自我保护机制?
- 2. 服务注册与发现
-
- 2.1 如何将服务注册到Eureka Server?
- 2.2 Eureka Client是如何发现服务的?
- 2.3 服务下线与服务剔除的过程是什么?
-
- 服务下线
- 服务剔除
- 2.4 Eureka的心跳机制是如何工作的?
- 3. Eureka集群
-
- 3.1 如何配置Eureka Server集群?
- 3.2 Eureka Server集群的高可用性是如何实现的?
- 3.3 Eureka集群中的复制机制是怎样的?
- 3.4 多个Eureka Server实例间是如何同步状态的?
- 4. Eureka的客户端行为
-
- 4.1 Eureka Client启动时发生了什么?
- 4.2 Eureka Client从Eureka Server拉取服务信息的策略是什么?
- 4.3 Eureka Client缓存刷新策略如何影响服务发现?
- 4.4 如何处理Eureka Client与Server连接中断的情况?
- 5. 结合Spring Cloud使用
-
- 5.1 Spring Cloud中如何整合Eureka?
-
- 设置 Eureka Server
- 设置 Eureka Client
- 5.2 在Spring Cloud项目中,启用Eureka的步骤是什么?
-
- 设置 Eureka Server
- 设置 Eureka Client
- 5.3 如何自定义Eureka Client配置?
-
- 通过配置文件自定义
-
- 配置Eureka服务端点
- 禁用客户端的服务注册功能
- 禁用从Eureka Server获取注册信息的功能
- 设置Eureka实例的主机名与端口
- 配置实例ID
- 通过代码进行自定义配置
- 5.4 使用Eureka有哪些最佳实践?
- 6. 安全和维护
-
- 6.1 如何保护Eureka Server防止未授权的访问?
- 6.2 Eureka Server的维护模式是指什么?
- 6.3 如何在不停机的情况下更新Eureka集群?
- 6.4 Eureka Server支持SSL吗?如何配置?
序号 | 内容 | 链接地址 |
---|---|---|
1 | Java面试题 | https://blog.csdn.net/golove666/article/details/137360180 |
2 | JVM面试题 | https://blog.csdn.net/golove666/article/details/137245795 |
3 | Servlet面试题 | https://blog.csdn.net/golove666/article/details/137395779 |
4 | Maven面试题 | https://blog.csdn.net/golove666/article/details/137365977 |
5 | Git面试题 | https://blog.csdn.net/golove666/article/details/137368870 |
6 | Gradle面试题 | https://blog.csdn.net/golove666/article/details/137368172 |
7 | Jenkins 面试题 | https://blog.csdn.net/golove666/article/details/137365214 |
8 | Tomcat面试题 | https://blog.csdn.net/golove666/article/details/137364935 |
9 | Docker面试题 | https://blog.csdn.net/golove666/article/details/137364760 |
10 | 多线程面试题 | https://blog.csdn.net/golove666/article/details/137357477 |
11 | Mybatis面试题 | https://blog.csdn.net/golove666/article/details/137351745 |
12 | Nginx面试题 | https://blog.csdn.net/golove666/article/details/137349465 |
13 | Spring面试题 | https://blog.csdn.net/golove666/article/details/137334729 |
14 | Netty面试题 | https://blog.csdn.net/golove666/article/details/137263541 |
15 | SpringBoot面试题 | https://blog.csdn.net/golove666/article/details/137192312 |
16 | SpringBoot面试题1 | https://blog.csdn.net/golove666/article/details/137383473 |
17 | Mysql面试题 | https://blog.csdn.net/golove666/article/details/137261529 |
18 | Redis面试题 | https://blog.csdn.net/golove666/article/details/137267922 |
19 | PostgreSQL面试题 | https://blog.csdn.net/golove666/article/details/137385174 |
20 | Memcached面试题 | https://blog.csdn.net/golove666/article/details/137384317 |
21 | Linux面试题 | https://blog.csdn.net/golove666/article/details/137384729 |
22 | HTML面试题 | https://blog.csdn.net/golove666/article/details/137386352 |
23 | JavaScript面试题 | https://blog.csdn.net/golove666/article/details/137385994 |
24 | Vue面试题 | https://blog.csdn.net/golove666/article/details/137341572 |
25 | Ajax面试题 | https://blog.csdn.net/golove666/article/details/137421929 |
26 | Python面试题 | https://blog.csdn.net/golove666/article/details/137385635 |
27 | Spring Cloud Alibaba面试题 | https://blog.csdn.net/golove666/article/details/137372112 |
28 | SpringCloud面试题 | https://blog.csdn.net/golove666/article/details/137345465 |
29 | RabbitMQ面试题 | https://blog.csdn.net/golove666/article/details/137344188 |
30 | Dubbo面试题 | https://blog.csdn.net/golove666/article/details/137346834 |
31 | Elasticsearch面试题 | https://blog.csdn.net/golove666/article/details/137348184 |
32 | Oracle面试题 | https://blog.csdn.net/golove666/article/details/137350452 |
33 | Android面试题 | https://blog.csdn.net/golove666/article/details/137358253 |
34 | Kafka面试题 | https://blog.csdn.net/golove666/article/details/137358607 |
35 | ZooKeeper面试题 | https://blog.csdn.net/golove666/article/details/137359255 |
36 | Kubernetes面试题 | https://blog.csdn.net/golove666/article/details/137365540 |
37 | Flink面试题 | https://blog.csdn.net/golove666/article/details/137369555 |
38 | Hadoop面试题 | https://blog.csdn.net/golove666/article/details/137370194 |
39 | Hive面试题 | https://blog.csdn.net/golove666/article/details/137371835 |
40 | Hbase面试题 | https://blog.csdn.net/golove666/article/details/137381853 |
41 | Spark面试题 | https://blog.csdn.net/golove666/article/details/137382815 |
42 | Golang面试题 | https://blog.csdn.net/golove666/article/details/137395486 |
43 | Solr面试题 | https://blog.csdn.net/golove666/article/details/137420799 |
44 | Vue Router面试题 | https://blog.csdn.net/golove666/article/details/137451302 |
45 | Axios面试题 | https://blog.csdn.net/golove666/article/details/137435251 |
46 | Npm面试题 | https://blog.csdn.net/golove666/article/details/137453790 |
47 | MongoDB面试题 | https://blog.csdn.net/golove666/article/details/137383946 |
48 | 云原生面试题 | https://blog.csdn.net/golove666/article/details/137492832 |
49 | Nacos面试题 | https://blog.csdn.net/golove666/article/details/137534990 |
50 | Seata面试题 | https://blog.csdn.net/golove666/article/details/137580504 |
51 | Sentinel面试题 | https://blog.csdn.net/golove666/article/details/137623642 |
52 | Seluth面试题 | https://blog.csdn.net/golove666/article/details/137690943 |
53 | SkyWalking面试题 | https://blog.csdn.net/golove666/article/details/137721955 |
54 | Spring Cloud Bus面试题 | https://blog.csdn.net/golove666/article/details/137739136 |
55 | Spring Cloud Stream面试题 | https://blog.csdn.net/golove666/article/details/137789910 |
56 | Spring Cloud Gateway面试题 | https://blog.csdn.net/golove666/article/details/137815316 |
57 | Spring Cloud Config面试题 | https://blog.csdn.net/golove666/article/details/137888045 |
58 | Spring Cloud Zuul面试题 | https://blog.csdn.net/golove666/article/details/137937084 |
59 | Hystrix面试题 | https://blog.csdn.net/golove666/article/details/137975833 |
60 | Spring Cloud Consul面试题 | https://blog.csdn.net/golove666/article/details/13801037 |
61 | Spring Cloud Feign面试题 | https://blog.csdn.net/golove666/article/details/138045605 |
62 | Spring Cloud Ribbon面试题 | https://blog.csdn.net/golove666/article/details/138089896 |
1. Eureka基础概念
1.1 什么是Eureka?
Eureka是Netflix开发的一种服务发现工具,它是Spring Cloud Netflix 微服务套件的核心组件。作为一个服务发现服务器,Eureka让服务之间的位置透明化,从而能够更好地构建和维护微服务架构。在微服务架构中,每个服务的位置可能会频繁发生变化(例如,因为实例数量的增减或是在不同的服务器上部署),直接引用服务的网络位置会造成耦合和维护难题。Eureka通过提供一个中央服务注册功能,使得各服务能动态注册自己的位置,并且允许其他服务通过逻辑名称来发现并调用这些服务。
Eureka由两个主要组件构成:
-
Eureka Server:运行为一个独立的应用程序,服务实例通过它进行注册和注销,其他服务实例通过它查找当前注册的服务列表。
-
Eureka Client:通常作为微服务的一部分运行在服务实例中,负责与Eureka Server交互,实现服务注册、发送心跳以维持租约、查询可用服务等操作。
Eureka提供的服务发现机制功能包括:
- 服务注册:服务实例在启动时向Eureka Server注册,并定期发送心跳信号以维持其注册状态。
- 服务发现:服务客户端通过Eureka Server查询当前注册的服务实例列表,并通过负载均衡策略调用其他服务。
- 自我保护模式:当网络分区导致服务实例无法与Eureka Server正常通信时,Eureka Server不会立刻移除服务注册信息,而是进入自我保护模式,可以防止服务实例因网络问题被误删。
Netflix开发的Eureka已经成为Spring Cloud Ecosystem的重要组成部分,尽管在较新的Spring Cloud版本中,官方推荐使用Spring Cloud Discovery的其他组件(如Consul、Zookeeper或Spring Cloud Kubernetes)来提供服务发现功能。
1.2 Eureka的组件和架构有哪些元素组成?
Eureka 是一个用 Java 编写的服务发现技术,属于 Netflix 开源的一部分,在微服务架构中,它被用作服务注册中心和服务发现中心。Eureka 的主要组件和架构元素包括:
-
Eureka Server:
作为服务注册中心,Eureka Server 提供服务注册和发现的功能。所有的服务实例在启动时都会向 Eureka Server 注册自己,并通告自己可用。Eureka Server 保存服务实例的信息,如其IP地址、端口和健康状况。 -
Eureka Client:
服务实例使用 Eureka Client 与 Eureka Server 交互。客户端负责处理注册(在Eureka Server注册当前服务实例)、注销(停止前从Server撤销注册)、发送心跳(周期性告诉Server实例还活着)以及查询(获取可用服务实例列表)。 -
服务注册:
就是服务实例使用 Eureka Client 将自身注册到 Eureka Server 的过程,服务启动时进行,并且会携带服务的元数据。 -
服务续约(心跳):
一旦服务实例注册完成后,Eureka Client 会每隔一段时间发送心跳给 Eureka Server,通常这个时间间隔是30秒。这个心跳确认该服务实例仍然是可用的,并且维持它在注册中心的注册状态。 -
服务下线:
当服务实例正常关闭时,它会通过 Eureka Client 向 Eureka Server 发送取消注册的请求,告知服务中心它将不再提供服务。 -
服务发现:
客户端服务使用 Eureka Client 获取服务注册列表信息,并据此进行负载均衡,调用注册表中的服务。Eureka Client 会缓存注册表信息,并定时从 Server 获取最新的注册信息。 -
区域感知:
Eureka Server 可以配置成多个区域以支持跨区域的服务发现,以实现健壮的、高可用的服务注册与发现机制。 -
自我保护模式:
Eureka Server 在检测到大量服务实例没有发送心跳时,它会进入自我保护模式,认为网络条件不稳定,而不是所有服务实例都突然下线了。在这种模式下,Eureka Server 保持服务注册列表,不再移除长时间没有发送心跳的服务。 -
集群模式:
为了提高可用性和冗余,Eureka Server 可以运行在集群模式下。在此模式下,常常使用多个 Eureka Server 实例,它们相互之间复制注册表的信息。
整个 Eureka 架构设计弹性非常高,在微服务架构中 Eureka 提供了一种高度可用、可靠的服务发现机制,确保了各个微服务组件可以相互查找并进行通信。
1.3 Eureka Server和Eureka Client有什么区别?
Eureka Server和Eureka Client是Netflix Eureka服务发现系统的两个关键组件。它们在微服务架构中扮演着不同但相互补充的角色来实现服务注册和发现的功能。
-
Eureka Server:
Eureka Server是服务发现模式中的服务注册中心。它允许各种服务(通常称为Eureka Client)注册它们的实例信息,并提供这个注册表给其他服务使用,以实现服务间发现与通信。通常,在生产环境中,会运行多个Eureka Server实例,以形成一个集群,从而提供高可用性保障。主要功能包括:- 维持服务实例注册表,提供服务注册和服务注销接口。
- 提供查询接口,供客户端查询当前注册的服务实例列表。
- 心跳检测,服务实例需要定时向Eureka Server发送心跳以续租,若Eureka Server在规定时间内没有收到某服务实例的心跳,将会注销该实例。
- 复制机制确保在Eureka Server集群中的所有实例有一致的视图。
-
Eureka Client:
Eureka Client是服务实例,它将自身的信息注册到Eureka Server,并通过Eureka Server来发现其他服务。它是一个Java客户端,用来简化与Eureka Server的交互。Eureka Client的主要功能包括:- 在启动时向Eureka Server注册自身服务信息(例如IP地址、端口、健康指示等)。
- 定时发送心跳来维持租约,表示服务实例是活跃的。
- 从Eureka Server拉取服务注册表,并缓存在本地,以实现负载均衡和故障转移。
- 当停止或崩溃时,自动从Eureka Server的注册表中注销。
- 在Eureka Server不可用的情况下,依然可以使用缓存的服务实例信息进行服务间调用。
简而言之,Eureka Server是服务注册中心,对服务实例集中进行管理,而Eureka Client是服务实例本身,它既负责将自己注册到Eureka Server中,也负责从Eureka Server中发现并连接其他服务实例。这两个组件共同工作,使得服务的发现变得自动化和动态,这是构建弹性微服务架构的重要基础。
1.4 如何描述Eureka的自我保护机制?
Eureka是Netflix开发的一种服务发现工具,它是Spring Cloud体系中的关键组件之一。Eureka通过服务注册和服务发现的方式,允许微服务实例相互发现,并通过一个叫做Eureka Server的注册中心进行通信。
自我保护模式是Eureka的一项重要特性,它的设计目的是防止在网络分区问题发生时,Eureka注册中心误删除了服务实例列表。在分布式系统中,网络分区是指系统的不同部分由于网络问题不能相互通信。
以下是Eureka自我保护机制的工作原理的描述:
-
心跳检测:
Eureka客户端(通常是各个微服务实例)定期向Eureka Server发送“心跳”信号以维持注册状态并续租。这就类似于告诉Eureka Server,“我还活着,不要注销我”。 -
续租阈值:
Eureka Server跟踪它期望收到的续租(心跳)的数量。如果在指定时间内收到的心跳数远少于预期,Eureka Server会怀疑这是网络问题,而不是服务实例宕机。 -
自我保护开启:
当Eureka Server在指定时间窗口内收到的心跳数少于某个阈值(例如85%)时,它会进入自我保护模式。这通常意味着有可能发生了网络分区问题,导致Eureka Server无法收到客户端的续租请求。 -
保留注册表:
在自我保护模式下,为了防止服务实例由于网络问题而被错误删除,