什么是Nacos
Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。Nacos 致力于发现、配置和管理微服务,Nacos 提供了一组简单易用的特性集,快速实现动态服务发现、服务配置、服务元数据及流量管理。
Nacos 的关键特性包括:
-
服务发现和服务健康监测:Nacos 支持基于 DNS 和基于 RPC 的服务发现,服务消费者可以使用DNS或HTTP API查找和发现服务 。同时Nacos 提供对服务的实时的健康检查,阻止向不健康的主机或服务实例发送请求。
-
动态配置服务:动态配置服务提供以中心化、外部化和动态化的方式管理所有环境的应用配置和服务配置。
-
动态 DNS 服务:动态 DNS 服务支持权重路由,实现中间层负载均衡、更灵活的路由策略、流量控制以及数据中心内网的简单DNS解析服务。
-
服务及其元数据管理:Nacos 能从微服务平台建设的视角管理数据中心的所有服务及元数据,包括管理服务的描述、生命周期、服务的静态依赖分析、服务的健康状态、服务的流量管理、路由及安全策略、服务的 SLA 以及最首要的 metrics 统计数据。
Nacos 架构
-
服务管理:实现服务CRUD,域名CRUD,服务健康状态检查,服务权重管理等功能
-
配置管理:实现配置管CRUD,版本管理,灰度管理,监听管理,推送轨迹,聚合数据等功能
-
元数据管理:提供元数据CURD 和打标能力
-
插件机制:实现三个模块可分可合能力,实现扩展点SPI机制
-
事件机制:实现异步化事件通知,sdk数据变化异步通知等逻辑
-
日志模块:管理日志分类,日志级别,日志可移植性(尤其避免冲突),日志格式,异常码+帮助文档
-
回调机制:sdk通知数据,通过统一的模式回调用户处理。接口和数据结构需要具备可扩展性
-
寻址模式:解决ip,域名,nameserver、广播等多种寻址模式,需要可扩展
-
推送通道:解决server与存储、server间、server与sdk间推送性能问题
-
容量管理:管理每个租户,分组下的容量,防止存储被写爆,影响服务可用性
-
流量管理:按照租户,分组等多个维度对请求频率,长链接个数,报文大小,请求流控进行控制
-
缓存机制:容灾目录,本地缓存,server缓存机制。容灾目录使用需要工具
-
启动模式:按照单机模式,配置模式,服务模式,dns模式,或者all模式,启动不同的程序+UI
-
一致性协议:解决不同数据,不同一致性要求情况下,不同一致性机制
-
存储模块:解决数据持久化、非持久化存储,解决数据分片问题
-
Nameserver:解决namespace到clusterid的路由问题,解决用户环境与nacos物理环境映射问题
-
CMDB:解决元数据存储,与三方cmdb系统对接问题,解决应用,人,资源关系
-
Metrics:暴露标准metrics数据,方便与三方监控系统打通
-
Trace:暴露标准trace,方便与SLA系统打通,日志白平化,推送轨迹等能力,并且可以和计量计费系统打通
-
接入管理:相当于阿里云开通服务,分配身份、容量、权限过程
-
用户管理:解决用户管理,登录,sso等问题
-
权限管理:解决身份识别,访问控制,角色管理等问题
-
审计系统:扩展接口方便与不同公司审计系统打通
-
通知系统:核心数据变更,或者操作,方便通过SMS系统打通,通知到对应人数据变更
-
OpenAPI:暴露标准Rest风格HTTP接口,简单易用,方便多语言集成
-
Console:易用控制台,做服务管理、配置管理等操作
-
SDK:多语言sdk
-
Agent:dns-f类似模式,或者与mesh等方案集成
-
CLI:命令行对产品进行轻量化管理,像git一样好用
Nacos启动
环境准备
Nacos依赖Java环境来运行,需事先安装JDK,并配置JAVA_HOME。
如果是从代码开始构建并运行Nacos,还需要为此配置Maven环境,请确保是在以下版本环境中安装使用:
-
64 bit OS,支持 Linux/Unix/Mac/Windows,推荐选用 Linux/Unix/Mac。
源码下载
你可以通过源码和发行包两种方式来获取 Nacos。
源码下载
git clone https://github.com/alibaba/nacos.git cd nacos/ mvn -Prelease-nacos -Dmaven.test.skip=true clean install -U ls -al distribution/target/ // change the $version to your actual path cd distribution/target/nacos-server-$version/nacos/bin
安装包下载
可以从最新稳定版本下载nacos-server-$version.zip包。
Linux/Unix/Mac
unzip nacos-server-$version.zip 或者 tar -xvf nacos-server-$version.tar.gz cd nacos/bin
Windows
下载解压后(.zip)即可。
启动服务
Linux/Unix/Mac
启动命令(standalone代表着单机模式运行,非集群模式):
sh startup.sh -m standalone
Windows
启动命令(standalone代表着单机模式运行,非集群模式):
cmd startup.cmd -m standalone
服务管理
服务注册
curl -X POST 'http://127.0.0.1:8848/nacos/v1/ns/instance?serviceName=nacos.naming.serviceName&ip=20.18.7.10&port=8080'
服务发现
curl -X GET 'http://127.0.0.1:8848/nacos/v1/ns/instance/list?serviceName=nacos.naming.serviceName'
配置管理
发布配置
curl -X POST "http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=nacos.cfg.dataId&group=test&content=HelloWorld"
获取配置
curl -X GET "http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=nacos.cfg.dataId&group=test"
关闭服务
Linux/Unix/Mac
sh shutdown.sh
Windows
cmd shutdown.cmd
或者双击shutdown.cmd运行文件
打开控制台
Nacos提供了一个可视化的操作平台,安装好之后,在浏览器中输入http://localhost:8848/nacos,默认的用户名和密码都是nacos。看到下面的页面就是启动成功了
支持Mysql数据存储
在0.7版本之前,在单机模式时nacos只支持嵌入式数据库实现数据的存储,0.7版本增加了支持mysql数据源能力,具体的操作步骤:
-
安装数据库,版本要求:5.6.5+
-
初始化mysql数据库,数据库初始化文件:nacos-mysql.sql(下载)
-
修改conf/application.properties文件,增加支持mysql数据源配置(目前只支持mysql),添加mysql数据源的url、用户名和密码。
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos_config??characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=root
db.password=xxx
再以单机模式启动nacos,nacos所有数据都将写到mysql。
集群部署
Nacos支持三种部署模式
-
单机模式 - 用于测试和单机试用。
-
集群模式 - 用于生产环境,确保高可用。
-
多集群模式 - 用于多数据中心场景。
上面我们讲解了单机模式的启动,但是单机模式建议仅用于开发测试,生产环境请使用集群模式,Nacos默认模式也是集团模式cluster。
集群模式部署请参考官网: