Edehuag

导航

Nacos之健康检测

Nacos 服务-领域模型

在Nacos Server 中,服务和配置是一等公民,而在Server侧服务信息的存储采用的是分级存储模型

服务(一组功能集的抽象):namespace,group,serviceName 标识一个服务
实例:服务在具体IP,端口上的提供者应用启动时的注册就是注册某个服务的实例
集群:服务之下,实例之上的中间层,便于统一管理实例集(默认是DEFAULT)

Nacos中的临时实例和持久实例

临时实例:nacos server在该实例健康检查失败一定时间后会主动摘除它,且实例数据不持久化(存在内存中)
持久实例:实例数据持久化,nacos server在该实例健康检查失败后并不摘除该实例,除非客户端主动销毁

  • nacos默认的实例类型是临时实例,可以更改

  • 临时实例的应用场景大多都是上层的服务,比如:SpringCloud服务,dubbo服务等

  • 持久实例的应用场景是一些基础的组件,例如数据库,缓存等【想以服务的形式对外提供】

  • 临时实例和持久实例在健康检查上的方式不一样:临时实例使用客户端上报模式【心跳】,持久化实例使用服务端反向探测模式
    nacos的健康检查机制不能主动配置,它是和实例类型强相关的

Nacos健康检查机制

1.临时实例:客户端5s一次上报心跳,服务端15s收不到心跳标记实例不健康,30s收不到心跳则摘除实例
2.持久实例:服务端可以通过TCP端口探测,HTTP接口返回码探测、MYSQL探测三种方式进行

  • HTTP接口返回码探测:需要在实例侧提供探测url这两种探测方式因为其协议的通用性可以支持绝大多数的健康检查场景
  • MYSQL协议探测:MySQL主要用于特殊的业务场景,例如数据库的主备需要通过服务名对外提供访问,需要确定当前访问数据库是否为主库时,那么我们此时的健康检查接口,是一个检查数据库是否为主库的 MySQL命令

Nacos健康检查机制-集群


对于临时实例:
1、客户端只需要和注册中心集群中的任意一台节点建立联系即可,由这个节点负责这个客户端
2、注册中心会在启动时注册一个全局同步任务,用于将其当前负责的所有实例信息同步到集群中的其他节点
3、在非负责的节点上,会有一个续约时间的概念,在收到其他节点的同步信息时,更新续约时间为当前时间,如果在集群中的其他节点在一段时间内没有收到不是自己的负责的节点的同步信息,那么认为此节点已经不健康,从而达到对不是自己负责的节点健康状态检查
对于持久实例:
对于持久实例健康探测的结果无需同步给其他节点,永久实例会在被主动删除前一直存在于注册中心,那么我们健康检查并不会去删除实例
只需要在负责的节点永久实例健康状态变更的时候通知到其他节点,其他节点变更状态即可

posted on 2024-12-10 19:40  饿得慌~  阅读(16)  评论(0编辑  收藏  举报