# nacosSourceCode
**Repository Path**: what-ever/nacos-source-code
## Basic Information
- **Project Name**: nacosSourceCode
- **Description**: Nacos源码追踪学习
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2021-06-10
- **Last Updated**: 2022-04-09
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# nacosSourceCode
#### 介绍
Nacos源码追踪学习
#### 软件架构
软件架构说明
#### 安装教程
1. xxxx
2. xxxx
3. xxxx
#### 使用说明
1. xxxx
2. xxxx
3. xxxx
#### 参与贡献
1. Fork 本仓库
2. 新建 Feat_xxx 分支
3. 提交代码
4. 新建 Pull Request
#### 特技
1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md
2. Gitee 官方博客 [blog.gitee.com](https://blog.gitee.com)
3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解 Gitee 上的优秀开源项目
4. [GVP](https://gitee.com/gvp) 全称是 Gitee 最有价值开源项目,是综合评定出的优秀开源项目
5. Gitee 官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help)
6. Gitee 封面人物是一档用来展示 Gitee 会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)
### 正文:
sidecar,是从SCA2.1.1版本后增加的模块,是一种多语言异构模块,用于实现其他语言使用SCA相关组件模块
#### 数据模型
Name Server 用于记录各个命名空间namespace中的实例信息,namespace、group、与服务service或者资源dataId之间的关系:
当我们使用下载下来的Nacos之后目录结构如图:

#### 如何启动:
##### Windows:
```properties
startup.cmd -m standalone (standalone代表着单机模式模式启动,并非集群模式)
```
在nacos1.3.2开始nacos的启动默认是以集群方式启动
##### Linux/Unix/Mac
```properties
sh startup.sh -m standalone
```
如果是ubuntu,运行脚步报错提示:[[符号找不到,可以尝试如下运行
```properties
bash startup.sh -m standalone
```
启动方式具体可以参见官网:
##### [nacos启动方式](https://nacos.io/zh-cn/docs/quick-start.html)
nacos单个实例默认是在`namespace--->group--->instanceName--->clusterName`下面存在的
namespace:就是nacos文件夹的下级目录:namespace也是一个文件夹
#### nacos的实例分为两种:
1、临时实例:ephemeral=true
2、持久实例:ephemeral=false
临时实例的健康状态使用的是healthy表示的
持久实例的健康状态是使用marked表示的
```yaml
spring:
cloud:
nacos:
discovery:
ephemeral: true
#表示该实例是一个临时实例,默认是true
```
#### 临时实例与持久实例的区别:
##### 临时实例与持久实例的存储位置与健康检测机制是不同的
##### 临时实例:默认情况下服务实例仅仅会注册在Nacos内存中,不会持久化到Nacos磁盘。其健康检测机制为Client模式,即Client主动向Server上报他的健康状态(类似于推的动作)。默认心跳间隔为5秒。在15秒内Server未收到Client的心跳,则会将其标记为“不健康”的状态;在30秒内若是收到了Client发送过来的心跳,则重新恢复“健康”状态,否则该实例将会从Server端的内存中清除出去。
##### 持久实例:服务实例不仅会注册到Nacos内存中,同时也会被持久化到Nacos磁盘。其健康检测机制为Server模式,即Server会主动去检测Client的健康状态(类似于拉的动作),默认是每20秒检测一次。健康检测失败之后会被标记为“不健康”的状态,但是不会被清除,因为是持久化在磁盘的,其对不健康持久实例的清除,需要专门进行。
#### 应用场景
临时实例适用于`流量突发暴增`可能的互联网项目,因为临时实例可以实现弹性扩容
#### 重要的API:
1、Instance类
实例,代表一个Nacos Client主机实例(该实例下面又可以分为服务的提供者和服务的消费者,但是服务的提供者和服务的消费着对于Nacos 来说都是Nacos Client)
2、ServiceInfo类
微服务信息实例、其包含着一个Instacne列表
3、NamingService接口
该接口只有一个实现类,NacosNamingService。通过这个类的实例,可以完成Client与Server之间的通信,
例如:
1、注册/取消注册
2、订阅/取消订阅
3、获取Server的状态
4、获取Server中指定的Instance
> 注意:心跳不是在这里完成的
Nacos的注册与