1. Nacos 介绍与发展前景
1.1 官网概览:
Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service的首字母简称,一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。
Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。
Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。
1.2 Nacos 的关键特性
以下资料来自 Nacos官网
-
服务发现和服务健康监测
Nacos 支持基于 DNS 和基于 RPC 的服务发现。服务提供者使用 原生SDK、OpenAPI、或一个独立的Agent TODO注册 Service 后,服务消费者可以使用DNS TODO 或HTTP&API查找和发现服务。
Nacos 提供对服务的实时的健康检查,阻止向不健康的主机或服务实例发送请求。Nacos 支持传输层 (PING 或 TCP)和应用层 (如 HTTP、MySQL、用户自定义)的健康检查。 对于复杂的云环境和网络拓扑环境中(如 VPC、边缘网络等)服务的健康检查,Nacos 提供了 agent 上报模式和服务端主动检测2种健康检查模式。Nacos 还提供了统一的健康检查仪表盘,帮助您根据健康状态管理服务的可用性及流量。
-
动态配置服务
动态配置服务可以让您以中心化、外部化和动态化的方式管理所有环境的应用配置和服务配置。
动态配置消除了配置变更时重新部署应用和服务的需要,让配置管理变得更加高效和敏捷。
配置中心化管理让实现无状态服务变得更简单,让服务按需弹性扩展变得更容易。
Nacos 提供了一个简洁易用的UI (控制台样例 Demo) 帮助您管理所有的服务和应用的配置。Nacos 还提供包括配置版本跟踪、金丝雀发布、一键回滚配置以及客户端配置更新状态跟踪在内的一系列开箱即用的配置管理特性,帮助您更安全地在生产环境中管理配置变更和降低配置变更带来的风险。
-
动态 DNS 服务
动态 DNS 服务支持权重路由,让您更容易地实现中间层负载均衡、更灵活的路由策略、流量控制以及数据中心内网的简单DNS解析服务。动态DNS服务还能让您更容易地实现以 DNS 协议为基础的服务发现,以帮助您消除耦合到厂商私有服务发现 API 上的风险。
Nacos 提供了一些简单的 DNS APIs TODO 帮助您管理服务的关联域名和可用的 IP:PORT 列表.
-
服务及其元数据管理
Nacos 能让您从微服务平台建设的视角管理数据中心的所有服务及元数据,包括管理服务的描述、生命周期、服务的静态依赖分析、服务的健康状态、服务的流量管理、路由及安全策略、服务的 SLA 以及最首要的 metrics 统计数据。
1.3 Nacos生态图
1.4 Nacos架构
2. Eureka 与 Nacos 的竞争关系
2.1 Eureka 工作原理
Eureka分为Eureka Server(Eureka服务)和Eureka Client(Eureka客户端),所有Eureka Server 通过Replicate进行数据同步。无论Eureka Client向哪个Eureka Server中注册信息,最终所有Eureka Server中都会存储注册的信息,这些信息都缓存到Eureka Server的本地。
2.2 Nacos 工作原理
- Provider APP:服务提供者
- Consumer APP:服务消费者
- Name Server:通过VIP(Virtual IP)或DNS的方式实现Nacos高可用集群的服务路由
- Nacos Server:Nacos服务提供者,里面包含的Open API是功能访问入口,Conig Service、Naming Service 是Nacos提供的配置服务、命名服务模块。Consitency Protocol是一致性协议,用来实现Nacos集群节点的数据同步,这里使用的是Raft算法(Etcd、Redis哨兵选举)
- Nacos Console:控制台
- 客户端provider向nacos server的open api发起调用,把自己的服务地址链接,服务名称注册上去
- nacos server与服务提供者provider建立心跳机制,用来检测服务状态
- 服务消费者consumer查询出提供服务实例列表
- 并且默认10s去nacos server拉取服务实例列表
- 当服务消费者检测到服务异常,基于UDP协议推送更新
- 服务消费者即可调用了
2.3 两者的相同点和不同点
(1)相同点
- 都支持服务注册和服务拉取;
- 都支持服务提供者心跳方式做健康检测
(2)不同点
- nacos和eureka的范围不同,Nacos的阈值是针对某 个具体Service的,而不是针对所有服务的;
- 但Eureka的 自我保护阈值是针对所有服务的nacos支 持CP和AP两种;eureka只支持P。
- nacos使用netty,是长连接;eureka是短连接,定时发送。
3. Nacos 不同版本特性介绍
这里主要对比1.x和2.x版本。相关资源链接 nacos1.x与nacos2.x版本对比
官方说明: 从Nacos1.X升级Nacos2.0.X
4. 在Windows 上安装 Nacos
可以通过源码和发行包两种方式来获取Nacos
4.1 从Github上下载源码方式
(1)下载源码并编译
git clone https://github.com/alibaba/nacos.git
cd nacos/
mvn -Prelease-nacos -Dmaven.test.skip=true clean install -U
// change the $version to your actual path
cd distribution/target/nacos-server-$version/nacos/bin
(2)修改 application.properties
#*************** Config Module Related Configurations ***************#
### If use MySQL as datasource:
# spring.datasource.platform=mysql
### Count of DB:
# db.num=1
### Connect URL of DB:
# db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
# db.user.0=nacos
# db.password.0=nacos
需要将配置文件内,上面的mysql连接配置打开。修改为你使用的mysql 数据库连接配置、用户名、密码等。比如:
#*************** Config Module Related Configurations ***************#
### If use MySQL as datasource:
spring.datasource.platform=mysql
### Count of DB:
db.num=1
### Connect URL of DB:
db.url.0=jdbc:mysql://192.168.126.135:3306/nacos?characterEncoding=utf8&connectTimeout=10000&socketTimeout=30000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=root
db.password.0=root
配置号连接后,不能直接启动,该数据源对应的数据库、表需要创建后,才能运行 nacos-server。
(3)导入sql文件
startup.cmd -m standalone
在mysql 数据库创建 nacos数据库,再使用navicat 导入 nacos/conf 目录下的 mysql-schema.sql 脚本。
(4)修改 startup.cmd
startup.cmd默认运行集群模式,如果要默认运行单机模式,就修改mode=standalone。
或使用以下脚本命令运行:
startup.cmd -m standalone
“-m standalone” 表示从单机模式运行。
(5)启动
4.2 下载编译后压缩包方式
您可以从 最新稳定版本 下载 nacos-server-$version.zip
包。
解压编译包后,只需要配置 application.properties和创建对应的数据库 nacos(可修改)以及导入 sql 文件,就可以从单机模式启动服务。(参考 4.1 的启动流程)
5.在 Linux上安装 Nacos
Linux的安装和Windows一样,可以通过 git clone 去下载源码进行编译,也可以直接下载编译后的压缩包。
Linux 的启动流程同样需要修改配置和创建数据库、表。区别只是使用的命令和所处的系统环境不同。细节参考4.1 。
6. Nacos 页面
在运行 startup.cmd或 startup.sh 脚本后,如果不报错,就代表正常启动了。点击运行结果中的console: http://192.168.174.1:8848/nacos/index.html进入nacos页面
默认用户:nacos ,密码:nacos
7. 服务注册 & 发现和配置管理
7.1 服务治理
服务注册
curl -X POST "http://127.0.0.1:8848/nacos/v1/ns/instance?serviceName=nacos.naming.serviceName&ip=127.0.0.1&port=8080"
服务发现
curl -X GET "http://127.0.0.1:8848/nacos/v1/ns/instance/list?serviceName=nacos.naming.serviceName"
7.2 配置管理
启动nacos成功后,可通过nacos提供的http api验证nacos服务运行是否正常。
下边我们通过 curl工具来测试nacos的open api:
curl 是开发中常用的命令行工具,可以用作HTTP协议测试。
下载curl的windows版本:curl-7.66.0_2-win64-mingw,下载地址:https://curl.haxx.se/windows/
下载完成进入curl-7.66.0_2-win64-mingw的bin目录,进行下边的测试,通过测试可判断nacos是否正常工作:
发布配置
curl -X POST "http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=nacos.cfg.dataId&group=test&content=HelloWorld"
上边的命令表示向nacos发布一个配置:
点击“详情”:
获取配置
curl -X GET "http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=nacos.cfg.dataId&group=test"
8.关闭服务器
Linux/Unix/Mac
sh shutdown.sh
Windows
shutdown.cmd
或者双击shutdown.cmd运行文件。