Spring Cloud Alibaba - Nacos理论面试总结-未完结

ops/2025/1/15 21:10:00/

临时实例和永久实例

临时实例和永久实例在 Nacos 中是一个非常非常重要的概念

之所以说它重要,主要是因为我在读源码的时候发现,临时实例和永久实例在底层的许多实现机制是完全不同的

临时实例

临时实例在注册到注册中心之后仅仅只保存在服务端内部一个缓存中,不会持久化到磁盘

这个服务端内部的缓存在注册中心届一般被称为服务注册表

当服务实例出现异常或者下线之后,就会把这个服务实例从服务注册表中剔除

永久实例

永久服务实例不仅仅会存在服务注册表中,同时也会被持久化到磁盘文件中

当服务实例出现异常或者下线,Nacos 只会将服务实例的健康状态设置为不健康,并不会对将其从服务注册表中剔除

所以这个服务实例的信息你还是可以从注册中心看到,只不过处于不健康状态

为什么 Nacos 要将服务实例分为临时实例和永久实例?

临时实例就比较适合于业务服务,服务下线之后可以不需要在注册中心中查看到
永久实例就比较适合需要运维的服务,这种服务几乎是永久存在的,比如说 MySQL、Redis 等等

当然如果你想改成永久实例,可以通过下面这个配置项来完成

spring  cloud:   nacos:    discovery:      #ephemeral单词是临时的意思,设置成false,就是永久实例了   ephemeral: false

在 1.x 版本中,一个服务中可以既有临时实例也有永久实例,服务实例是永久还是临时是由服务实例本身决定的

但是 2.x 版本中,一个服务中的所有实例要么都是临时的要么都是永久的,是由服务决定的,而不是具体的服务实例

所以在 2.x 可以说是临时服务和永久服务
在这里插入图片描述

为什么 2.x 把临时还是永久的属性由实例本身决定改成了由服务决定?

其实很简单,你想想,假设对一个 MySQL 服务来说,它的每个服务实例肯定都是永久的,不会出现一些是永久的,一些是临时的情况吧

所以临时还是永久的属性由服务本身决定其实就更加合理了

服务注册

1.x 版本的实现
在 Nacos 在 1.x 版本的时候,服务注册是通过 Http 接口实现的

在这里插入图片描述
2.x 版本的实现
Nacos 客户端在启动的时候,会通过 gRPC 跟服务端建立长连接

在这里插入图片描述

这个连接会一直存在,之后客户端与服务端所有的通信都是基于这个长连接来的

当客户端发起注册的时候,就会通过这个长连接,将服务实例的信息发送给服务端

服务端拿到服务实例,跟 1.x 一样,也会存到服务注册表

除了注册之外,当注册的是临时实例时,2.x 还会将服务实例信息存储到客户端中的一个缓存中,供 Redo 操作

所谓的 Redo 操作,其实就是一个补偿机制,本质是个定时任务,默认每 3s 执行一次

这个定时任务作用是,当客户端与服务端重新建立连接时(因为一些异常原因导致连接断开)

那么之前注册的服务实例肯定还要继续注册服务端(断开连接服务实例就会被剔除服务注册表)

所以这个 Redo 操作一个很重要的作用就是重连之后的重新注册的作用


http://www.ppmy.cn/ops/150028.html

相关文章

vue3项目大屏适配方案(scale)及vue-tv-focusable库使用

一. 适配方案代码(scale) 公共代码 export const useAdjustScale () > {// * 指向最外层容器const pageRef ref();// * 默认缩放值const scale {width: 1,height: 1,};// * 需保持的比例(默认1.77778) const designWidth 1920 const designHeig…

4Hive计算引擎

4Hive计算引擎 1 MR计算引擎2 Tez计算引擎3 Spark计算引擎 目前Hive支持MapReduce、Tez和Spark 三种计算引擎。 1 MR计算引擎 MR运行的完整过程: Map在读取数据时,先将数据拆分成若干数据,并读取到Map方法中被处理。数据在输出的时候&#…

fast-crud select下拉框 实现多选功能及下拉框数据动态获取(通过接口获取)

教程 fast-crud select示例配置需求:需求比较复杂 1. 下拉框选项需要通过后端接口获取 2. 实现多选功能 由于这个前端框架使用逻辑比较复杂我也是第一次使用,所以只记录核心问题 环境:vue3,typescript,fast-crud ,elementPlus 效果 代码 // crud.tsx文件(/.ts也行 js应…

基于单片机的书写坐姿规范提醒器的设计(论文+源码)

1功能设计 本课题为基于单片机的书写坐姿规范提醒器的设计,其主要针对学生在进行书写时,经常会出现坐姿不对等现象,这样长期下去会影响学生的身体健康,因此本系统在功能上设计如下: 采用超声波传感器检测坐姿&#x…

如何解决Webview和H5缓存问题,确保每次加载最新版本的资源

WebView 用于加载 H5 页面是常见的做法,它能够加载远程的 HTML、CSS、JavaScript 资源,并且让 Web 应用嵌入到原生 App 中。然而,WebView 的缓存机制有时会导致用户看到的是旧版本的页面或资源,尤其是在 H5 发版后,iOS…

Vite源码学习分享(一)

!](https://i-blog.csdnimg.cn/direct/971c35b61c57402b95be91d2b4965d85.png) 同一个项目 vite VS webpack启动速度对比

如何定位导致 Django 错误的文件

在 Django 开发中,当发生错误时,定位问题所在的文件和代码行是调试的重要步骤。以下是一些常用的方法和技巧来定位导致 Django 错误的文件: 1、问题背景 在项目中使用了 shrink 工具尝试运行 collect static 时,出现 TemplateSyn…

checkbox控制table中checkbox列全选和全不选|判断table多选的选中项目

①checkbox控制table中checkbox列全选和全不选 <table class"layui-table" id"table"><tr><td><input type"checkbox" id"ckb" onchange"ckb_change()" /></td><td>任务ID</td>&…