NACOS源码解读(2.0.0版本)
nacos使用方面概述
概述
- nacos作用不在赘述直接进入正题。
工程简介。
- 站在前人肩膀,少走弯路,快速切入入口;文章属于较早的,本文解读从2.0.0开始。
1
2
3
4参考文章:1. https://blog.csdn.net/ZhangQingmu/article/details/105212470
2. https://blog.csdn.net/CX610602108/article/details/110099591
3. https://www.cnblogs.com/HendSame-JMZ/p/13046614.html
划重点:上述3篇文章仅供参考,实际需要根据自己的版本所建立
- nacos-console: nacos主体项目入口和启动项目
- nacos-naming: nacos注册发现业务。
- nacos-config: nacos的配置中心服务
- nacos-api: 用户nacos客户端和服务端进行通信的定义
- nacos-client: nacos客户端,进行和服务端通信
- nacos-test: 测试用例
启动demo
- 执行脚本 (MySQL)
1
2create database nacos_config;
\distribution\conf\nacos-db.sql - IDEA 找到 nacos-console项目并运行 Nacos.java
1
2
3
4
5
6
7jvm参数配置如下:
-Dnacos.standalone=true
-DuseAddressServer=false
-Ddb.num=1
-Ddb.url=jdbc:mysql://localhost:3306/nacos_config
-Ddb.user=nacos
-Ddb.password=nacos
编译源码jar包启动
选择nacos-distribution项目执行:mvn clean install -Dmaven.test.skip=true -P release-nacos
选择对应的压缩包.进行传输
解压压缩包到bin目录:sh startup.sh -m standalone
- 如果使用ubuntu或者运行脚本报错提示[[符号找不到,可尝试如下运行:bash startup.sh -m standalone
修改链接数据等前往conf目录.
运行控制台页面
1
2http://localhost:8848/nacos/index.html#/login
用户名密码 nacos/nacos
项目分析解读
- nacos-test
1
2
3
4
5
6
71. 包下面的结构还是挺清晰的,每个不同的模块都会聚集在一个包下面。以下举例config。
2. 第一个类:ConfigAPI_CITCase->nacos_getconfig_1
3. 测试方法用于一个配置注册和删除,在进行获取。
4. 启动该测试类的会启动:Nacos.class(参照上面demo启动)。
5. 随后用nacos-client包下的类进行远程调用进行各项方法。
总结:test方法会一同启动nacos服务,同时用client进行调用。这里会进行一个全链路的测试。
这个一个很好的方法,学习了。
#nacos理念
数据一致性
nacos由AP CP组成混合使用;
- 临时节点使用AP模式,进行服务端存储,存在在一个Map中
1
AP协议:Distro协议。Distro是阿里巴巴的私有协议,目前流行的 Nacos服务管理框架就采用了 Distro协议。Distro 协议被定位为 临时数据的一致性协议 :该类型协议, 不需要把数据存储到磁盘或者数据库 ,因为临时数据通常和服务器保持一个session会话, 该会话只要存在,数据就不会丢失 。
- 持久化节点使用CP模式(集群Leader),该数据会序列化进磁盘中。备注:nacos1.4之前使用raft自己实现,之后版本使用了:蚂蚁金服的jraft。
1
Raft 适用于一个管理日志一致性的协议,相比于 Paxos 协议 Raft 更易于理解和去实现它。为了提高理解性,Raft 将一致性算法分为了几个部分,包括领导选取(leader selection)、日志复制(log replication)、安全(safety),并且使用了更强的一致性来减少了必须需要考虑的状态。
- 参考文章:Nacos注册中心设计分析-CP模式(重点)
- 参考文章:蚂蚁金服开源 SOFAJRaft:生产级 Java Raft 算法库
- 参考文章:Nacos中Distro协议梳理
- 参考文章:Nacos 实现 AP+CP原理Raft 算法
- 参考文章:Raft协议动态图
2.0版本
- 临时节点使用AP模式,进行服务端存储,存在在一个Map中
新增gprc。
支持长链接
…