介绍
官方概览
阿里巴巴开源产品,一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。
Nacos提供了一组简单易用的特性集,帮助快速实现动态服务发现、服务配置、服务元数据及流量管理。
动态服务发现:服务器注册了,不重启服务,能够自动发现服务。
动态配置:不重启服务,能够自动识别配置修改。
服务元数据及流量管理:流量怎么分配,根据元数据设置,进行管理。
Nacos是什么
服务(service) 是Nacos世界的一等公民。Nacos支持几乎所有主流类型的“服务”的发现、配置和管理。
Nacos的关键特性包括:服务发现和服务健康监测、动态配置服务、动态DNS服务、服务及其元数据管理。
服务发现和服务健康监测
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 帮助您管理所有的服务和应用的配置。Nacos 还提供包括配置版本跟踪、金丝雀发布、一键回滚配置以及客户端配置更新状态跟踪在内的一系列开箱即用的配置管理特性,帮助您更安全地在生产环境中管理配置变更和降低配置变更带来的风险。
动态DNS服务
动态 DNS 服务支持权重路由,让您更容易地实现中间层负载均衡、更灵活的路由策略、流量控制以及数据中心内网的简单DNS解析服务。动态DNS服务还能让您更容易地实现以 DNS 协议为基础的服务发现,以帮助您消除耦合到厂商私有服务发现 API 上的风险。
服务机器元数据管理
Nacos 能让您从微服务平台建设的视角管理数据中心的所有服务及元数据,包括管理服务的描述、生命周期、服务的静态依赖分析、服务的健康状态、服务的流量管理、路由及安全策略、服务的 SLA 以及最首要的 metrics 统计数据。
Nacos地图
这里展示官方的一张图
特性大图:要从功能特性,非功能特性,全面介绍我们要解的问题域的特性诉求
架构大图:通过清晰架构,让您快速进入 Nacos 世界
业务大图:利用当前特性可以支持的业务场景,及其最佳实践
生态大图:系统梳理 Nacos 和主流技术生态的关系
优势大图:展示 Nacos 核心竞争力
战略大图:要从战略到战术层面讲 Nacos 的宏观优势
Nacos 生态图
如Nacos 生态图所示,Nacos无缝支持一些主流的开源生态。例如:Spring Cloud、Apache Dubbo and Dubbo Mesh、Kubernetes and CNCF。
和Eureka比较
Nacos与Eureka均提供注册中心和服务治理功能,以下为两者差异和选型方案。
两者差异
功能模块 | Nacos | Eureka | 说明 |
---|---|---|---|
注册中心 | 支持 | 支持 | 服务治理基本功能,服务服务中心化注册 |
配置中心 | 支持 | 否 | Eureka需要配合Config实现配置中心,且不提供管理界面 |
动态刷新 | 支持 | 否 | Eureka需要配合MQ实现配置动态刷新,Nacos采用Netty保持TCP长连接实时推送 |
可用区AZ | 支持 | 支持 | 对服务集群划分不同区域,实现区域隔离,并提供容灾自动切换 |
分组 | 支持 | 否 | Nacos可根据业务和环境进行分组管理 |
元数据 | 支持 | 支持 | 提供服务标签数据 |
权重 | 支持 | 否 | Nacos默认提供权重设置功能,调整承载流量压力 |
健康检查 | 支持 | 支持 | Nacos支持由客户端或服务端发起的健康检查,Eureka是由客户端发起心跳 |
负载均衡 | 支持 | 支持 | 均提供负载均衡策略,Eureka采用Ribion |
管理界面 | 支持 | 支持 | Nacos支持对服务在线管理,Eureka只是预览服务状态 |
CAP原则 | CP/AP | AP | Nacos通知遵循CP原则(一致性+分区容错性) 和AP原则(可用性+分区容错性) |
版本迭代 | 支持 | 否 | Eureka目前已经不进行升级 |
应用内/外 | 外 | 内 | Nacos属于外部应用,侵入性小。Eureka直接集成到应用中,依赖于应用自身完成服务的注册与发现 |
集成支持 | Dubbo、Spring Cloud、K8S | Spring Cloud |
选型方案
采用Eureka方案的考虑
想用Spring Cloud全家桶
想用本地文件和Git作为配置管理的,将配置与服务分开管理
采用Nacos方案的考虑
考虑引入Spring Cloud Alibaba生态
想在线对服务进行上下线和流量管理
不想采用MQ实现配置中心动态刷新
不想新增配置中心生产集群
与Apollo比较
Nacos与Apollo都为目前比较流行且维护活跃的2个配置中心,以下为两者差异。
功能点 | Nacos | Apollo |
---|---|---|
开源时间 | 2018.6 | 2016.5 |
配置实时推送 | 支持(HTTP长轮询1S内) | 支持(HTTP长轮询1S内) |
版本管理 | 自动管理 | 自动管理 |
配置回滚 | 支持 | 支持 |
灰度发布 | 支持 | 支持 |
权限管理 | 待支持 | 支持 |
多集群 | 支持 | 支持 |
多环境 | 支持 | 支持 |
监听查询 | 支持 | 支持 |
多语言 | Python、Go、Java、Node.js、C#、OpenAPI | Go、C++、Java、Python、.net、OpenAPI |
单机部署 | Nacos单节点 | Apollo quikstart+MySQL |
分布式高可用最小集群数量 | Nocas*3+MySQL | Config3+Admin3+Protal1+MySQL3 |
配置格式校验 | 支持 | 支持 |
通信协议 | HTTP | HTTP |
数据一致性 | HTTP异步通知 | 数据库模拟消息队列,Apollo定时读消息 |
单机读 | 15000 | 9000 |
单机写 | 1800 | 1100 |
3节点读 | 45000 | 27000 |
3节点写 | 5600 | 3300 |
文档 | 待完善(目前只有Java开发相关文档) | 详细 |
对比Apollo
Nacos部署简化,Nacos整合了注册中心、配置中心功能,且部署相比apollo简单,方便管理和监控。
apollo容器化较困难,Nacos有官网的镜像可以直接部署,总体来说,Nacos比apollo更符合KISS原则
性能方面,Nacos读写tps比apollo稍强一些
快速开始
环境准备
Nacos 依赖 Java 环境来运行。如果您是从代码开始构建并运行Nacos,还需要为此配置 Maven环境,请确保是在以下版本环境中安装使用:
64 bit OS,支持 Linux/Unix/Mac/Windows,推荐选用 Linux/Unix/Mac。
64 bit JDK 1.8+。
Maven 3.2.x+。
下载源码或者安装包
从Github上下载源码方式
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 v e r s i o n t o y o u r a c t u a l p a t h c d d i s t r i b u t i o n / t a r g e t / n a c o s − s e r v e r − version to your actual path cd distribution/target/nacos-server- versiontoyouractualpathcddistribution/target/nacos−server−version/nacos/bin
下载编译后压缩包方式
可以从 最新稳定版本 下载 nacos-server-$version.zip 包
unzip nacos-server-
v
e
r
s
i
o
n
.
z
i
p
或
者
t
a
r
−
x
v
f
n
a
c
o
s
−
s
e
r
v
e
r
−
version.zip 或者 tar -xvf nacos-server-
version.zip或者tar−xvfnacos−server−version.tar.gz
cd nacos/bin
启动服务器
Linux/Unix/Mac
启动命令(standalone代表着单机模式运行,非集群模式):
sh startup.sh -m standalone
如果您使用的是ubuntu系统,或者运行脚本报错提示[[符号找不到,可尝试如下运行:
bash startup.sh -m standalone
Windows
启动命令(standalone代表着单机模式运行,非集群模式):
startup.cmd -m standalone
访问
访问地址: localhost:8848/nacos
默认账号密码: nacos/nacos