18. Nacos安装运行及简介
一、Nacos概述
使用 Nacos 简化服务发现、配置管理、服务治理及管理的解决方案,让微服务的发现、管理、共享、组合更加容易。Nacos = Eureka + Config + bus可以替代Eureka做服务注册中心,可以替代Config做服务配置中心,是不是很强大。
1.1 Nacos是什么?
Nacos: /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service的首字母简称。
由官网可知:Nacos是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。
Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。
Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。
1.2 Nacos与SpringCloud Alibaba
阿里为 SpringCloud 贡献了一个子项目,叫做 SpringCloud Alibaba,其中包括了微服务开发中的几个基础组件:
- Sentinel – 提供流控、服务降级、熔断能力,为系统提供防护。
- Nacos – 负责服务注册与发现,还有分布式配置。
- RocketMQ – 用于实现事件驱动模式、消息总线,已经整合了 SpringCloud Stream。
- Seata – 用于实现分布式事务。
- Dubbo RPC – 使用 RPC 进行服务调用。
Nacos 是国产的,是阿里开源的。Nacos 就是SpringCloud Alibaba项目中的一项重要组件。
2. Nacos 的关键特性
2.1 服务发现和服务健康监测
Nacos 支持基于 DNS 和基于 RPC (Dubbo / gRPC) 的服务发现。 服务消费者可以使用DNS或HTTP&API查找和发现服务。 Nacos 提供对服务的实时的健康检查,阻止向不健康的主机或服务实例发送请求。 Nacos 支持传输层 (PING 或 TCP)和应用层 (如 HTTP、MySQL、用户自定义)的健康检查。 对于复杂的云环境和网络拓扑环境中(如 VPC、边缘网络等)服务的健康检查,Nacos 提供了 agent 上报模式和服务端主动检测2种健康检查模式。 Nacos 还提供了统一的健康检查仪表盘,根据健康状态管理服务的可用性及流量。
2.2 动态配置服务
中心化、外部化和动态化的方式管理所有环境的应用配置和服务配置。 配置变更时不需要重新部署。 使服务按需弹性扩展变得更容易。 Nacos 提供了一个简洁易用的UI(控制台界面) 。 Nacos 还提供包括配置版本跟踪、灰度发布、一键回滚配置以及客户端配置更新状态跟踪在内的一系列开箱即用的配置管理特性。
2.3 动态 DNS 服务
动态 DNS 服务支持权重路由。 动态DNS服务还能让容易地实现以 DNS 协议为基础的服务发现,消除耦合到厂商私有服务发现 API 上的风险。 Nacos可以管理服务的关联域名和可用的 IP:PORT 列表.
2.4 服务及其元数据管理
Nacos 可以管理数据中心的所有服务及元数据,包括管理服务的描述、生命周期、服务的静态依赖分析、服务的健康状态、服务的流量管理、路由及安全策略、服务的 SLA 以及最首要的 metrics 统计数据。
服务元数据
是指包括服务端点(endpoints)、服务标签、服务版本号、服务实例权重、路由规则、安全策略等描述服务的数据。
3. 基本概念及架构
3.1 关于Nacos 你需要知道的
Nacos 无缝支持一些主流的开源生态
:Spring Cloud、Apache Dubbo and Dubbo Mesh、Kubernetes and CNCF等。
Nacos 引入了一些基本的概念
:如命名空间、配置项、配置集 ID等等:我们可以在官网具体了解一下。
两种交付工件
:Nacos 支持标准 Docker 镜像(TODO: 0.2版本开始支持)及 zip(tar.gz)压缩包的构建物。
两种启动模式
:Nacos 支持将注册中心(Service Registry)与配置中心(Config Center) 在一个进程合并部署或者将2者分离部署的两种模式。
Nacos 数据模型
:Key 由三元组唯一确定, Namespace默认是空串,公共命名空间(public),分组默认是 DEFAULT_GROUP。
免费的公有云服务模式
:除了自己部署和启动 Nacos 服务之外,在阿里云公有云的商业产品中会提供 Nacos 的免费的公有云服务。
Nacos提供简单的鉴权实现
,Nacos是一个内部微服务组件,需要在可信的内部网络中运行,不可暴露在公网环境,防止带来安全风险。为防止业务错用的弱鉴权体系,不是防止恶意攻击的强鉴权体系。
nacos端口占用
:nacos的默认端口是8848,但是他还占用了另外两个接口:9848、9849。
3.2 逻辑架构及其组件
4. 安装运行Nacos
可以下载源码或者安装包的方式来获取 Nacos (确保Java 及Maven环境ok)。
1)Github源码方式、Mac环境为例操作一下(比较慢,不推荐):
# 下载编译打包布署到本地maven仓库
moon@moondeiMac % git clone https://github.com/alibaba/nacos.git
moon@moondeiMac % cd nacos/
moon@moondeiMac nacos % mvn -Prelease-nacos -Dmaven.test.skip=true clean install -U
moon@moondeiMac nacos % ls -al distribution/target/
# 进入相应版本的bin目录,启动服务器
moon@moondeiMac nacos % cd distribution/target/nacos-server-$version/nacos/bin
# 启动命令(standalone代表着单机模式运行,非集群模式):
moon@moondeiMac bin % sh startup.sh -m standalone
#关闭服务器bin下执行:sh shutdown.sh即可
2)也可以选择想下载的版本,直接下载压缩包方式获取(比较快,推荐),然后解压。 下载链接:https://github.com/alibaba/nacos/releases
moon@moondeiMac % cd /Users/moon/Downloads/nacos-2.2.1
moon@moondeiMac nacos % mvn -Prelease-nacos -Dmaven.test.skip=true clean install -U
# 进入相应版本的bin目录,启动服务器
moon@moondeiMac nacos % cd distribution/target/nacos-server-2.2.1/nacos/bin
# 启动命令(standalone代表着单机模式运行,非集群模式):
moon@moondeiMac bin % sh startup.sh -m standalone
#关闭服务器bin下执行:sh shutdown.sh即可
参数说明: mvn clean install依次执行了clean、resources、compile、testResources、testCompile、test、jar(打包)、install等8个阶段 test.skip为 true,表示在 clean 过程中跳过测试 -U:该参数能强制让Maven检查所有SNAPSHOT依赖更新,确保集成基于最新的状态,如果没有该参数,Maven默认以天为单位检查更新
如果启动报错:Unsatisfied dependency expressed through field ‘jwtTokenManager’
参看解决办法
访问:http://localhost:8848/nacos可查看管理界面(用户名和密码都是nacos)
通过菜单我们也可以看到nacos的功能:配置管理、服务管理、命名空间、集群管理。
5. 服务注册中心对比
服务注册与发现框架 | CAP模型 | 控制台管理 | 社区活跃度 |
---|---|---|---|
Eureka | AP | 支持 | 低(2.x版本闭源) |
Zookeeper | CP | 不支持 | 中 |
Consul | CP | 支持 | 高 |
Nacos | AP | 支持 | 高 |
Nacos厉害在于支持AP和CP模式的切换,Nacos实例可以选择临时实例和持久化实例 临时实例:客户端上报健康状态,摘除不健康实例,非持久化 AP Eureka 持久化实例:服务端探测健康状态,保留不健康实例,持久化 CP Consul
关于Nacos项目集成下一节再详细聊聊。