目录
概念
架构
设计原则
架构分层
用户层
业务层
内核层
插件
单机部署
1.下载安装包
nacos-toc" style="margin-left:40px;">2.安装nacos
nacos-toc" style="margin-left:40px;">3.启动nacos
快速开始
1.添加Maven依赖
2.添加配置
3.启动
集群部署
搭建步骤
1.搭建数据库,初始化数据库表结构
nacos-toc" style="margin-left:80px;">2.配置nacos
nacos%E9%9B%86%E7%BE%A4-toc" style="margin-left:80px;">3.启动nacos集群
4.nginx反向代理
运行机制
Nacos与Eureka的区别
概念
Nacos 是阿里巴巴开源的一个更易于构建云原生应用的动态服务发现、配置管理和服务管理的平台。
致力于服务发现、配置、服务管理。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。
Nacos 支持几乎所有主流类型的“服务”的发现、配置和管理。
架构
设计原则
极简原则,简单才好用,简单才稳定,简单才易协作。
架构⼀致性,⼀套架构要能适应开源、内部、商业化(公有云及专有云)3 个场景。
扩展性,以开源为内核,商业化做基础,充分扩展,方便用户扩展。
模块化,将通用部分抽象下沉,提升代码复用和健壮性。
长期主义,不是要⼀个能支撑未来 3 年的架构,而是要能够支撑 10 年的架构。
开放性,设计和讨论保持社区互动和透明,方便大家协作。
架构分层
整体架构分为用户层、业务层、内核层和插件,用户层主要解决用户使用的易用性问题,业务层主
要解决服务发现和配置管理的功能问题,内核层解决分布式系统⼀致性、存储、高可用等核心问题,插件解决扩展性问题。
用户层
OpenAPI:暴露标准 Rest 风格 HTTP 接口,简单易用,方便多语言集成。
Console:易用控制台,做服务管理、配置管理等操作。
SDK:多语言 SDK,目前几乎支持所有主流编程语言。
Agent:Sidecar 模式运行,通过标准 DNS 协议与业务解耦。
CLI:命令行对产品进行轻量化管理,像 git ⼀样好用。
业务层
服务管理:实现服务 CRUD,域名 CRUD,服务健康状态检查,服务权重管理等功能。
配置管理:实现配置管 CRUD,版本管理,灰度管理,监听管理,推送轨迹,聚合数据等功能。
元数据管理:提供元数据 CURD 和打标能力,为实现上层流量和服务灰度非常关键。
内核层
插件机制:实现三个模块可分可合能力,实现扩展点 SPI 机制,用于扩展自己公司定制。
事件机制:实现异步化事件通知,SDK 数据变化异步通知等逻辑,是 Nacos 高性能的关键部分。
日志模块:管理日志分类,日志级别,日志可移植性(尤其避免冲突),日志格式,异常码+帮
助文档。
回调机制:SDK 通知数据,通过统⼀的模式回调用户处理。接口和数据结构需要具备可扩展性。
寻址模式:解决 Server IP 直连,域名访问,Nameserver 寻址、广播等多种寻址模式,需要可
扩展。
推送通道:解决 Server 与存储、Server 间、Server 与 SDK 间高效通信问题。
容量管理:管理每个租户,分组下的容量,防止存储被写爆,影响服务可用性。
流量管理:按照租户,分组等多个维度对请求频率,长链接个数,报文大小,请求流控进行控制。
缓存机制:容灾目录,本地缓存,Server 缓存机制,是 Nacos 高可用的关键。
启动模式:按照单机模式,配置模式,服务模式,DNS 模式模式,启动不同的模块。
⼀致性协议:解决不同数据,不同⼀致性要求情况下,不同⼀致性要求,是 Nacos 做到 AP 协
议的关键。
存储模块:解决数据持久化、非持久化存储,解决数据分片问题。
插件
Nameserver:解决 Namespace 到 ClusterID 的路由问题,解决用户环境与 Nacos 物理环境
映射问题。
CMDB:解决元数据存储,与三方 CMDB 系统对接问题,解决应用,人,资源关系。
Metrics:暴露标准 Metrics 数据,方便与三方监控系统打通。
Trace:暴露标准 Trace,方便与 SLA 系统打通,日志白平化,推送轨迹等能力,并且可以和计
量计费系统打通。
接入管理:相当于阿里云开通服务,分配身份、容量、权限过程。
用户管理:解决用户管理,登录,SSO 等问题。
权限管理:解决身份识别,访问控制,角色管理等问题。
审计系统:扩展接口方便与不同公司审计系统打通。
通知系统:核心数据变更,或者操作,方便通过SMS 系统打通,通知到对应人数据变更。
单机部署
1.下载安装包
可直接到 nacos 的 github 网站的 release 中下载,下载链接:Releases · alibaba/nacos · GitHub
如上图,.zip 包是用于 window 系统的,.tar.gz 包是用于 Linux 系统的。
nacos">2.安装nacos
下面我们安装一个 window 系统版本的,安装 nacos 其实非常简单,只需将压缩包解压即可。
目录说明:
bin:启动脚本
conf:配置文件
data:数据文件
logs:日志
Nacos的默认端口是8848,如果你电脑上的其它进程占用了8848端口,请先尝试关闭该进程。如果无法关闭占用8848端口的进程,也可以进入安装目录的 conf/application.properties 文件,修改配置文件中的端口:
nacos">3.启动nacos
进入安装目录的 bin 目录下,直接双击 startup.cmd 文件,但是这样默认是以集群模式启动的 nacos,此时就会读取集群的一些配置文件,可能会导致一些报错,所以我们可以通过 cmd 命令行来指定运行时的一些配置,比如下面命令指定以单体模式运行 nacos:
startup.cmd -m standalone
http://127.0.0.1:8848/nacos 即可访问到 nacos,如下:
默认的登录账户和密码都是 nacos。
快速开始
1.添加Maven依赖
在子模块 order-service 中添加客户端依赖:
2.添加配置
3.启动
启动order-service 的入口启动类即可,可以在 nacos 页面中的服务列表中看到 order-service 已经注册成功。如下:
集群部署
其中包含3个nacos节点,然后一个负载均衡器代理3个Nacos。这里负载均衡器可以使用nginx
三个nacos节点的地址:
节点 | ip | port |
nacos1 | 127.0.0.1 | 8848 |
nacos2 | 127.0.0.1 | 8849 |
nacos3 | 127.0.0.1 | 8850 |
搭建步骤
1.搭建数据库,初始化数据库表结构
首先新建一个数据库,命名为nacos,而后导入下面的SQL
nacos">2.配置nacos
进入nacos的conf目录,修改配置文件cluster.conf.example,重命名为cluster.conf:
修改cluster.conf:添加内容:
修改application.properties文件,添加数据库配置:
nacos%E9%9B%86%E7%BE%A4">3.启动nacos集群
将nacos文件夹复制三份,分别命名为:nacos1、nacos2、nacos3
然后分别修改三个文件夹中的application.properties,修改端口号为:
然后分别启动三个nacos节点:
startup.cmd
4.nginx反向代理
修改conf/nginx.conf文件,配置如下:
java">upstream nacos-cluster {server 127.0.0.1:8848;server 127.0.0.1:8849;server 127.0.0.1:8850;
}
server {listen 7001;server_name localhost;
location /nacos {proxy_pass http://nacos-cluster;}
}
而后在浏览器访问:http://localhost:7001/nacos即可。
代码中application.yml文件配置如下:
注意:
实际部署时,需要给做反向代理的nginx服务器设置一个域名,这样后续如果有服务器迁移nacos的客户端也无需更改配置.
Nacos的各个节点应该部署到多个不同服务器,做好容灾和隔离
运行机制
nacos 运行机制支持服务注册和服务拉取,都支持服务提供者心跳方式做健康检测。但是 nacos 不仅仅可以由服务区拉取服务列表,也可以由注册中心主动推送服务变更信息给服务,这样服务得到的服务清单能得到及时更新。并且 nacos 中的服务还区分临时实例和非临时实例。
临时实例和非临时实例的区别:
临时实例:nacos 采用心跳模式来检测临时实例的状态,也就是需要由服务实例来主动发出心跳。临时实例如果心跳不正常则会被直接剔除
非临时实例:nacos 采用主动检测模式来检测非临时实例的状态,也就是由注册中心主动去询问实例的状态。非临时实例状态异常并不会被剔除。
默认情况下,在 nacos 中注册的服务实例都是临时实例。要想修改为非临时实例,可以通过修改服务的配置文件来实现,只需修改 spring.cloud.nacos.discover.ephemeral 属性即可,如下:
Nacos与Eureka的区别
Nacos与Eureka的区别如下:
1.Nacos 支持服务端主动检测提供者状态:临时实例采用心跳模式,非临时实例采用主动检测模式
2.临时实例心跳不正常会被剔除,非临时实例则不会被剔除
3.Nacos 支持服务列表变更的消息推送模式,服务列表更新更及时
4.Nacos 集群默认采用AP方式,当集群中存在非临时实例时,采用CP模式;Eureka采用AP方式。