# nacos - 注册中心 & 配置中心
## 微服务是什么?
微服务架构就是将一个完整的应用拆分成几个独立的服务,每个服务都能独立部署、独立维护、独立扩展
为什么要使用微服务呢?简而言之就是单体项目随着时间推移,代码越来越多,架构越来越乱,启动时间越来越长,整个项目愈发变的不可控制,微服务的出现就是为了解决这个问题的
- 因为`代码`越来越多,所以要将代码拆分到不同的`函数`里
- 因为`函数`越来越多,所以要将函数拆分到不同的`类`里
- 因为`类`越来越多,所以要将类拆分到不同的`包`下
- 因为`包`越来越多,所以要将包拆分到不同的`模块`下
- 因为`模块`越来越多,所以要将模块拆分到不同的`服务`中
## nacos是什么?为什么要搭建nacos?
虽然我们将代码按照模块拆分到了不同的服务中,然而“完全独立”毕竟只是一种理想状态,在实际的开发中,我们将不可避免的出现类似于`A服务`要调用`B服务`某个接口的情况
在这种需求只出现一到两次的时候,我们尚可将`B服务的地址`直接硬编码到`A服务`里,但是我们不妨假设一种比较极端的情况,假设A服务需要依赖的其它服务有几十个呢?
如果这种情况下我们将所有依赖服务的地址直接写死到A服务的代码里,那么将来这些服务的地址一旦发生变化,那么我们仅仅是修改服务地址就将是一个浩大的工程,
这是绝对不允许出现的情况,除非你的公司需要增加工作岗位
实际的情况比这更加可怕,我们拆分的几十个服务可能每个都对其它服务有着或多或少的调用,整个系统的依赖关系揉成一团,如果没有一个妥善的方法治理这些服务,将是一场灾难
而`nacos`,就是为了解决这个难题的
作为微服务的基础设施,`nacos`提供了两个基本的功能:
- 服务注册中心
- 分布式配置中心
**所谓服务注册**,就是指`nacos`作为注册中心,提供了一个公共地址,我们的服务在启动之后,首先向`nacos`打个招呼:
"嗨,我的名字叫做xxx,以后有人需要我的服务请到地址xxx联系我"
如此一来,`nacos`就记录了系统中所有服务的联系地址,我们在服务中调用其它服务时,不必知晓其地址所在,只需知道其服务名称,`nacos`便会为我们找到对应的服务
**配置中心**的概念就更好理解了,举个例子:假设我们将配置文件放在服务的jar包文件中,而当我们几十个服务某个关键配置信息发生变化的时候,
我们将需要去重复性的修改几十个服务的配置文件,如果软件已经上线,我们还需要将这几十个服务重新打包部署一遍,这还没有考虑集群的情况
而如果我们将配置信息放在`nacos`中,我们只需要修改一次,并且这些配置是实时刷新的,不用重启服务就可即时生效
## nacos搭建步骤
说了这么多`nacos`的好处,那么我们如何搭建`nacos`呢?
### 1. 下载
- 下载 `nacos-server-1.3.2.zip`
- GitHub直达链接:[nacos-server-1.3.2.zip](https://github.com/alibaba/nacos/releases/download/1.3.2/nacos-server-1.3.2.zip)
- 所有发行版:[https://github.com/alibaba/nacos/releases](https://github.com/alibaba/nacos/releases)
- 下载后解压
### 2. 导入数据库
- 在mysql新建数据库: `sp-nacos`
- 导入脚本: `\conf\nacos-mysql.sql`
### 3. 更改配置文件
打开配置文件 `\conf\application.properties`
``` js
// 第21行附近,改启动端口
server.port=8001
// 第42行附近,配置据库连接
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://127.0.0.1:3306/sp-nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user=root
db.password=root123456
// 第124行附近,打开注册验证
nacos.core.auth.enabled=true
```
### 4. 更改启动文件
打开配置文件`\bin\startup.sh` (window下打开`startup.cmd`)
``` js
// 第55行附近,改为单机模式 (原值cluster=集群模式)
export MODE="standalone"
// window下在文件startup.cmd第27行附近,修改为
set MODE="standalone"
```
### 5. 运行
进入命令行
``` js
// linux下运行:
sh ./startup.sh
// window下运行:
startup.cmd
```
### 6. 浏览器访问
``` js
// 直接浏览器打开链接即可
http://127.0.0.1:8001/nacos // 默认账号: nacos nacos
```
### 7. 当看到类似于如下页面时就代表已经启动成功
![nacos启动成功](http://oss.dev33.cn/sp-cloud/nacos-ui.png)
### 8. 添加配置文件
在`\doc\yml-config\DEFAULT_GROUP`目录下,有三个配置文件,依次添加到`nacos`中,如图所示
![nacos配置文件](http://oss.dev33.cn/sp-cloud/nacos-config.png)
- 注意:添加时,可直接将 `DEFAULT_GROUP`文件夹打个`zip压缩包`,然后导入即可
- 请注意修改`mysql`与`redis`的配置信息