nacos注册中心面试总结

2023-11-06

1注册中心演变及其设计思想

2 Nacos注册中心架构

 3 核心功能

服务注册:Nacos Client会通过发送REST请求的方式向Nacos Server注册自己的服务,提供自身的元数据,比如ip地址、端口等信息。Nacos Server接收到注册请求后,就会把这些元数据信息存储在一个双层的内存Map中。

服务心跳:在服务注册后,Nacos Client会维护一个定时心跳来持续通知Nacos Server,说明服务一直处于可用状态,防止被剔除。默认5s发送一次心跳。

服务同步:Nacos Server集群之间会互相同步服务实例,用来保证服务信息的一致性。 leader raft

服务发现:服务消费者(Nacos Client)在调用服务提供者的服务时,会发送一个REST请求给Nacos Server,获取上面注册的服务清单,并且缓存在Nacos Client本地,同时会在Nacos Client本地开启一个定时任务定时拉取服务端最新的注册表信息更新到本地缓存

服务健康检查:Nacos Server会开启一个定时任务用来检查注册服务实例的健康情况,对于超过15s没有收到客户端心跳的实例会将它的healthy属性置为false(客户端服务发现时不会发现),如果某个实例超过30秒没有收到心跳,直接剔除该实例(被剔除的实例如果恢复发送心跳则会重新注册)

4.流程解析

1、客户端启动时会将当前服务的信息包含ip、端口号、服务名、分组名、集群名等信息封装为一个Instance对象,准备向Nacos服务器注册服务,在注册服务之前,会根据Instance中的信息创建一个BeatInfo对象,然后创建一个定时任务,每隔一段时间向Nacos服务器发送PUT请求并携带相关信息,作为定时心跳连接,服务器端在接收到心跳请求后,会去检查当前服务列表中有没有该实例,如果没有的话将当前服务实例重新注册,注册完成后立即开启一个异步任务,更新客户端实例的最后心跳时间,如果当前实例是非健康状态则将其改为健康状态;
​ 2、心跳定时任务创建完成后,通过POST请求将当前服务实例信息注册进Nacos服务器,服务器端在接收到注册实例请求后,会将请求携带的数据封装为一个Instance对象,然后为这个服务实例创建一个服务Service,一个Service下可能有多个服务实例,服务在Nacos保存到一个ConcurrentHashMap中,格式为命名空间为key,value为map,分组名和服务名为内层map的key,value为服务数据,Map(namespace,Map(group::serviceName, Service))
​ 3、服务创建完成之后,开启一个定时任务(5s),检查当前服务中的各个实例是否在线,如果实例上次心跳时间大于15s就将其状态
设置为不健康,如果超出30s,则直接将该实例删除;
​ 4、然后将当前实例添加到对应服务列表中,这里会通过synchronized锁住当前服务,然后分两种情况向集群中添加实例,如果是持久化数据,则使用基于CP模式的简单Raft协议,通过leader节点将实例数据更新到内存和磁盘文件中,并且通过CountDownLatch实现了一个简单的raft写入数据的逻辑,必须集群半数以上节点写入成功才会给客户端返回成功;
​ 5、如果是非持久话实例数据,使用的是基于AP模式的Distro协议,首先向任务阻塞队列添加一个本地服务实例改变任务,去更新本地服务列表,然后在遍历集群中所有节点,分别创建数据同步任务放进阻塞队列异步进行集群数据同步,不保证集群节点数据同步完成即可返回;
​ 6、在将服务实例更新到服务注册表中时,为了防止并发读写冲突,采用的是写时复制的思想,将原注册表数据拷贝一份,添加完成之后再替换回真正的注册表,更新完成之后,通过发布服务变化事件,将服务变动通知给客户端,采用的是UDP通信,客户端接收到UDP消息后会返回一个ACK信号,如果一定时间内服务端没有收到ACK信号,还会尝试重发,当超出重发时间后就不在重发,虽然通过UDP通信不能保证消息的可靠抵达,但是由于Nacos客户端会开启定时任务,每隔一段时间更新客户端缓存的服务列表,通过定时轮询更新服务列表做兜底,所以不用担心数据不会更新的情况,这样既保证了实时性,又保证了数据更新的可靠性;
​ 7、服务发现:客户端通过定时任务定时从服务端拉取服务数据保存在本地缓存,服务端在发生心跳检测、服务列表变更或者健康状态
改变时会触发推送事件,在推送事件中会基于UDP通信将服务列表推送到客户端,同时开启定时任务,每隔10s定时推送数据到客户端。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

nacos注册中心面试总结 的相关文章

随机推荐

  • ZeroTier与Windows远程桌面实现远程控制 (转)(内网穿透)

    背景 Teamviewer虽然很好用速度也快 但是它是一款商业软件 时常会检测为商业用途而阻止个人免费使用 虽然网上也有一些修改ID的方法 还是各种破解版 但是均不尽如人意 于是想找找替代方案 经过尝试发现ZeroTier与Windows远
  • springMVC解决中文乱码几种方式,以及使用fastJSOn调整时间 的格式

    为什么 ResponseBody向前台传JSON输数据会有乱码 首先要知道乱码的原因是在入参之前就应经决定的 就是springMVC 中HandlerMapping会找到对应的handel 即具体去处理请求的方法 但是请注意 在真正调用处理
  • 三个短视频APP开发的成功秘诀免费发放

    无论海内外 中国的短视频已然走向了世界 成为世界了解中国的一种方式 甚至连Facebook都暗搓搓得准备 抄袭 抖音啃一块市场份额的蛋糕 更有无数的短视频APP开发者投入到这块市场中来 想要一战成名 这么 如何进行短视频开发 才能笑到最后呢
  • openwrt挂载tf卡,提示“unknown filesystem type 'vfat'”

    用命令挂载tf卡的时候报错 mount mnt mmcblk0p1 unknown filesystem type ext2 开始还以为是tf卡格式的问题 换了ext4和fat 仍然是这样 mount mnt mmcblk0p1 unkno
  • 在Qt中使用LoadLibrary无法加载DLL

    Qt系列文章目录 文章目录 Qt系列文章目录 前言 一 问题分析 前言 最近因项目需要使用qt做开发 之前使用LoadLibrary加载dll成功 很庆幸 当一切都那么顺风顺水的时候 测试同事却发现 在windows平台上个别电脑上加载dl
  • Python+xlwings操作Excel实战

    Excel是全世界最普及最强大的办公软件 应该没有之一 excel就相当于是一只老虎 python相当于是一双翅膀 两者结合将产生 如虎添翼 的效果 好了 不卖关子了 今天我们要跟大家说到的是excel xlwings xlwings是一个
  • 数据库架构演变过程

    背景 在互联网初创时期 企业往往采用单体架构去搭建自己的应用系统 但是 随着企业的不断壮大 系统访问量不断随之上升 数据量也急剧增长 数据的存储是首先要解决的问题 在这个大数据时代 数据就是企业的命根子 数据库的单体架构很难满足数据的存储
  • 未能加载基类“DevExpress.XtraEditors.XtraForm”。请确保已引用该程序集并已生成所有项目

    遇到上述问题 在网上查找了一下解决方案 在此记录 https www cnblogs com liyanwei p 4389396 html
  • JavaScript学习三 特殊对象

    数组 什么是数组 数组是一种特殊的对象 和普通对象功能相似都是用来存储值的 但是有一点不同 数组的属性名称为索引 index 从0开始 属性值称为值 数组的增删改查 创建数组 var a new Array 使用字面量 创建 var a1
  • 我给鸿星尔克写了一个720°看鞋展厅

    最近因为鸿星尔克给河南捐了5000万物资 真的是看哭了很多的网友 普通一家公司捐款5000万可能不会有这样的共情 但是看了鸿星尔克的背景之后 发现真的是令人心酸 鸿星尔克2020年的营收是28亿 但是利润却是亏损2个亿 甚至连微博的官方账号
  • 云服务器可以做虚拟主机吗,云服务器可以做虚拟主机吗

    云服务器可以做虚拟主机吗 内容精选 换一换 弹性公网IP申请成功后 将弹性公网IP绑定到弹性云服务器 裸金属服务器 虚拟IP 弹性负载均衡 NAT网关等资源上 可实现与公网的连接 绑定弹性云服务器 裸金属服务器 虚拟IP在 弹性公网IP 界
  • Linux下crontab命令的用法:sudo crontab -l

    cron 是linux系统下一个自动执行指定任务的程序 cron服务是linux的内置服务 但它不会开机自动启动 可以用以下命令启动和停止服务 Linux代码 sbin service crond start sbin service cr
  • android:inputType属性和setInputType()方法参数对应整理

    以密码类型 password 为例 android inputType属性
  • 服务器使用必备条件、操作步骤及实践步骤详解

    一 服务器使用必备条件 1 网络连接 服务器必须具备稳定的网络连接 以便与外部网络进行通信 这通常需要配置正确的网络接口和IP地址 2 硬件配置 服务器的硬件配置包括处理器 内存 存储和I O设备等 需要根据服务器的用途和需求选择合适的硬件
  • fabric1.0之cryptogen讲解

    一 工具定义 Cryptogen是hyperleder fabric提供的为网络实体生成加密材料 公私钥 证书等 的实用程序 简单来说就是一个生成认证证书 x509 certs 的工具 这些证书代表一个身份 并允许在网络实体间通信和交易时进
  • 下拉框控制当一个选中时另一个值随着变化且不可选

    推荐阅读 AI绘画关于SD MJ GPT SDXL百科全书 面试题分享点我直达 2023最新面试合集链接 2023大厂面试题PDF 面试题PDF版本 java python面试题 项目实战 AI文本 OCR识别最佳实践 AI Gamma一键
  • 常用的获取日期相关内容的方法

    1 格式化日期的方法 只返回日期 年 月 日 const formateDate val gt const date new Date val const year date getFullYear const month repairZe
  • pycharm利用快捷键,快速注释多行代码的方法分享

    最近在pycharm的新手学习群里 发现有些小伙伴依然在 手工 进行代码的注释 效率较低 下面分享pycharm利用快捷键 快速注释多行代码的方法 可以帮助pycharm初学者加倍提升代码的注释效率 代码注释快捷键 pycharm代码注释的
  • springboot动态数据源用shardingjdbc按时间分表

    1 背景 原有项目架构 springboot mybatis plus dynamic datasource 动态数据源 mybatis plus拓展 druid 连接池 根据业务数据不断增加 需要进行对业务量大的数据表行分表 因为以前的业
  • nacos注册中心面试总结

    1注册中心演变及其设计思想 2 Nacos注册中心架构 3 核心功能 服务注册 Nacos Client会通过发送REST请求的方式向Nacos Server注册自己的服务 提供自身的元数据 比如ip地址 端口等信息 Nacos Serve