Nacos源码结构和AP模式注册中心实现介绍

简介: Nacos源码结构和AP模式注册中心实现介绍

一、前言


NacosAP模式源码分析目录


二、Nacos源码结构介绍


Nacos版本基于1.4.0版本,整体的项目结构如下:

看到目录,第一眼的感觉就是职责分明,给人的感觉就是高手,关于源码部分我也没全看完,目前只是注册中心相关看完了,配置中心的就是略微看了一下,我先给大家介绍下重点的模块的作用的,到时候大家再结合上面几篇文章去理解源码:

  1. address模块: 主要查询nacos集群中节点个数以及IP的列表;
  2. api模块: 主要给客户端调用的api接口的抽象;
  3. client模块: 主要是对依赖api模块和common模块,对api的接口的实现,给nacos的客户端使用;
  4. cmdb模块: 主要是操作的数据的存储在内存中,该模块提供一个查询数据标签的接口;
  5. config模块: 主要是服务配置的管理, 提供api给客户端拉去配置信息,以及提供更新配置 的,客户端通过长轮询的更新配置信息.数据存储是Mysql;
  6. naming模块: 主要是作为服务注册中心的实现模块,具备服务的注册和服务发现的功能;
  7. console模块: 主要是实现与前端进行交互.具有权限校验、服务状态、健康检查等功能;
  8. core模块: 主要初始化属性加载,监听器相关内容,用于加载nacos的default的配置信息,config和naming都依赖于这个包;

我觉得上面8个模块相对来说是比较重要,对于大家研究Nacos源码是必须要掌握的,关系间的依赖如下:

模块之间的调用关系如下:

看到调用关系就可以感觉出来,整体上源码不算太难,耐心看看还是可以看懂的。

三、Nacos AP模式源码核心部分介绍

心部分介绍

服务注册

Nacos Client通过/nacos/v1/ns/instance接口将服务信息(包括服务的名称、IP、端口、状态等信息)注册到Nacos Server的注册表中,存放于类ServiceManager的内部对象Map<String, Map<String, Service>> serviceMap,这是一个两层Map的嵌套结构,第一层的Key是Namesapce名称,第二层的Key是Group名称和Service名称的组合,第二层的Value是Service的对象。

服务心跳

用户服务和订单服务注册后,每个客户端会通过定时任务来维持一个定时心跳来持续通知Nacos Server,默认 5s发送一次心跳;

服务健康检查

Nacos Server通过定时任务检查注册服务实例的健康状况,对于超过15s没有收到客户端心跳的实例会将它的 healthy属性置为false(客户端服务发现时不会发现),如果某个实例超过30秒没有收到心跳,直接剔除该实例(被剔除的实例如果恢复发送 心跳则会重新注册);

服务同步

服务同步我觉得主要分为两方面同步,一是Nacos Server集群之间的同步,会过/nacos/v1/ns/instance/distro/datum互相同步服务实例的信息,二是服务的消费者同步变更新到客户端,服务消费者(Nacos Client)会接收服务端的UDP推送过来的服务变更信息(检测到不正常的服务的时候服务发生变更),及时更新到本地缓存中,这是Nacos的亮点和其他注册中心不一样的地方,面试的时候可以和面试官聊,会让面试官眼前一亮的,因为UDP本身是不可靠的,不能保证所有的变更信息都可以同步到客户端,所以消费者还有一个定时任务的兜底机制;


四、谈谈收获


看完这部分源码收获我觉得主要有两方面的收获:

技术方面

技术方面的收获的是最多的,这里简单聊几个例子:

  1. 从整体的框架的设计,还是到模块中类实现的设计,单一原则体现的淋淋尽致,下图是整体框架设计,体现到代码上就是每个模块职责很清晰,依赖关系很明确,另外框架层面的做的插件化的思想、高可用的思想,都是我们可以借鉴学习的;
  2. 很多技术细节的实现很精妙,比如服务变更时候的异步队列的设计、CopyOnWrite的思想、Spring事件机制的应用等等,这些都在我的博客中源码分析的细节中讲到,大家可以稍微花一些功夫看看;
写作方面

这部分其实还没形成一个完整的思想,只是初步的一个思考,关于这种源码分析的,以后会采用以下方式:

  1. 框架选型的思考, 分析类似中间件对比;
  2. 框架搭建和使用介绍;
  3. 源码代码模块介绍和框架模块功能性的描述,类似就是做一个整体功能介绍;
  4. 每个模块功能源码的分析,附带时序图和类图关系,后面我会对Nacos系列的文章的内容进行一个改造;
  5. 完成每个模块的介绍以后会统一做代码的整体关键步骤的源码分析图和总结;

结束

相关文章
|
1月前
|
存储 运维 监控
NACOS 配置中心和注册中心是分两个集群部署还是放在一个集群中
【2月更文挑战第33天】NACOS 配置中心和注册中心是分两个集群部署还是放在一个集群中
76 2
|
1月前
|
弹性计算 网络协议 IDE
Nacos报错问题之集群开启鉴权无法注册如何解决
Nacos是一个开源的、易于部署的动态服务发现、配置管理和服务管理平台,旨在帮助微服务架构下的应用进行快速配置更新和服务治理;在实际运用中,用户可能会遇到各种报错,本合集将常见的Nacos报错问题进行归纳和解答,以便使用者能够快速定位和解决这些问题。
|
1月前
|
Java 数据库连接 Nacos
nacos常见问题之Nacos2.0.3集群模式启动报错如何解决
Nacos是阿里云开源的服务发现和配置管理平台,用于构建动态微服务应用架构;本汇总针对Nacos在实际应用中用户常遇到的问题进行了归纳和解答,旨在帮助开发者和运维人员高效解决使用Nacos时的各类疑难杂症。
|
1月前
|
SpringCloudAlibaba 负载均衡 Java
【一】SpringCloud Alibaba之Nacos整合篇(作为注册中心)
【一】SpringCloud Alibaba之Nacos整合篇(作为注册中心)
248 1
【一】SpringCloud Alibaba之Nacos整合篇(作为注册中心)
|
1月前
|
Java 网络安全 Nacos
nacos注册不上刷这个错,有解决方案吗?
【2月更文挑战第30天】nacos注册不上刷这个错,有解决方案吗? springboot项目,瘦身打包后,用java -jar 外置依赖和外置配置文件启动的时候,nacos注册不上刷这个错,有解决方案吗? com.alibaba.nacos.api.exception.NacosException: Client not connected, current status:STARTING
89 1
|
1月前
|
缓存 Java Nacos
nacos常见问题之无法注册如何解决
Nacos是阿里云开源的服务发现和配置管理平台,用于构建动态微服务应用架构;本汇总针对Nacos在实际应用中用户常遇到的问题进行了归纳和解答,旨在帮助开发者和运维人员高效解决使用Nacos时的各类疑难杂症。
295 6
|
15天前
|
Dubbo Java 应用服务中间件
深度剖析:Dubbo使用Nacos注册中心的坑
2020年笔者在做微服务部件升级时,Dubbo的注册中心从Zookeeper切换到Nacos碰到个问题,最近刷Github又有网友提到类似的问题,就在这篇文章里做个梳理和总结。
深度剖析:Dubbo使用Nacos注册中心的坑
|
16天前
|
SpringCloudAlibaba Java Nacos
SpringCloud Alibaba微服务 -- Nacos使用以及注册中心和配置中心的应用(保姆级)
SpringCloud Alibaba微服务 -- Nacos使用以及注册中心和配置中心的应用(保姆级)
|
30天前
|
运维 Kubernetes Nacos
nacos常见问题之服务注册IP白名单如何解决
Nacos是阿里云开源的服务发现和配置管理平台,用于构建动态微服务应用架构;本汇总针对Nacos在实际应用中用户常遇到的问题进行了归纳和解答,旨在帮助开发者和运维人员高效解决使用Nacos时的各类疑难杂症。
25 0
|
30天前
|
安全 前端开发 Nacos
nacos常见问题之配置注册的白名单如何解决
Nacos是阿里云开源的服务发现和配置管理平台,用于构建动态微服务应用架构;本汇总针对Nacos在实际应用中用户常遇到的问题进行了归纳和解答,旨在帮助开发者和运维人员高效解决使用Nacos时的各类疑难杂症。
90 0