一、关于Nacos
1.1 简介
Nacos(Dynamic Naming and Configuration Service)是阿里巴巴开源的一款动态服务发现、配置管理和服务管理平台。它旨在帮助开发者更轻松地构建、部署和管理分布式系统,特别是在微服务架构中。Nacos 提供了简单易用的界面和丰富的功能,使得服务注册与发现、配置管理等操作变得更加直观和高效。
微服务生态组件
1.2 发展
概览
Nacos(Dynamic Naming and Configuration Service)的发展历程反映了其从阿里巴巴内部项目成长为开源社区中备受关注的服务发现和配置管理平台的过程。以下是Nacos的主要发展历程:
早期背景
- 2008年:Nacos的起源可以追溯到阿里巴巴五彩石项目,该项目旨在完成微服务拆分和业务中台建设。随着阿里巴巴集团内部对微服务架构的需求增加,迫切需要一个高效的服务发现和配置管理工具。
开源与成长
- 2018年3月:Nacos首次正式对外开源,标志着它开始走向更广泛的开发者社区。
- 2018年8月:Nacos进入Apache软件基金会的孵化阶段,成为Apache的孵化项目。这一步极大地提升了Nacos在国际上的知名度,并吸引了更多贡献者加入。
功能迭代与版本发布
- 2019年3月:Nacos正式发布了多个稳定版本,持续改进性能、安全性和易用性。这一时期,Nacos逐渐形成了成熟的产品形态,广泛应用于阿里巴巴内外的各种业务场景。
- 2020年1月:发布Nacos 1.1.3版本引擎,支持在公有云环境全托管的方式使用Nacos作为注册中心,增强了其云端服务能力。
- 2020年7月:推出Nacos 1.2.1版本,引入元配置数据管理功能,允许微服务应用在运行时动态修改配置信息和路由规则等,进一步提升了灵活性和响应速度。
- 2020年:通过对1.X版本内核进行改造,Nacos 2.0专业版实现了性能提升10倍的目标,基本满足了用户对于微服务场景下的高性能需求。此外,还加强了SLA保障,在配置数据的安全性方面进行了优化,并通过MCP协议与Istio生态打通,成为Istio的注册中心之一。
持续发展与社区贡献
2021年及以后:Nacos继续快速迭代,陆续推出了多个新特性,包括但不限于:
- 更强的多租户支持,帮助不同团队或组织在同一个平台上独立管理各自的服务和配置。
- 改进后的健康检查机制,确保只有健康的实例能够被发现。
- 增加了对多种编程语言的支持,使得Nacos的应用范围更加广泛。
- 截至2024年:Nacos已经成为中国最活跃的开源项目之一,不仅在国内拥有庞大的用户群体,在全球范围内也获得了广泛关注。最新的GA版本为2.4.2,保持向下兼容至1.0.0版本,体现了其良好的稳定性与向后兼容能力。
版本
以下是Nacos版本的主要发展历程:
1. Nacos 1.0 版本(2018年发布)
- 发布背景:Nacos最早作为阿里巴巴微服务架构的一个核心组件出现,目的是为了解决在微服务场景下的服务发现和配置管理问题。
核心功能:
- 服务发现和健康检查
- 动态配置管理
- 动态DNS服务
- 分布式配置管理支持
特点:
- 提供简单的REST API,支持服务的注册与发现。
- 支持多种配置方式,包括基于文件、数据库和Nacos自带的存储机制。
- 初步支持Spring Cloud和Dubbo的集成。
2. Nacos 1.1.x 版本(2019年发布)
- 发布背景:该版本主要是对1.0版本进行增强和修复,加入更多的企业级功能。
新特性:
- 支持集群模式:通过集群模式,提高系统的可用性和扩展性。
- 改进的健康检查机制:增加了多种健康检查方式,支持基于HTTP、TCP等多协议的健康检查。
- 改进的配置管理:支持更为复杂的配置管理功能,如配置的灰度发布、版本控制、配置动态更新等。
3. Nacos 1.2.x 版本(2020年发布)
- 发布背景:该版本继续增强稳定性与功能,特别是服务发现和配置管理功能的进一步完善。
新特性:
- 支持更多的注册中心协议:比如支持与Kubernetes、Consul等平台的集成。
- 配置拉取增强:通过动态推送和增量更新机制,改善配置的实时同步性能。
- 改进的服务健康检查和容错机制。
- 支持命名空间:通过引入命名空间管理不同环境下的配置和服务发现,方便进行多环境隔离。
4. Nacos 2.x 版本(2021年发布)
- 发布背景:这是Nacos一个重要的版本,除了对核心功能的优化,还加入了一些新的特性和组件。
新特性:
- 性能提升:通过优化底层存储和分布式架构,提升了系统的性能和吞吐量,支持高并发、高可用的场景。
- 配置服务与服务发现的更紧密集成:Nacos 2.0对配置管理和服务发现的结合进行了更加紧密的设计,使得微服务在运行时能更加高效地管理配置与服务发现。
- 更好的易用性和扩展性:提供了更加完善的API,方便与其他微服务框架和中间件进行集成。
- 简化了架构设计:通过去掉了不必要的复杂功能,使得系统更加轻量化。
- 容器化和Kubernetes集成:进一步加强了对容器化环境和Kubernetes的支持,可以在Kubernetes集群中更方便地部署和管理。
5. Nacos 2.1.x 版本(2022年发布)
- 发布背景:该版本着重于提升高可用性和分布式系统的稳定性,同时也对Nacos的性能做了大量优化。
新特性:
- 多数据源支持:支持通过不同的数据源(如MySQL、PostgreSQL、Oracle等)来存储配置和服务信息。
- 增强的集群管理和分布式部署能力:支持分布式部署和高可用集群管理,进一步增强了Nacos的横向扩展能力。
- 权限管理:新增了更细粒度的权限管理,支持对不同的用户和角色分配不同的访问权限。
- 跨数据中心支持:加强了Nacos的跨数据中心部署能力。
6. Nacos 2.2.x 版本(2023年发布)
- 发布背景:该版本继续完善稳定性和性能,特别是在大规模集群环境中的表现。
新特性:
- 增强的动态配置管理:支持更多配置的自动化管理和多维度的灰度发布策略。
- 提升集群一致性:通过优化集群内部数据同步机制,提升了大规模分布式环境下的一致性和容错能力。
- 跨平台支持:加强了对多种平台的支持,包括云原生架构和容器化环境的适配。
- 更好的用户界面:改善了Nacos的Web控制台,使得用户可以更加方便地管理服务、配置和命名空间。
1.3 特性
- 服务发现
- 动态注册与发现:支持基于DNS和HTTP的服务发现机制,让服务可以自动注册到Nacos,并允许其他服务通过名称查找它们。
- 健康检查:内置健康检查机制,确保只有健康的实例能够被发现。
- 多数据中心支持:支持跨多个数据中心的服务注册与发现,有助于实现高可用性和地理冗余。
- 配置管理
- 动态配置管理:提供集中式的配置管理能力,支持配置的实时更新,无需重启应用即可生效。
- 版本控制:为配置项提供历史版本记录,方便回滚和审计。
- 加密存储:支持敏感数据的加密存储,保障配置的安全性。
- 服务管理
- 命名空间隔离:支持多租户模式,不同业务或团队可以在各自的命名空间内独立管理自己的服务和配置。
- 分组管理:通过分组对服务进行分类管理,便于组织和维护。
- 权限控制:提供细粒度的权限控制,确保只有授权用户才能访问特定资源。
1.4 组件架构
Nacos 的架构主要分为以下几个核心组件:
Nacos Server:
- Nacos Server 是整个 Nacos 系统的核心,负责服务注册与发现、配置管理、健康检查等任务。
- 它可以分布式部署,并通过一致性协议(如 Raft)保证集群中所有节点的数据一致性。
Nacos Client:
- Nacos Client 是应用程序的客户端,它负责与 Nacos Server 进行交互,进行服务的注册、发现、配置读取等操作。
- 在微服务中,服务提供者和消费者都通过 Nacos Client 进行服务注册和发现。
Nacos Console:
- Nacos Console 是一个 web 界面,用于服务和配置的管理。通过控制台,用户可以注册和管理服务,查看服务的健康状况,修改配置,查看配置版本等。
- 控制台通常部署在 Nacos Server 上,提供一个方便的操作界面。
Nacos Storage:
- Nacos 提供了多个存储选项,可以通过关系型数据库(如 MySQL)或本地文件系统来存储服务和配置信息。
1.5 应用场景
Nacos(Naming and Configuration Service)是一个开源的动态服务发现、配置管理和服务管理平台,广泛应用于微服务架构中。它为分布式系统提供了服务发现、配置管理、动态DNS服务等多种功能。以下是Nacos的典型应用场景:
1. 微服务架构中的服务发现与注册
- 场景描述:在微服务架构中,服务实例通常是动态变化的,服务的注册和发现至关重要。Nacos通过提供服务注册与发现功能,帮助系统自动化管理服务实例。
使用方式:
- 服务注册:每个微服务启动时向Nacos注册自己的信息(如IP地址、端口号、元数据等)。
- 服务发现:其他服务通过Nacos查询到目标服务的地址,实现动态调用。
适用场景:
- 微服务架构中,多个服务实例需要根据实时变化进行动态发现。
- 需要自动化的负载均衡和故障切换。
2. 动态配置管理
- 场景描述:在微服务或分布式系统中,配置项可能在多个服务中使用。Nacos提供集中式配置管理,能够支持配置的动态加载和实时推送,避免了手动更新配置文件的麻烦。
使用方式:
- 配置文件(如YAML、JSON等)保存在Nacos配置中心,服务通过Nacos动态获取配置。
- 支持配置的热更新和灰度发布,配置变更时可以实时推送到应用。
适用场景:
- 需要集中管理微服务配置,配置变动频繁,且希望能自动更新到所有实例。
- 微服务系统中,不同服务的配置可能依赖于不同环境(如开发、测试、生产等),需要通过命名空间进行隔离。
3. 多环境和多集群管理
- 场景描述:在跨多个环境(开发、测试、生产)和多个数据中心或集群的应用场景下,Nacos通过命名空间和多集群的支持,帮助用户灵活地管理不同环境下的服务和配置。
使用方式:
- 通过命名空间将不同环境的配置进行隔离,确保不同环境配置不相互干扰。
- Nacos的多集群支持可用于跨地域的部署,支持多个数据中心的高可用和容灾。
适用场景:
- 企业需要管理多个环境和多个集群,且希望能通过统一的配置管理平台来控制。
- 配置管理需要跨多个地域或数据中心,确保高可用和容错能力。
4. 服务治理与动态负载均衡
- 场景描述:在分布式系统中,服务治理是一个重要环节,Nacos不仅提供服务发现和注册,还与负载均衡器(如Nginx、Spring Cloud Load Balancer等)结合,支持动态调整负载均衡策略。
使用方式:
- 服务实例注册到Nacos,其他服务通过Nacos进行服务发现并根据权重等策略动态进行负载均衡。
- Nacos还可以与API网关进行集成,支持基于规则的流量路由和熔断机制。
适用场景:
- 需要对微服务流量进行细粒度控制和动态负载均衡。
- 系统需要支持高可用性,出现故障时可以自动切换到健康的服务实例。
5. 动态DNS与服务名称解析
- 场景描述:Nacos提供DNS功能,可以将服务实例的域名映射到动态的服务实例地址,实现动态DNS解析。
使用方式:
- 服务注册后,Nacos将服务实例与DNS记录进行绑定,外部客户端通过DNS访问服务。
- 支持基于服务名称的DNS解析,无需关心服务的实际IP地址。
适用场景:
- 服务实例的IP地址动态变化,客户端需要通过域名访问服务。
- 想要简化服务调用的网络层级,使用统一的域名进行访问。
6. 容器化和Kubernetes环境下的配置管理
- 场景描述:在Kubernetes等容器化环境中,微服务的生命周期可能较短,服务实例动态变化频繁。Nacos可以与Kubernetes进行集成,帮助容器化应用进行服务发现、配置管理和动态DNS等操作。
使用方式:
- 通过Kubernetes的服务发现与Nacos的服务发现结合,自动管理Pod的注册和发现。
- 使用Nacos管理容器中的配置文件,并支持动态加载和更新。
适用场景:
- 在Kubernetes集群或其他容器化平台上运行的微服务应用,需要集中管理服务和配置。
- 动态增加、缩减或更新容器实例时,希望自动更新配置并确保服务可用性。
7. 分布式系统中的元数据管理
- 场景描述:分布式系统中的微服务通常需要使用元数据(如服务版本、环境信息等)进行管理。Nacos支持服务的元数据存储,可以为服务注册提供更丰富的信息。
使用方式:
- 服务在注册时,可以携带元数据(如版本号、环境类型等),Nacos存储这些信息供其他服务查询。
适用场景:
- 需要管理服务的版本信息、部署环境等元数据,并且允许其他服务根据这些元数据进行服务选择和调用。
- 对服务的元数据进行统一管理,便于后续的服务治理和版本控制。
8. 分布式系统中的容错与熔断
- 场景描述:在大规模分布式系统中,服务可能因为各种原因(如网络故障、服务过载等)出现不可用。Nacos可以帮助管理服务的健康状况并与熔断机制结合,提升系统的容错能力。
使用方式:
- 通过健康检查,Nacos自动识别服务实例的健康状态,及时从负载均衡中剔除不健康的实例。
- 与Spring Cloud等微服务框架集成时,结合熔断器(如Hystrix)提供服务容错功能。
适用场景:
- 微服务系统需要具备自动恢复能力,避免因个别服务故障导致全系统不可用。
- 在高并发、高负载的场景下,系统需要动态调整服务调用,确保系统的高可用性。
二、安装部署
2.1 部署模式
Nacos 提供了两种两种部署运行模式:单机模式
和集群模式
单机模式
单机模式又称单例模式
, 拥有所有Nacos的功能及特性,具有极易部署、快速启动等优点。但无法与其他节点组成集群,无法在节点或网络故障时提供高可用能力。单机模式同样可以使用内置Derby数据库(默认)和外置数据库进行存储。
单机模式主要适合于工程师于本地搭建或于测试环境中搭建Nacos环境,主要用于开发调试及测试使用;也能够兼顾部分对稳定性和可用性要求不高的业务场景。
集群模式
集群模式通过自研一致性协议Distro以及Raft协议,将多个Nacos节点构建成了高可用的Nacos集群。数据将在集群中各个节点进行同步,保证数据的一致性。集群模式具有高可用、高扩展、高并发等优点,确保在故障发生时不影响业务的运行。集群模式默认采用外置数据库进行存储,但也可以通过内置数据库进行存储。
该模式主要适合于生产环境,也是社区最为推荐的部署模式。
2.2 安装步骤
这里展示传统安装方式,后续介绍docker安装,更快捷。
(1)环境准备
Nacos 依赖 Java 环境来运行,请确保是在以下版本环境中安装使用:
- 64 bit OS,支持 Linux/Unix/Mac/Windows,推荐选用 Linux/Unix/Mac。
- 64 bit JDK 1.8+;下载 & 配置。
这里以Windows环境安装
(2)下载安装包
home https://nacos.io/zh-cn/index.html
解压后得到文件
(3)配置
数据库建库
在mysql中新建数据库,库的名称nacos_config
数据库建表
打开nacos中conf文件夹,复制nacos-mysql.sql中的sql语句,在mysql中执行
数据库配置连接
打开nacos中conf文件夹,修改application.properties文件
去掉注释,修改数据库地址,库名,账号,密码
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=root
db.password.0=1234566
在默认的Nacos server配置中,不会对客户端鉴权,即任何能访问Nacos server的用户,都可以直接获取Nacos中存储的配置。
开启Nacos server的鉴权。在Nacos server上修改application.properties中的nacos.core.auth.enabled值为true即可:
nacos.core.auth.enabled=true
启动配置
到/bin/startup.cmd脚本,然后配置单机模式:set MODE\="standalone",保存后双击即可运行
(4)启动
正常双击startup.cmd脚本,部分需要以管理员运行
(5)浏览器访问
http://127.0.0.1:8848/nacos/#/login
账号:nacos
密码:nacos
通过本文的介绍,我们已经了解了 Nacos 的基本概念,并掌握了传统安装方式。Nacos 作为一个功能强大的服务发现和配置管理平台,在微服务架构中扮演着至关重要的角色,为系统的可靠性、可扩展性和灵活性提供了强有力的保障。
接下来,我们将深入探讨 Nacos 的核心功能,重点介绍如何利用 Nacos 实现高效的配置中心和注册中心功能。无论是配置管理还是服务治理,Nacos 都能提供丰富的功能和灵活的扩展方式,帮助开发者轻松实现分布式系统中的服务管理和配置控制。