Nacos 相关面试问题及答案

Nacos 是什么?

Nacos (Naming and Configuration Service) 是一个开源项目,是由 Alibaba 开发的,它致力于提供动态服务发现、服务健康监测、动态配置服务以及服务管理的平台,它被设计用于帮助构建云原生应用,是微服务架构中的一个关键组件,Nacos 提供服务注册和配置管理,帮助企业轻松地在云环境中实现自动化运维。

Nacos 主要有以下核心功能:

  • 注册中心:在微服务架构中,服务实例可能会在多个服务器上动态地启动或关闭,因此需要一个注册中心来动态地维护和管理这些服务实例,Nacos 能自动注册服务实例,并通过健康检查机制来保证服务实例的可用性,同时 Nacos 可以支持 AP 和 CP 两种模式。
  • 配置中心:应用服务的配置动态管理是微服务中非常重要的一环,过去我们常用 Apollo、consul 来做配置中心,我们如果使用了 Nacos 作为注册中心,不妨直接使用 Nacos 做配置中心,Nacos 允许开发人员动态管理应用配置,无需重启服务即可实现配置的实时更新。
  • 服务元数据和流量管理:Nacos 支持服务元数据的管理,允许用户定义服务级别的元数据信息,如加载均衡策略、路由策略等,从而实现更灵活的流量管理和服务治理。
  • 持久化存储:Nacos支持将服务和配置信息持久化到外部存储系统,比如MySQL数据库中,以确保数据的安全和稳定。

Nacos 和 Eureka有什么区别?

功能范围:

  • Eureka:仅提供注册中心功能, 是 Spring Cloud Netflix 组件之一,与 Spring Cloud 无缝集成。
  • Nacos:除了提供注册中心功能之外,还提配置中心、服务元数据信息管理等,对比 Eureka,Nacos 是一个功能更强大的微服务组件。

数据一致性:

  • Eureka:采用的是AP(可用性和分区容错性)设计,它不保证每次服务列表都是最新的,但可以保证高可用。
  • Nacos:可以在AP模式和CP(一致性和分区容错性)模式之间切换,在CP模式下,Nacos可以提供更强的数据一致性保证。

社区和生态支持:

  • Eureka:由于 Spring Cloud Netflix 进入维护模式,Eureka 2.x的开发已经停止,而Eureka 1.x的维护也只限于关键问题的修复,社区对 Eureka 的支持可能不如 Nacos 活跃。
  • Nacos:作为一个较新的项目,获得了阿里巴巴的积极维护和社区的广泛支持,持续更新和增加新特性。

运行模式:

  • Eureka:主要是以客户端发现的模式运行,服务实例信息由客户端缓存并定时从服务器刷新。
  • Nacos:不仅支持客户端的服务发现,也支持服务端的服务发现,而且客户端也可以通过长连接实时接受配置更新和服务列表变更的推送。

Nacos 是如何注册和发现服务的?

服务注册:

  1. 当服务实例启动时,它会通过 Nacos 客户端(通常集成在应用程序中)将自己的信息,如服务名称、IP地址、端口号、版本号以及其他元数据发送(Nacos 1.X 是通过 HTTP 的方式,Nacos 2.X 是通过 GRPC 的方式)到 Nacos 服务器,完成服务注册。
  2. 服务实例注册到 Nacos 后,它会定期(默认 5秒每次)向Nacos服务器发送心跳,证明自己仍然是健康和可用的,如果 Nacos 服务器在指定时间(默认 15秒)内没有收到某个服务实例的心跳,它会认为该实例是不健康的,如果 Nacos 服务器在指定时间(默认 30秒)内没有收到某个服务实例的心跳,会认定其是僵尸实例,并将其从服务列表中移除。

服务发现:

  1. 当客户端需要访问某个服务时,它会向 Nacos 服务器查询该服务的健康实例列表。
  2. Nacos 服务器会返回服务实例(有可能有不健康的服务实例)信息给客户端,客户端通常会缓存这些服务信息。
  3. 客户端还可以注册监听器到 Nacos 服务器,监听服务实例列表的变更,当有新的服务实例注册或有服务实例被移除时,Nacos 服务器会推送变更到客户端,客户端更新本地缓存的服务列表。

Nacos如何实现高可用?

  • 集群部署:Nacos 支持集群部署,在集群模式下,当一条数据被修改,这个变更会同步到所有节点,确保每个节点都拥有最新的数据状态。
  • 数据持久化:Nacos 支持将服务和配置数据持久化到外部存储中,如 MySQL 数据库,这样即使所有 Nacos 节点同时宕机,数据也不会丢失,可以在节点重启后恢复状态。

Nacos 的配置如何持久化?

  • 内嵌持久化:Nacos 默认使用内嵌的 Derby 数据库进行配置信息的持久化,这种方式适合非生产环境,因为其简单且无需额外的配置,由于 Derby 数据库本身是一个轻量级的嵌入式关系数据库,它并不适用于生产环境的高可用性要求。

  • 外部存储持久化:在生产环境中,推荐使用外部数据库(推荐 MySQL)来存储Nacos的配置数据,这是因为外部数据库通常提供了更高级的持久化特性,包括数据复制、故障转移、读写分离、备份与恢复等,这对于保证数据的安全性和服务的可用性至关重要,Nacos 提供了一个 SQL 文件,只需要运行这个 SQL 文件来初始化数据库,创建 Nacos 需要的表和结构,并修改数据库连接的相关配置即可。

Nacos 配置管理模型 – 命名空间(Namespace)、配置分组(Group)和配置集ID(Data ID)各自代表什么意思?

关于这个问题有分享一个博文,传送门如下:

Nacos 配置管理模型 – 命名空间(Namespace)、配置分组(Group)和配置集ID(Data ID)

CAP 原则

CAP 原则相信大家都很熟悉,也是面试中常见的问题,CAP 原则通常适用于分布式系统中,Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性),在分布式系统中 CAP 不可同时满足,这也就是常说的 CAP 原则。

  • 一致性(C):所有的节点都可以访问到最新的数据,所有的节点看到的数据都是一致的,这里的一致性是指强一致性。
  • 可用性(A):任何一个时候任何一个请求都可以得到正确响应,也就是说系统在任何时候都是可用的。
  • 分区容错性(P):表示某一个区域故障不会影响整个系统的使用,也就是说除非全部区域够故障,否则系统一直保持可用性。

CAP 理论经过论证,在分布式系统中,最多能够保证两点,而区域网络故障肯定会导致系统不可用,因此分布式系统必须保证分区容错性,故在分布式系统的组件选用中,只能舍弃可以用性或者一致性,也就是要么选择 CP 模式要么选择 AP 模式,注册中心推荐使用 AP 模式。

Base 理论

Base 理论是基于 CAP 理论逐步演化而来的,是CP(强一致性)和AP(强可用性)权衡的结果,Base 理论的核心思想是:既然无法做到强一致性,但每个应用都可以根据自身业务特点采用适当的方式来使系统达到最终的一致性。

  • Basically Available(基本可用):假设系统,出现了不可预知的故障,但不是不能用,只是在性能、功能少有所损失,比如响应变慢、非核心功能不能使用等,但系统还是可以使用的。
  • Soft state(软状态):允许系统中的数据存在中间状态,并且这个中间该状态不影响系统的整体可用性,允许系统在多个节点的数据副本存在一定的数据延时。
  • Eventually consistent(最终一致性):系统能够保证数据最终一定能够达到一致的状态,不会影响最终的结果。

Nacos 的 AP 模式和 CP模式

Nacos 作为分布式注册中心、配置终须组件,即支持 AP 模式,也支持 CP 模式,Nacos 默认使用的是 AP 模式,可以通过配置文件的方式让 Nacos 实现 CP 模式,但一般不这么做。

Nacos 的 AP 模式和 CP模式的体现?

阅读过 Nacos 源码或者对 Nacos 有一定了解的朋友,肯定知道在 Nacos 中有一个单词叫做 Ephemeral,这个单词在 Nacos 中非常常见,Ephemeral 直接翻译是短暂的意思,在 Nacos 中我们通常翻译为临时的,Nacos 中的两个概念:临时服务和持久化服务,如下:

  • 临时服务(Ephemeral):临时服务选择的是 AP 模式,服务实例健康检查失败后会从列表中删除,常用于服务注册发现场景。
  • 持久化服务(Persistent):持久化服务使用的 CP 模式,服务实例健康健康检查失败后会被标记成不健康,常用于 DNS 场景。

Nacos 的一致性协议?

我们知道 Nacos 有 AP 和 CP 两种模式,两种模式使用不同的协议,如下:

  • AP 模式:使用的是 Nacos 的自己实现的 distro 协议,也是 Nacos 默认的协议,也就是说 Nacos 默认是 AP 模式。
  • CP 模式:使用 raft 协议。

Nacos 中 Distro 协议的关键概念

  • Member:Nacos 集群中的每一个节点都是一个 Member,Member 是集群成员节点的意思。
  • MemberInfoReportTask:每个 Nacos 节点会定时给出自之外的其他节点进行通讯,以此来检测其他节点是否还存活。
  • DistroSyncChangeTask:Nacos 集群间数据同步使用。
  • LoadDataTask:Nacos 节刚启动时,会从其他节点拉取一次全量的数据,以此让当前节点和整个集群中的数据快速保持一致。

Nacos AP模式的工作模式?

  • Nacos 启动时候先从远程节点同步数据到本地,服务注册的时候也是同步数据到其他节点。
  • Nacos 的每个节点是平等,都可以处理写请求,也可以把数据同步集群中的其他节点。
  • 当节点收到属于该节点的写操作的服务时候,直接完成写入,如果不属于该节点,则会路由到对应的节点,完成数据写入。
  • 读取操作无需路由,因为集群中的每个节点都会同步服务状态,每个节点都有全量的的最新的数据。
  • 当某个节点发生宕机的时候,原本属于该节点服务的读写服务会转移到其他节点,来保证 Nacos 集群的可用性。

持续更新。。。。。。

欢迎提出建议及对错误的地方指出纠正。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/50588.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

求最大公约数与最小公倍数(C语言 简洁快速版)

求最大公约数 辗转相除法(首选,因为简单快捷) 思路: 1.将两整数求余 a%b c 2.如果c 0;则b为最大公约数 3.如果c ! 0,则 a b;b c;继续从1开始执行 4.也就是说该循环的是否继续的判断条件就是c是否为0 …

3.4、图

图的介绍 图也是一种非线性结构,图中任意两个节点间都可能有直接关系。相关定义如下: 无向图:图的结点之间连接线是没有箭头的,不分方向。 有向图:图的结点之间连接线是箭头,区分A到B,和B到A是两条线。 …

Codeforces 962 div3 A-F

A 题目分析 签到 C代码 #include<iostream> using namespace std; int main(){int t;cin>>t;while(t--){int n;cin>>n;cout<<n/4n%4/2<<endl;} } B 题目分析 将n*n的方格分成若干个k*k的方格&#xff0c;每个k*k的方格中所有的数都相同 遍历…

开始写人工智能

文章目录 概述 概述 开始写人工智能模块。既然决定开始写这些&#xff0c;那就开始吧&#xff01;

linux命令常见功能性分类整理

linux怎么解决空间不足的情况 检查空间占用&#xff1a; df -h找出占用空间的文件或目录&#xff1a; du -sh /* du -sh /path/*清理缓存&#xff08;取决于你使用的Linux发行版&#xff09;&#xff1a; 对于Ubuntu/Debian&#xff1a; sudo apt-clean对于CentOS/Red Hat&…

【用户会话信息在异步事件/线程池的传递】

用户会话信息在异步事件/线程池的传递 author:shengfq date:2024-07-29 version:1.0 背景: 同事写的一个代码功能,是在一个主线程中通过如下代码进行异步任务的执行,结果遇到了问题. 1.ThreadPool.execute(Runnable)启动一个子线程执行异步任务 2.applicationContext.publis…

SwiftUI知识点(四)

NavigationStack import SwiftUIstruct NavigationStackBootcamp: View {let fruits ["Apple", "Orange", "Banana"]///路径数组State private var stackPath: [String] []var body: some View {NavigationStack(path: $stackPath) {VStack{B…

RocketMQ的Admin Tool工具

文档&#xff1a;https://github.com/apache/rocketmq/blob/develop/docs/cn/operation.md写的很全面&#xff0c;我写了一半就偷懒了&#xff0c;地址放这里。 命令大全&#xff1a;https://github.com/apache/rocketmq/blob/develop/docs/cn/operation.md 1. 删除讨厌的告警…

文献笔记|综述|A Survey of Large Language Models (前3章)

A Survey of Large Language Models 题目&#xff1a;大语言模型综述 作者&#xff1a;Wayne Xin Zhao, Kun Zhou, Junyi Li et al. 来源&#xff1a;arXiv 单位&#xff1a;中国人民大学高瓴人工智能学院、中国人民大学信息学院 关键词&#xff1a;Large Language Models; Eme…

AI之AI by Hand:AI by Hand(手动自定义AI算法的数学逻辑)的简介、使用方法、案例应用之详细攻略

AI之AI by Hand&#xff1a;AI by Hand(手动自定义AI算法的数学逻辑)的简介、使用方法、案例应用之详细攻略 目录 AI by Hand的简介 AI by Hand的使用方法 1、解读混合专家&#xff08;MoE&#xff09; 2、解读LSTM (Long Short-Term Memory) AI by Hand的案例应用 AI by …

质量小议41 -- 讲究 与 将就

你的质量是”讲究“ 还是 ”将就“ ”讲究“ 好还是 ”将就” 好 适用就好&#xff0c;是 “讲究” 还是 “将就” 质量在哪里&#xff1f; 价值在哪里&#xff1f; 讲究 注重&#xff0c;重视&#xff0c;力求完美&#xff1b;精美&#xff0c;完善&#xff1b;做…

学习大数据DAY25 Shell脚本的书写2与Shell工具的使用

目录 自定义函数 递归-自己调用自己 上机练习 12 Shell 工具 sort sed awk 上机练习 13 自定义函数 name(){ action; } function name { Action; } name 因为 shell 脚本是从上到下逐行运行&#xff0c;不会像其它语言一样先编译&#xff0c;所以函数必 须在调…

Ubuntu安装和简单操作MySQL工具

一、MySQL数据库的起源 MySQL 是一个开源的关系型数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;其起源可以追溯到 1994 年。MySQL 最初是由瑞典公司 MySQL AB 开发的&#xff0c;该公司由 Michael “Monty” Widenius、Allan Larsson 和 David Axmark 于 1995 年成…

ruoyi框架的优缺点

若依框架的优缺点 ‌若依框架的优点包括&#xff1a; 优秀的性能表现&#xff1a;ruoyi框架以其优秀的性能表现&#xff0c;能够高效地处理各种开发任务。 多种组件支持&#xff1a;提供了多种组件的支持&#xff0c;使得开发者能够灵活地选择和使用各种工具和技术。 强大的…

MyBatis-Plus自动生成代码

目录 前言一. 什么是 MyBatis-Plus1. Mybatis-Plus 的特点2. Mybatis-Plus 结构二. MyBatis-Plus 自动生成步骤1. 数据库准备2. 环境准备(1) 创建一个空的 Spring Boot 工程(2) 导入pom依赖(3) 编辑application.yml文件(4) 在启动类加入 @MapperScan 注解3. 配置代码4. 运行三.…

江科大/江协科技 STM32学习笔记P15

文章目录 TIM输出比较1、输出比较简介2、PWM简介3、输出比较通道&#xff08;高级&#xff09;4、输出比较通道&#xff08;通用&#xff09;5、输出比较模式6、PWM基本结构参数计算 7、舵机简介8、直流电机及驱动简介驱动芯片 TIM输出比较 1、输出比较简介 CNT计数器&#x…

用户认证与授权:在 Symfony 中实现安全控制

用户认证与授权&#xff1a;在 Symfony 中实现安全控制 Symfony 是一个功能强大且高度可扩展的 PHP 框架&#xff0c;广泛用于开发复杂的 Web 应用程序。在现代 Web 应用程序中&#xff0c;用户认证和授权是不可或缺的功能&#xff0c;用于确保应用程序的安全性和数据的隐私性…

Java工厂模式详解:方法工厂模式与抽象工厂模式

Java工厂模式详解&#xff1a;方法工厂模式与抽象工厂模式 一、引言 在Java开发中&#xff0c;设计模式是解决常见软件设计问题的一种有效方式。工厂模式作为创建型设计模式的一种&#xff0c;提供了灵活的对象创建机制&#xff0c;有助于降低代码的耦合度&#xff0c;提高系…

VUE3——003、VUE 项目中的文件结构(index.html、main.ts、App.vue)

虽然是号称是小白初学&#xff0c;但本文只是对 VUE 小白&#xff0c;其它的基功还是有一丢丢的&#xff0c;不太懂的同学去看看一下详解&#xff0c;我这里记述的是自己的理解和观点。见谅&#xff01; index.html&#xff1a;入口文件&#xff08;以创建 vue3 项目的默认文件…