概念
Nacos是阿里巴巴最新开源的项目,核心定位是“一个更易于帮助构建云原生应用的动态服务发现、配置和服务管理平台”,
Nacos核心提供两个功能:服务注册与发现,动态配置管理。
1、服务注册与发现
Nacos提供基于DNS和基于RPC的服务发现,即能被用来支持https/http的服务注册与发现,也支持RPC如dubbo的服务注册与发现。
与Dubbo使用的zookeeper相比而言,两者差异还是比较大的,zookeeper是一种分布式的协调服务,它天生是作为分布式数据一致性场景下的解决方案,所以zookeeper是CP的,它牺牲了可用性来保证一致性,在极端情况下(master选举期间)服务会对外停止,对于服务可用性要求比较高的系统是难以接受的。Nacos是一种去中心化的架构,属于CAP理论里的AP架构,支持最终一致性,在分布式服务发现与注册场景下具有很不错的性能。目前dubbo官方也支持使用Nacos代替zookeeper。
2、动态配置服务
动态修改配置并实时生效对于服务端的同学而已并不陌生,这种服务能够让我们的服务拥有更多的灵活性,不需要重启服务即可做到配置实时生效,非常适合于“配置优先”的服务开发。
实现原理:
现在很多框架和中间件都借鉴了annotation-driven的思想,这里面也不例外,通过注解驱动,来配置对应的注解处理器来实现对应的需求。
部署
Nacos支持集群和单机部署两种方式,单机部署适合于开发调试,集群部署使用生产环境。
1、单机部署的时候默认会采用内置的mysql存储Nacos云信息,如果想切换到自己本地的开发数据库,在conf/applicaition.properties文件增加以下配置:
下载官方包解压后,也可以再conf文件中找到初始化脚本例子。
2、集群部署适用于生产环境,对于生产环境是不建议使用内置mysql数据库,需要配置成生产环境的mysql,并且mysql环境必须是高可用配置的,防止生产环境数据库异常导致Nacos集群异常。
3、集群部署的时候,需要一台台启动集群,并确保日志输出无异常,检查集群所有机器都启动正常后再进行服务的注册发布。
4、应用发布使用方在配置服务发现地址的时候,需要按照”域名:端口“,或者”ip:端口“的方式配置,对于需要使用https的服务,需要在服务发现与注册使用方在启动脚本里面配置环境变量以开启https服务,即增加 ”-Dtls.enable=true“配置。
可以下载:源码安装
也可以通过Pom引入到工程中:
默认端口:8848(珠穆朗玛峰高度)
客户端:
修改 bootstrap.yml 注意:必须是写在 bootstrap.yml 中,配置在 application.yml 中不行,启动报错:原因如下:
name: @artifactId@ 是POM中的 upms-biz
nacos集群
两个方案第一种 通过一个VIP
生产环境中部署nacos首先肯定是使用集群模式cluster保证高可用。
nacos 官方推荐用户把所有服务列表放到一个vip下面,然后挂到一个域名下面
1. http://ip1:port/openAPI 直连ip模式,机器挂则需要修改ip才可以使用。
2. http://VIP:port/openAPI 挂载VIP模式,直连vip即可,下面挂server真实ip,可读性不好。
3. http://xxx.com:port/openAPI 域名 + VIP模式,可读性好,而且换ip方便,推荐模式
注意:这里的VIP直接使用 Nginx就可以实现了。
官方建议至少3个或3个以上的节点来实现
集群模式
。
修改集群配置
nacos
的conf目录下有配置文件
cluster.conf
,请每行配置成
ip:port
。下面的IP最好三台机器,不同IP
192.168.10.200:8851
192.168.10.200:8849
192.168.10.200:8850
集群模式必须使用
MySQL
数据库,生产使用建议至少
主备模式
,或者采用
高可用数据库
。
Nginx配置
修改conf/nginx.conf配置
upstream nacos {
server 192.168.28.130:8851;
server 192.168.28.130:8849;
server 192.168.28.130:8850;
}
server {
listen 80;
server_name nacos.config.com;
location / {
proxy_pass http://nacos;
}
}
配置域名nacos.config.com绑定
VIP
。
这时候一个leader和两个follower的集群已经启动成。
第二种集群
域名的方式比较麻烦,暂不考虑。vip 的方式也稍稍麻烦。 这里我使用 nginx 的方式,不用VIP
upstream nacos {
server 127.0.0.1:8848;
server 127.0.0.1:8849;
server 127.0.0.1:8850;
}
server {
listen 80;
server_name localhost;
location /nacos/ {
proxy_pass http://nacos/nacos/;
}
}