nacos服务注册与发现

Nacos-Client服务注册  https://blog.csdn.net/CSDN877425287/article/details/122281847

Nacos-服务端服务注册 https://blog.csdn.net/CSDN877425287/article/details/122311315

Nacos-服务发现  https://blog.csdn.net/CSDN877425287/article/details/122321515

server主动push                UDP协议

client轮询,每隔10s          Http协议

数据一致性协议:包含distro(AP)和raft(CP)协议,任意一节点数据变化,通过http接口异步通知 

客户端可通过ephemeral来指定,dubbo默认使用的是true,使用distro协议

0 dubbo的原理图(图不错)


1 Service对象数据结构

ehemeralInstances:   临时实例列表,dubbo默认是这个, 一致性协议使用distro

persistentInstances:   持久化实例列表, 一致性协议使用raft

重点:所有service维护在一个serviceMap中,不同的nacos server数据都一样,都有心跳检查任务(只是hash分片,执行对应的service心跳检查任务)

2 naming相关接口(InstanceController)

2.1 实例注册接口

POST /nacos/v1/ns/instance   Method: register

创建Service对象,包含ClientBeatCheckTask(实现Runable接口)对象 ,具体内容见上图

创建ClientBeatCheckTask对象对应的定时任务

更新本地缓存数据,并使用UDP协议通知订阅该服务的客户端(异步)

使用/nacos/v1/ns/distro/datum接口通知其他server节点(异步)

2.2 实例注销接口

DELETE /nacos/v1/ns/instance   Method: deregister

更新本地缓存数据,并使用UDP协议通知订阅该服务的客户端(异步)

使用/nacos/v1/ns/distro/datum接口通知其他server节点(异步)

2.3 实例心跳接口

PUT  /nacos/v1/ns/instance/beat   Method: beat

当服务不存在时,重新注册服务

更新服务实例的心跳时间(续期)

2.4 获取服务实例列表

GET /nacos/v1/ns/instance/list   Method: list

订阅该服务,同时上传udp的端口和客户端ip

获取服务实例列表(保护阈值该参数这里有处理)

3 不同的key有何区别

nacos server 通过判断key的值(是否以com.alibaba.nacos.maing.iplist.ephemneral为前缀)来判断走distro还是raft协议 

代理类: DelegateConsistencyServiceImpl

以注册到后台的service名字为:providers@com.myhexin.ifund.dubbo.interface.TestService为例

service_meta_key:   com.alibaba.nacos.naming.domain.meta.{namespace}##DEFAULT_GROUP@@providers:com.myhexin.ifund.dubbo.interface.TestService:1.0.0:group

临时服务实例key: com.alibaba.nacos.naming.iplist.ephemeral.{namespace}##DEFAULT_GROUP@@providers:com.myhexin.ifund.dubbo.interface.TestService:1.0.0:group

持久化服务实例key: com.alibaba.nacos.naming.iplist.{namespace}##DEFAULT_GROUP@@providers:com.myhexin.ifund.dubbo.interface.TestService:1.0.0:group

distro协议实现类:DistroConsistencyServiceImpl

 listeners

raft协议实现类:RaftConsistencyServiceImpl

  listeners

dubbo服务实例注册和注销接口 key为: serviceName

服务实例注册:

DistroConsistencyServiceImpl监听对应的临时服务实例key

RaftConsistencyServiceImpl监听对应的持久化服务实例key

因为dubbo的ephemeral值为true,通知其他节点使用的一致性协议为distro, 接口/nacos/v1/ns/distro/datum(见DistroConsistencyServiceImpl#put)

服务实例注销

跟服务实例注册一样,调用的是DistroConsistencyServiceImpl#put

nacos后台服务列表删除服务功能和定时任务检查服务实例为空,都是调用 ServiceManager#easyRemoveService

删除服务key: service_meta_key   "com.alibaba.nacos.naming.domain.meta.{namespace}##DEFAULT_GROUP@@providers:com.myhexin.ifund.dubbo.interface.TestService:1.0.0:group"

发表评论 / Comment

用心评论~