Nacos源码解析

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nacos源码解析相关的知识,希望对你有一定的参考价值。

参考技术A

Nacos服务注册表结构:Map<namespace, Map<group::serviceName, Service>>

举例说明:

1. 查看spring.factories文件中帮我们自动装配的类

2.查看自动装配的类

3.NacosAutoServiceRegistration里的调用链路

--

添加到队列里

调用链路

为Cluster类的成员变量

run()方法什么时候触发?
可以看到,使用了@PostConstruct注解将notifier提交到了一个线程池里面

我们可以看到队列大小为1024*1024
同时并发注册的情况应该很小,此外为写内存操作,所以从队列中获取内容进行消费应该也是很快的

我们来看nacos是怎么处理的?
回到

使用到了写时复制,即 读写分离 的思想
**那会不会出现多个实例同时写,然后出现覆盖的问题?

写时复制会不会占用很多内存空间?

Service
我们可以看到 \'service --> cluster --> instance\' model, in which service stores a list of clusters, which contain a list of instances.
一个sercie可能部署了一个集群,一个集群可能会有多个实例

Cluster
就包含了我们在updateIps()方法内最终更新的persistentInstances 和ephemeralInstances

addBeatInfo()方法

即客户端最终使用Http请求服务端接口/instance/beat

在服务注册的Init方法中com.alibaba.nacos.naming.core.Service#init
开启了心跳检查
com.alibaba.nacos.naming.healthcheck.HealthCheckReactor#scheduleCheck(com.alibaba.nacos.naming.healthcheck.ClientBeatCheckTask)

默认的心跳超时时间
默认15秒

默认的delete时间
默认30秒

3Nacos 配置中心源码解析之 项目结构

Nacos 的 github 地址为:https://github.com/alibaba/nacos/。以下分析基于: Nacos 版本号:2.1.0。Nacos 一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。

Nacos提供四个主要功能。

  • 服务发现和服务运行状况检查

    Nacos简化了服务注册和通过DNS或HTTP接口发现其他服务的过程。Nacos还提供服务的实时运行状况检查,以防止向不健康的主机或服务实例发送请求。

  • 动态配置管理

    Dynamic Configuration Service允许您跨所有环境以集中和动态的方式管理所有服务的配置。在更新配置时,Nacos消除了重新部署应用程序和服务的需要,这使得配置更改更加高效和敏捷。

  • 动态域名服务

    Nacos支持加权路由,使您更容易在数据中心的生产环境中实现中间层负载均衡、灵活的路由策略、流控制和简单的DNS解析服务。它帮助您轻松实现基于dns的服务发现,并防止应用程序耦合到特定于供应商的服务发现api。

  • 服务和元数据管理

    Nacos提供了一个易于使用的服务仪表板,以帮助您管理服务元数据、配置、kubernetes DNS、服务运行状况和度量统计数据。

下面我们来分析一下 Nacos 框架的包结构。在分析源码之前,我们先对这个框架有一个宏观的认识。

Nacos 包结构

+ nacos
	└ address                 # Nacos Address 服务
	└ api                     # Nacos 服务抽象 API
	└ auth                    # Nacos 授权相关接口,登陆、接口访问等
	└ client                  # Nacos Java Client
	└ cmdb                    # Nacos 内部配置管理相关
	└ common                  # Nacos Common 包:定义工具类,通用对象等   
	└ config                  # Nacos 动态配置实现
	└ consistency             # Nacos 最终一致性实现
	└ console                 # Nacos 控制台后台相关
	└ console-ui              # Nacos 控制台 UI 相关
	└ core                    # Nacos 核心包:包括一些工具类,分布式存储
	└ distribution            # Nacos 启动相关的配置信息
	└ example                 # Nacos 使用示例
	└ istio                   # Nacos 与 GRPC 集成
	└ naming                  # Nacos 命名服务,服务注册与发现
	└ plugin                  # Nacos 插件相关,包括:授权以及加密
	└ plugin-default-impl     # Nacos 授权默认实现
	└ sys                     # Nacos 系统相关的配置:包括集群单机模式以及系统参数
	└ test                    # Nacos 测试用例

使用 mvn clean install -Dmaven.test.skip=true 编译项目:

编译成功之后:启动 console 模块中 com.alibaba.nacos.Nacos 这个类的 main 方法。注意在虚拟机启动参数添加:-Dnacos.standalone=true 单机版本启动。

启动成功后,我们就访问 http://localhost:8848/nacos,并以 nacos/nacos 用户名密码进行登录了。


后续我们就可以很方便的进行 debug 查看源代码了。

以上是关于Nacos源码解析的主要内容,如果未能解决你的问题,请参考以下文章

3Nacos 配置中心源码解析之 项目结构

nacos配置发布之源码解析

nacos的namespace发布接口之源码解析

Spring Cloud集成Nacos服务发现源码解析?翻了三套源码,保质保鲜!

4Nacos 配置中心源码解析之 服务端启动

4Nacos 配置中心源码解析之 服务端启动