学习不用那么功利,二师兄带你从更高维度轻松阅读源码~

本篇文章Nacos核心逻辑篇,给大家讲解一下「临时实例」与「持久化实例」的区别及运用场景。

Nacos的临时实例与持久化实例

在Nacos Client进行实例注册时,我们知道是通过Instance对象来携带实例的基本信息的。在Instance中有一个ephemeral字段,用来表示该实例是临时实例,还是持久化实例。

public class Instance implements Serializable {/*** If instance is ephemeral.** @since 1.0.0*/private boolean ephemeral = true;// 省略其他
}

从源码可以看出ephemeral字段是1.0.0版本新增的,用来表示注册的实例是否是临时实例还是持久化实例。

目前,无论是Nacos 1.x版本,还是2.x版本,ephemeral的默认值都是true。在1.x版本中服务注册默认采用http协议,2.x版本默认采用grpc协议,但这都未影响到ephemeral字段的默认值。

也就是说,一直以来,Nacos实例默认都是以临时实例的形式进行注册的。

当然,也是可以通过application的配置来改变这里默认值的。比如:

# false为永久实例,true表示临时实例
spring.cloud.nacos.discovery.ephemeral=false

上面是基于Spring Cloud进行配置,false为永久实例,true表示临时实例,默认为true。

临时实例与持久化实例的区别

临时实例与持久化实例的区别主要体现在服务器对该实例的处理上。

临时实例向Nacos注册,Nacos不会对其进行持久化存储,只能通过心跳方式保活。默认模式是:客户端心跳上报Nacos实例健康状态,默认间隔5秒,Nacos在15秒内未收到该实例的心跳,则会设置为不健康状态,超过30秒则将实例删除。

持久化实例向Nacos注册,Nacos会对其进行持久化处理。当该实例不存在时,Nacos只会将其健康状态设置为不健康,但并不会对将其从服务端删除。

另外,可以使用实例的ephemeral来判断健康检查模式,ephemeral为true对应的是client模式(客户端心跳),为false对应的是server模式(服务端检查)。

为什么要设计两种模式?

上面说了两种模式的不同和处理上的区别,那么Nacos为什么设计两种模式,它们是为了应对什么样的场景而存在呢?

对于临时实例,健康检查失败,则直接可以从列表中删除。这种特性就比较适合那些需要应对流量突增的场景,服务可以进行弹性扩容。当流量过去之后,服务停掉即可自动注销了。

对于持久化实例,健康检查失败,会被标记成不健康状态。它的好处是运维可以实时看到实例的健康状态,便于后续的警告、扩容等一些列措施。

除了上述场景之外,持久化实例还有另外一个场景用的到,那就是保护阈值。

Nacos的保护阈值

关于保护阈值,在前面的文章中专门写到过。

Nacos中可以针对具体的实例设置一个保护阈值,值为0-1之间的浮点类型。本质上,保护阈值是⼀个⽐例值(当前服务健康实例数/当前服务总实例数)。

⼀般情况下,服务消费者要从Nacos获取可⽤实例有健康/不健康状态之分。Nacos在返回实例时,只会返回健康实例。

但在⾼并发、⼤流量场景会存在⼀定的问题。比如,服务A有100个实例,98个实例都处于不健康状态,如果Nacos只返回这两个健康实例的话。流量洪峰的到来可能会直接打垮这两个服务,进一步产生雪崩效应。

保护阈值存在的意义在于当服务A健康实例数/总实例数 < 保护阈值时,说明健康的实例不多了,保护阈值会被触发(状态true)。

Nacos会把该服务所有的实例信息(健康的+不健康的)全部提供给消费者,消费者可能访问到不健康的实例,请求失败,但这样也⽐造成雪崩要好。牺牲了⼀些请求,保证了整个系统的可⽤。

这里我们看到了不健康实例的另外一个作用:防止产生雪崩。

那么,如果所有的实例都是临时实例,当雪崩场景发生时,Nacos的阈值保护机制是不是就没有足够的(包含不健康实例)实例返回了?如果有一部分实例是持久化实例,即便它们已经挂掉,状态为不健康的,但当触发阈值保护时,还是可以起到分流的作用。

小结

关于Nacos临时实例与持久化实例就聊这么多了。如果想更深入了解,其实可以读一下源码。由于基于gRPC的实现过于复杂,可读性不够强,如果想阅读,建议阅读基于Http的实现。

如果文章内容有问题或想技术讨论请联系我(微信:zhuan2quan,备注Nacos),如果觉得写的还不错,值得一起学习,那就关注一下吧。

博主简介:《SpringBoot技术内幕》技术图书作者,酷爱钻研技术,写技术干货文章。

公众号:「程序新视界」,博主的公众号,欢迎关注~

技术交流:请联系博主微信号:zhuan2quan


程序新视界
公众号“ 程序新视界”,一个让你软实力、硬技术同步提升的平台,提供海量资料

《跟二师兄学Nacos》02篇 Nacos的临时与持久化实例,傻傻分不清?相关推荐

  1. 《跟二师兄学Nacos吧》EXT-01篇 看看Nacos是怎么活学活用简单工厂模式的!

    学习不用那么功利,二师兄带你一起轻松读源码- 番外篇简介 Nacos源码分析系列文章,在开篇已经提到过,写作的目标有两个:第一,能够系统的学习Nacos知识:第二,能够基于Nacos学到涉及到的知识点 ...

  2. 《跟二师兄学Nacos吧》第1篇 Nacos客户端服务注册源码分析

    开篇构想 在此之前,已经写了十多篇Nacos的文章,感觉Nacos还值得更深入的学习一下.于是萌生了写一个Nacos源码系列专栏的文章. 写作的目标呢,有两个:第一,能够系统的学习Nacos知识:第二 ...

  3. 06篇 Nacos Client本地缓存及故障转移

    学习不用那么功利,二师兄带你从更高维度轻松阅读源码- 本篇文章我们来通过源码分析一下Nacos的本地缓存及故障转移功能,涉及到核心类为ServiceInfoHolder和FailoverReactor ...

  4. SpringCloud高级篇 - Nacos

    SpringCloud高级篇 – Nacos 文章目录 SpringCloud高级篇 -- Nacos @[toc] 一.SpringCloud Alibaba入门简介 1.1 为什么会出现? 1.2 ...

  5. 【Python】趣学Python变量和赋值:大师兄和二师兄教的好~

    公众号:尤而小屋 作者:Peter 编辑:Peter 今天给大家带来的是一篇关于Python变量与赋值的文章.其实Python中的赋值语句我们在之前的学习过程已经接触了很多,比如a=1,就是将数值1赋 ...

  6. 学微服务必经之路——Nacos新手入门(上)

    学微服务必经之路--Nacos新手入门(上) 1.什么是配置中心 1.1 什么是配置 1.2 什么是配置中心 2. Nacos 2.1 主流配置中心对比 2.2 Nacos特性 3.Nacos快速入门 ...

  7. 学微服务必经之路——Nacos新手入门(下)

    一位爱好技术的橘右京的哥哥橘左京 学微服务必经之路--Nacos新手入门(下) 1.服务发现 1.1 什么是服务发现 1.2 主流服务发现与配置中心对比 1.3 SpringCloud服务协作流程 1 ...

  8. Nacos(第一篇)_Springboot2.x+Nacos配置管理中心

    前言 在开发过程中,我们通常会配置一些参数来实现某些功能,如:开启某些服务,邮箱通知,短信通知等:一般在这个时候,我们都是通过硬编码来实现.配置文件或数据库实现. Nacos 配置管理 Nacos 是 ...

  9. 2022黑马Redis跟学笔记.实战篇(二)

    2022黑马Redis跟学笔记.实战篇 二 实战篇Redis 开篇导读 4.1短信登录 4.1.1. 搭建黑马点评项目 一.导入黑马点评项目 二.导入SQL 三.有关当前模型 四.导入后端项目 相关依 ...

最新文章

  1. Eureka与zookeeper
  2. IEDA快速书写代码快捷键
  3. Linux SVN一次增加多个文件并批量上传
  4. 算法偏见是什么_算法可能会使任何人(包括您)有偏见
  5. 大数据的相关性和因果性
  6. ssh 执行多条命令包含awk的用法
  7. auc 和loss_精确率、召回率、F1 值、ROC、AUC 各自的优缺点是什么?
  8. 少年派的一生,树莓派的十年,Raspberry Pi上市十周年
  9. linux命令mount是什么,Linux命令——mount、umount
  10. ftp连接显示被服务器被拒绝,ftp连接服务器被拒绝原因
  11. 念念英文音标学习笔记
  12. 三点式女青年和免费的笔记本电脑
  13. android极光推送问题,Android 极光推送问题
  14. 查看支付宝所有交易记录方法
  15. 一键安装与配置gitlab(脚本)
  16. 系统cpu主频查看设置
  17. 华为发布业界首款5G基站芯片:天罡
  18. 怀孕之前营养要充分预备
  19. php在线考试系统 附源码(一)
  20. 小汪汪服务器不稳定,小汪汪登陆不上问题解决办法 游戏进不去怎么解决

热门文章

  1. Linux安装搜狗输入法(for ubuntu)
  2. JellyBean CTS Android.holo Failed问题解决
  3. Nvme-MI 协议理解-overview
  4. 运营商大数据:什么是人群画像分析?如何做到精准获客?
  5. 877131-21-0,4-溴-2-乙基苯甲醇,(4-bromo-2-ethylphenyl)methanol的化学表征
  6. 2006下学期的个人总结
  7. 变压器组别---jinn 整理
  8. 开发基于SpringBoot和BootStrap的全栈论坛网站(一):准备阶段
  9. Android TextView循环滚动弹幕效果
  10. Volley简单分析