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注册中心面试总结 的相关文章

  • 电商数据api拼多多接口获取商品实时数据价格比价api代码演示案例

    拼多多商品详情接口 接口接入入口 它的主要功能是允许卖家从自己的系统中快速获取商品详细信息 通过这个接口 卖家可以提取到商品的各类数据 包括但不限于商品标题 价格 优惠价 收藏数 下单人数 月销售量等 此外 还可以获取到商品的SKU图 详情
  • 利用CHAT上传文件的操作

    问CHAT autox js ui 上传框 CHAT回复 上传文件的操作如果是在应用界面中的话 由于Android对于文件权限的限制 你可能不能直接模拟点击选择文件 一般来说有两种常见的解决方案 一种是使用intent来模拟发送一个文件路径
  • 使用企业订货软件的担忧与考虑|网上APP订货系统

    使用企业订货软件的担忧与考虑 网上APP订货系统 网上订货系统担心出现的问题 1 如果在订货系统中定错 多 货物了该怎么办 其实这也是很多人在网购或者是现实中经常会犯的一个错误 但是网上订货平台为大家提供了很多的解决方案 其中对于订单的修改
  • SpringCloud Config分布式配置中心

    文章目录 代码地址 简介 与GitHub整合配置 项目整合 测试 Config客户端配置与测试 测试 Config客户端之动态刷新 测试
  • 引起原因:java.lang.IllegalArgumentException:模式不能为 null 或为空

    我正在使用 Spring Boot v2 5 2 开发 Spring Boot 微服务项目 Erorr org springframework beans factory BeanCreationException Error creati
  • spring cloud aws多个sqs监听器

    我的项目中有2个sqs监听器 我希望其中之一具有相同的设置 而其中之一具有不同的设置 我想要更改的唯一值是 maxNumberOfMessages 最实用的方法是什么 我想为其中一个侦听器设置不同的 maxNumberOfMessages
  • 使用 Spring Cloud 连接器访问 CloudFoundry 用户提供的服务

    我正在尝试使用 Spring Cloud 来使用 Cloud Foundry 应用程序中的通用 REST 服务 该服务是使用Spring Boot创建的 如下 package com something RestController pub
  • 为什么将 Spring Cloud 应用程序与 AWS Parameter Store 集成不会从参数存储中返回任何属性?

    Intent 我正在开发一个 POC 打算使用 AWS 参数存储作为属性存储 这会将机密应用程序属性存储在 AWS SSM 的参数存储中 我正在使用 Java 8 和 spring boot cloud 版本 2 Resource 我跟着本
  • 使用 Spring Boot 和 Netflix Zuul 的简单反向代理

    我正在寻找使用 Spring Boot 实现一个简单的反向代理 即 轻松添加路线 能够在每个路由的基础上添加自定义身份验证 根据需要添加其他标头 我查看了提供的设施 EnableZuulProxy注释 但它似乎太重量级了 因为我不想使用 E
  • 自定义Zuul异常

    我在 Zuul 中有一个场景 其中 URL 路由的服务也可能已关闭 因此 响应正文会在 JSON 正文响应中抛出 500 HTTP Status 和 ZuulException timestamp 1459973637928 status
  • Spring Cloud 配置服务器不刷新

    我正在设置一个 Spring 云服务器来读取内部 Stash 目录 服务器第一次加载 但如果我更新 git 中的属性 它们不会得到反映 直到我重新启动云服务器 我尝试 POST 到 refresh 端点 我使用的是 Windows 我看到一
  • 在随机端口上运行微服务时,Eureka 无法找到端口

    我在 Spring Boot 应用程序中使用 eureka 进行服务发现 使用功能区进行负载平衡 当我在修复端口上运行在 eureka 注册的微服务时 它工作正常 但是当我在随机端口上运行它们时 尽管我可以看到在 eureka 仪表板上注册
  • Zuul - Api 网关身份验证

    我想在几个服务前面通过Spring Cloud引入Zuul作为API网关 我对身份验证有一些设计疑问 身份验证将由 Spring Security 处理 它位于 servlet 过滤器链中的 Zuul 之前 我的顾虑 网关将位于许多服务的前
  • Turbine 仪表板未加载 Spring Cloud 微服务中的聚合

    我正在尝试使用 Spring MVC 和 Spring Boot 框架开发 Spring Cloud 微服务 以及用于 Spring Cloud 的 Eureka 服务器 Zuul Ribbon hystrix 和 Turbine 我已经开
  • Spring Cloud Docker - 配置服务器无法获取属性文件作为文件后端的使用

    我在获取全部内容时遇到问题特性文件来自配置服务器 in my 春季云示例 我已经和它一起工作过Docker 我只获取了 4 个属性文件 广告服务 用户服务 API网关 报表服务 而其他属性文件 eureka服务器和管理服务 无法从配置服务器
  • 带有属性占位符的 Spring Cloud AWS SQS SendTo 注释

    这个问题 https github com spring cloud spring cloud aws issues 65建议 SendTo 注释支持属性占位符 但我无法让它工作 这是我想要做的一些简化的代码片段 比尝试用文字解释更容易 我
  • 使用 feign 相对于 RestTemplate 有何优缺点

    我知道 Feign 是声明性的 因此它为开发人员抽象出了很多东西 但是 什么时候应该选择其中一种而不是另一种呢 虽然 feign 是声明性的 但它与 oAuth 存在严重问题 使用 RestTemplate 而非 Feign 有哪些注意事项
  • Zuul -> Eureka Server,基本身份验证问题

    如果流程不包含基本授权 我就可以访问该服务 如果我使用基本授权 它会抛出 消息 访问此资源需要完全身份验证 以下是我的观察 在 ZuulFilter 的 run 方法中 我得到了值 request getHeader 授权 gt 基本 c2
  • 在 Spring 云中保护 Eureka

    我很好奇有哪些选项可以保护连接 注册和获取迪斯科信息 到尤里卡的服务 显然我想在 Eureka 中打开安全性并指定服务的用户名密码 我的一个问题是尝试连接到尤里卡的服务如何指定其凭据 是通过区域的规范吗 这个引用的格式是什么 我实际上是上述
  • 从 Brixton.RC1 开始的 ZuulProxy 未传递授权标头

    从 Spring Cloud 切换时Brixton M5 to Brixton RC1我的 ZuulProxy 不再通过Authorization标头下游到我的代理服务 我的设置中有各种各样的角色 但大多数都相当简单 Authorizati

随机推荐

  • 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