13_深入Nacos服务注册中心的内核原理

深入Nacos服务注册中心的内核原理

Nacos架构原理.png

Nacos client

nacos本身的话,其实是完全可以脱离spring cloud自己独立运作的,但是他目前是集成到spring cloud alibaba里去的,【spring cloud alibaba】也就是在spring cloud的标准之下实现了一些东西,spring cloud自己是有一个接口,叫做ServiceRegistry,也就是服务注册中心的概念

他是一个接口,nacos是实现了一个实现类的,也就是NacosServiceRegistry,实现了register、deregister、close、setStatus、getStatus之类的方法

自动装配是一个spring boot的一个概念,如果大家不理解的话,可以自行搜索一些资料去查阅,用最最简单的话来说,自动装配的意思,其实就是说系统启动的时候,自动装配机制会运行,实现一些系统的初始化、自动做一些事儿

比如说spring cloud alibaba,假设用dubbo开发服务,本质上是有一个自动装配类的,这个自动装配类会监听spring的ApplicationStartedEvent这个事件,其实简单理解就是服务启动的时候通过spring的一些动作,监听到某个事件就自动运行了

自动运行,就是去调用NacosServiceRegistry的register方法去进行服务注册

而且除了注册之外,还会通过schedule线程池去提交一个定时调度任务,源码如下:

this.exeutorService.schedule(new BeatReactor.BeatTask(beatInfo), beatInfo.getPeriod(), TimeUnit.MILLISECONDS),这就是一个心跳机制,定时发送心跳给nacos server

接着会进行注册,注册的话是访问nacos server的open api,其实就是http接口,他有一个接口:http://31.208.59.24:8848/nacos/v1/ns/instance?serviceName=xx&ip=xx&port=xx,这么一个东西,也没什么特别的,这里就是访问注册接口罢了


Nacos server

nacos server那里是基于一个ConcurrentHashMap作为注册表来放服务信息的,直接会构造一个Service放到map里,然后对Service去add Instance,添加一个实例,【里面包含了ip和端口等】本质里面就是在维护信息,同时还会建立定时检查实例心跳的机制

最后还会基于一致性协议,比如说raft协议,去把注册同步给其他节点

【raft和ZAB协议类似,也有Leader和Follower】

服务发现的本质其实也是一个http接口【调用open api的接口】,就是:http://31.208.59.24:8848/nacos/v1/ns/instance/list?serviceName=xx
就这么一个接口,其实也没特别的东西,然后就会启动定时任务,每隔10s拉取一次最新的实例列表,然后服务端还会监听他监听服务的状态,有异常就会基于UDP协议反向通知客户端这次服务异常变动

posted @ 2021-02-26 15:57  Aokigahara  阅读(1268)  评论(0编辑  收藏  举报