SpringCloud配置中心面试题整理

目录

什么是配置中心?

Spring Cloud 有哪些注册中心?

为什么需要服务注册发现?

应用架构演进流程

单体多模块模型架构

多服务器单应用模型架构

微服务时代

Nacos 配置中心的实现原理吗?

配置灰度发布与版本管理

Nacos 的服务注册表结构是什么样的?

Nacos 中的 Namespace 是什么?如何使用它来组织和管理微服务?

使用Namespace来组织和管理微服务

什么是配置中心?

配置中心是 一个用于配置集中化管理且支持动态更新、分发配置文件的工具(服务)。

它实现了配置的统一管理和动态刷新。当配置信息发生变化时,配置中心可以自动通知服务实例进行配置更新,这样就可以实例无需重启即可应用最新的配置,从一定程度上减少了系统访问的空窗期,非常灵活方便。

配置中心如何实现动态更新?

配置中心通常使用长连接长轮询的方式来实现配置的动态刷新

  • 客户端与服务器建立一个持久的连接,保持打开状态。通常是基于 TCP 或 Websocket 协议的连接方式,能够实现实时的推送。

  • 当服务器检测到配置变化时,立即通过这个连接向客户端推送变更信息,客户端即时接收和处理更新。

  • 连接一直保持,直到手动关闭或由于网络中断等因素断开。

长轮询是一种模拟服务器推送的机制,

  • 客户端发送 HTTP 请求给服务器,询问是否有配置更新。

  • 服务器保持这个请求打开,直到检测到配置发生变更,或者达到超时时间。

  • 如果配置有更新,服务器返回更新的配置数据,客户端处理并再次发起新请求,如果没有更新,连接会超时,客户端也会重新发起请求

  • 本质上是客户端的连续请求

Spring Cloud 有哪些注册中心?

Spring Cloud 有很多注册中心,主要如下:

Eureka: Spring Cloud 的老牌注册中心,具有高可用、弹性、可扩展等特性,与 SpringCloud 集成比较好,不过现在已经停止维护了

Consul: 既可以作为注册中心,也可以作为配置中心,在Java 这边使用比较少,在 Go 微服务那边使用会比较广泛,主要因为使用 Go 语言开发的,提供了服务注册与发现、健康检测、键值存储等功能,支持多数据中心部署。

Nacos: 阿里巴巴开源的,即可以作为注册中心,也可以作为配置中心,主要要服务注册与发现、动态配置、动态 DNS 服务等功能。

Zookeeper: 这个是 Apache 基金会提供的分布式协调服务,以前与 Dubbo 结合,构成一款分布式的解决方案,也是一款注册中心。

为什么需要服务注册发现?

在分布式系统中,服务的数量通常会有很多,规模很大,同时,服务的部署和变化也会很频繁。如果要依赖人工去维护这些服务的关系,实现服务的管理以及调用就会变得非常困难。

通过注册中心来维护服务生产者以及服务消费者之间的关系。服务启动之后,就会向注册中心注册自己的信息,当服务消费者需要调用某个服务的时候,直接向注册中心发起查询请求,获取对应服务的信息,然后向该服务发送请求

如一些服务上线或者下线,注册中心都可以主动通知消费者,在高峰期加机器,低峰期减机器,减少了管理的成本,十分方便。

应用架构演进流程
单体多模块模型架构

在传统的数据请求模型中,没有服务注册与发现这样的说法,因为请求的模型足够简单也就是咱们的单体多模块应用程序,如下图所示:

多服务器单应用模型架构

随着时代的变化,人均手机电脑流量日益增长,渐渐的单体应用撑不下去了,根据负载均衡概念考虑使用多台服务器来承担流量的压力

但是这个时候还是没有服务注册和发现的所需,因为架构还是简单清晰,不断增加 server 服务还是可以扛住一定的流量。更新和维护也比较简单如下图所示:

那么大家都会想如果一个系统过于庞大不好维护怎么办,这时候微服务时代来了,分布式架构。服务注册于发现可以使用起来了。

微服务时代

在微服务时代,我们所有的服务都被劲量拆分成最小的粒度,原先所有的服务都在混在1个server里,现在就被按照功能或者对象拆分成 N个服务模块。

这样做的好处是深度解耦,1个模块只负责自己的事情就好,能够实现快速的迭代更新,坏处就是服务的管理和控制变得异常的复杂和繁琐,人工维护难度变大。如下图所示

比如上面的图中,我们将原先1个server 的服务进行了拆分,拆出了用户服务,订单服务,商品服务 等等。

每个服务里有4台机器来实例化。每个服务还相互关联和调动。这种错综复杂的网络架构使得这种服务的维护成本变得比之前困难了很多。

Nacos 配置中心的实现原理吗?

Nacos 配置中心的实现原理可以分为以下几个核心部分

1)配置的存储

  • 企业内 Nacos 一般会使用数据库(如 MySQL)来存储配置数据。数据以键值对的形式存储的,每个配置项对应一个数据 ID(Data ID),并且支持通过 Namespace(命名空间)、Group(组)来进行配置的隔离与分类。

  • 配置存储层在 Nacos 集群的任意节点都可以进行读写,通过多副本的数据持久化保证配置的高可用性和可靠性。

2)配置的推送机制

  • Nacos配置中心使用 gRPC 长连接 来实现配置的实时推送。客户端与Nacos服务器通过gRPC建立长连接,当配置发生变更时,Nacos服务器可以通过这个长连接实时向客户端推送配置更新。

  • 客户端在启动时,会向Nacos注册监听器( Listener )并维持与服务器的长连接。当 Nacos 检测到配置变更时,会通知所有相关客户端进行配置刷新。

3)配置的缓存

Nacos 客户端维护一个本地缓存,客户端接收到配置更新后,会自动刷新本地缓存的配置。当与 Nacos 服务器的连接出现异常或服务器不可用时,可以从本地缓存中读取配置,保证系统的基本运行不受影响。

这个缓存机制也有助于减少服务器压力,提高系统的可用性。( 所以面试官问你 Nacos 配置中心挂了实例会立马受到影响吗?答案是不会)

配置灰度发布与版本管理

Nacos 提供了灰度发布的能力,可以将配置的更新仅应用到部分客户端,以降低风险。通常情况下,可以先发布到某个Group 或使用标签(Tag)指定的客户端,确保新配置在小范围内运行稳定后,再逐步扩展到所有客户端。

当配置发生变更时,会生成新的版本,旧版本也会保存。版本管理可以确保在配置更新出现问题时,能够快速回退到之前的版本,减少对生产环境的影响。

Nacos 的服务注册表结构是什么样的?

Nacos 主要采用了数据的分级存储模型,最外层是 NameSpace,用来隔离环境,然后是 Group,用来实现服务分组,接下来就是服务(Service),一个服务可以有多个实例,并且可能服务节点不在同一区域,因此服务 Service 下面有多个集群(Cluster),集群下面有多个实例(Instance)

对应到 Java 代码中,其就是一个嵌套的 Map ,如下所示:

Map<String,Map<String,Service>> map
  • 最外层的 Key 就是 namespaceld,值是 Map。

  • 内层 Map 的 Key 是 Group 拼接而成的 servceName,即服务名称。

  • 最后的 Service 是一个对象,其内部也是一个 Map,Key 是集群的名字,即 Cluster 对象,然后值是存储实例 Instance 的集合。

Nacos 中的 Namespace 是什么?如何使用它来组织和管理微服务?

在Nacos中,Namespace是一种逻辑隔离机制,用来区分不同的环境或项目。

通过Namespace,可以在同一个Nacos实例上为不同的开发团队或者不同的环境(如开发、测试、生产)提供独立的服务和配置空间。这样可以避免不同环境下的服务和配置相互干扰,同时也便于管理和维护。

使用Namespace来组织和管理微服务
  1. 创建Namespace

    • 在Nacos控制台中,可以创建多个Namespace。

    • 每个Namespace都有一个唯一的ID,这个ID是用来标识该命名空间的唯一字符串。

  2. 指定Namespace

    • 当你向Nacos注册服务或获取配置时,可以通过指定Namespace ID来告诉Nacos这些操作属于哪个命名空间。

    • 例如,在Spring Cloud应用中,你可以通过spring.cloud.nacos.discovery.namespace属性来设置当前应用所属的Namespace。

  3. 服务注册与发现

    • 服务在注册到Nacos时会带上Namespace信息,因此即使不同环境中存在相同的服务名,只要它们属于不同的Namespace,就不会发生冲突。

    • 同样地,当客户端进行服务发现时,也需要指明目标Namespace,这样才能找到正确的服务实例列表。

  4. 配置管理

    • 配置文件也可以关联到特定的Namespace。这样,即使配置文件的名字相同,只要它们位于不同的Namespace下,就代表了不同环境下的配置。

    • 应用程序在启动时可以根据自己的Namespace来拉取对应的配置,确保获取到的是适合当前环境的正确配置。

  5. 权限控制

    • Nacos还支持基于Namespace的权限控制,可以为不同的Namespace分配不同的访问权限,从而增强系统的安全性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

空说

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值