目录
概念
架构
设计原则
架构分层
用户层
业务层
内核层
插件
单机部署
1.下载安装包
2.安装nacos
3.启动nacos
快速开始
1.添加Maven依赖
2.添加配置
3.启动
集群部署
搭建步骤
1.搭建数据库,初始化数据库表结构
2.配置nacos
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 系统的。
2.安装nacos
下面我们安装一个 window 系统版本的,安装 nacos 其实非常简单,只需将压缩包解压即可。
目录说明:
bin:启动脚本
conf:配置文件
data:数据文件
logs:日志
Nacos的默认端口是8848,如果你电脑上的其它进程占用了8848端口,请先尝试关闭该进程。如果无法关闭占用8848端口的进程,也可以进入安装目录的 conf/application.properties 文件,修改配置文件中的端口:
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
2.配置nacos
进入nacos的conf目录,修改配置文件cluster.conf.example,重命名为cluster.conf:
修改cluster.conf:添加内容:
修改application.properties文件,添加数据库配置:
3.启动nacos集群
将nacos文件夹复制三份,分别命名为:nacos1、nacos2、nacos3
然后分别修改三个文件夹中的application.properties,修改端口号为:
然后分别启动三个nacos节点:
startup.cmd
4.nginx反向代理
修改conf/nginx.conf文件,配置如下:
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方式。