微服务面试题:配置中心

🧑 博主简介:CSDN博客专家历代文学网 (PC端可以访问:https://literature.sinhy.com/#/?__c=1000,移动端可微信小程序搜索"历代文学 ")总架构师,15年工作经验,精通Java编程高并发设计Springboot和微服务,熟悉LinuxESXI虚拟化以及云原生Docker和K8s,热衷于探索科技的边界,并将理论知识转化为实际应用。保持对新技术的好奇心,乐于分享所学,希望通过我的实践经历和见解,启发他人的创新思维。在这里,我希望能与志同道合的朋友交流探讨,共同进步,一起在技术的世界里不断学习成长。
技术合作 请加本人wx(注明来自csdn ):foreast_sea


微服务面试题:配置中心

1. 为什么微服务需要配置中心?

微服务架构中的每个服务通常都需要一些配置信息,例如数据库连接地址、服务端口、日志级别等。这些配置可能因为不同环境、不同部署实例或者动态运行时需要进行调整和管理。

微服务的实例一般非常多,如果每个实例都需要一个个地去做这些配置,那么运维成本将会非常大,这时候就需要一个集中化的配置中心,去管理这些配置。

2. SpringCloud 可以选择哪些配置中心?

和注册中心一样,SpringCloud 也支持对多种配置中心的集成。常见的配置中心选型包括:

  1. Spring Cloud Config:官方推荐的配置中心,支持将配置文件存储在 Git、SVN 等版本控制系统中,并提供 RESTful API 进行访问和管理。
  2. ZooKeeper:一个开源的分布式协调服务,可以用作配置中心。它具有高可用性、一致性和通知机制等特性。
  3. Consul:另一个开源的分布式服务发现和配置管理工具,也可用作配置中心。支持多种配置文件格式,提供健康检查、故障转移和动态变更等功能。
  4. Etcd:一个分布式键值存储系统,可用作配置中心。它使用基于 Raft 算法的一致性机制,提供分布式数据一致性保证。
  5. Apollo:携程开源的配置中心,支持多种语言和框架。提供细粒度的配置权限管理、配置变更通知和灰度发布等高级特性,还有可视化的配置管理界面。
  6. Nacos:阿里巴巴开源的服务发现、配置管理和服务管理平台,也可以作为配置中心使用。支持服务注册与发现、动态配置管理、服务健康监测和动态 DNS 服务等功能。

3. Nacos 配置中心的原理了解吗?

配置中心,说白了就是一句话:配置信息的 CRUD。

具体的实现大概可以分成这么几个部分:

  1. 配置信息存储:Nacos 默认使用内嵌数据库 Derby 来存储配置信息,还可以采用 MySQL 等关系型数据库。
  2. 注册配置信息:服务启动时,Nacos Client 会向 Nacos Server 注册自己的配置信息,这个注册过程就是把配置信息写入存储,并生成版本号。
  3. 获取配置信息:服务运行期间,Nacos Client 通过 API 从 Nacos Server 获取配置信息。Server 根据键查找对应的配置信息,并返回给 Client。
  4. 监听配置变化:Nacos Client 可以通过注册监听器的方式,实现对配置信息的监听。当配置信息发生变化时,Nacos Server 会通知已注册的监听器,并触发相应的回调方法。

4. Nacos 配置中心长轮询机制?

一般来说客户端和服务端的交互分为两种:推(Push)拉(Pull),Nacos 在Pull的基础上,采用了长轮询来进行配置的动态刷新。

在长轮询模式下,客户端定时向服务端发起请求,检查配置信息是否发生变更。如果没有变更,服务端会"hold"住这个请求,即暂时不返回结果,直到配置发生变化或达到一定的超时时间。

具体的实现过程如下:

  1. 客户端发起 Pull 请求,服务端检查配置是否有变更。如果没有变更,则设置一个定时任务,在一段时间后执行,并将当前的客户端连接加入到等待队列中。
  2. 在等待期间,如果配置发生变更,服务端会立即返回结果给客户端,完成一次"推送"操作。
  3. 如果在等待期间没有配置变更,等待时间达到预设的超时时间后,服务端会自动返回结果给客户端,即使配置没有变更。
  4. 如果在等待期间,通过 Nacos Dashboard 或 API 对配置进行了修改,会触发一个事件机制,服务端会遍历等待队列,找到发生变更的配置项对应的客户端连接,并将变更的数据通过连接返回,完成一次"推送"操作。

通过长轮询的方式,Nacos 客户端能够实时感知配置的变化,并及时获取最新的配置信息。同时,这种方式也降低了服务端的压力,避免了大量的长连接占用内存资源。

相关推荐
有梦想的攻城狮4 小时前
【一起来学kubernetes】29、NFS使用详解
云原生·容器·kubernetes·nfs·网络文件系统
这个懒人5 小时前
Kubernetes深度解析:云原生时代的容器编排引擎
云原生·容器·kubernetes
小安运维日记8 小时前
CKS认证 | Day3 K8s容器运行环境安全加固
运维·网络·安全·云原生·kubernetes·云计算
techdashen9 小时前
Kubernetes比同规格虚拟机性能相差多少?
云原生·容器·kubernetes
Avatar*10 小时前
k8s1.22 kubeadm 部署
云原生·容器·kubernetes
Feng.Lee10 小时前
如何使用K8S快速部署测试环境
测试工具·云原生·容器·kubernetes·可用性测试
阿珊和她的猫10 小时前
Manus:通用智能体的架构革命与产业破局
架构·状态模式
识途老码11 小时前
k8s日志管理
云原生·容器·kubernetes
小李同学_LHY12 小时前
微服务架构中的精妙设计:环境和工程搭建
java·spring·微服务·springcloud
George_huhu12 小时前
云原生系列-K8S实战
云原生·容器·kubernetes