Nacos源码解析
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nacos源码解析相关的知识,希望对你有一定的参考价值。
参考技术ANacos服务注册表结构: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源码解析的主要内容,如果未能解决你的问题,请参考以下文章