SpringCloud Alibaba nacos如何分配健康检查模式

问题背景

同一服务的不同实例,在nacos的健康检查模式不一致。

知识储备

nacos提供两种健康检查模式

agent上报模式

客户端(注册在nacos上的其它微服务实例)健康检查。
客户端通过心跳上报方式告知服务端(nacos注册中心)健康状态,
默认心跳间隔5秒,
nacos会在超过15秒未收到心跳后将实例设置为不健康状态,
超过30秒将实例删除。

服务端主动检测

服务端健康检查。
nacos主动探知客户端健康状态,默认间隔为20秒,
健康检查失败后实例会被标记为不健康,不会被立即删除。

临时实例

临时实例通过agent上报模式实现健康检查。
微服务注册为临时实例:

# 默认false
spring:
	cloud:
		nacos:
			discovery:
				ephemeral: true

环境配置信息

服务器123

部署有单实例的nacos、端口为4000的微服务,注册到本机nacos

系统:Centos7
IP:***.***.1.123

服务器105

部署端口为4000的微服务,注册到123上nacos

系统:Centos7
IP:***.***.1.105

本地电脑181

部署端口为4000的微服务,注册到123上nacos

系统:Windows
IP:***.***.1.181

4000服务各实例均未在配置文件中设置为临时实例

问题:

4000服务多个实例的健康检查模式不一致

通过抓包得到的信息:
抓包过程见:记一次Centos7 tcpdump抓包实例

123上4000服务实例为服务端健康检查

在这里插入图片描述

105和181上4000服务实例为客户端健康检查

在这里插入图片描述

推测

与nacos部署在同一台服务器的客户端微服务实例,
健康检查模式为服务端检查,非同一服务器为客户端健康检查。

可能是因为在有些情况下,nacos无法访问到客户端微服务,
所以不在同一服务器部署的客户端实例通过心跳上报健康状态。

例如:
nacos部署在阿里云公网服务器,某客户端实例部署在公司内网服务器,
这种情况nacos是访问不到微服务实例的,所以只能采用客户端健康检查。

当然,这样的话该实例只能给内网中的其它实例提供服务。

如果推测有不正确的地方,欢迎指正。

参考文章:

NacosNacos文档
朱鹏飞Nacos注册中心的设计原理详解
weixin_42073629Nacos —— 如何做健康检查
陈清河nacos中临时实例和持久化实例有什么区别?
策码狂奔Nacos CP/AP模式切换及微服务临时/永久实例配置

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值