# 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/) ### 正文: nacos系统架构图 sidecar,是从SCA2.1.1版本后增加的模块,是一种多语言异构模块,用于实现其他语言使用SCA相关组件模块 #### 数据模型 Name Server 用于记录各个命名空间namespace中的实例信息,namespace、group、与服务service或者资源dataId之间的关系: Model 当我们使用下载下来的Nacos之后目录结构如图: ![nacos下载后的目录结构](https://noteall.oss-cn-beijing.aliyuncs.com/nacos/discovery/nacos%E4%B8%8B%E8%BD%BD%E7%9B%AE%E5%BD%95.png) #### 如何启动: ##### 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的注册与