高效搭建Nacos:实现微服务的服务注册与配置中心

本文涉及的产品
注册配置 MSE Nacos/ZooKeeper,118元/月
云原生网关 MSE Higress,422元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: Nacos(Dynamic Naming and Configuration Service)是阿里巴巴开源的一款动态服务发现、配置管理和服务管理平台。它旨在帮助开发者更轻松地构建、部署和管理分布式系统,特别是在微服务架构中。

一、关于Nacos

1.1 简介

Nacos(Dynamic Naming and Configuration Service)是阿里巴巴开源的一款动态服务发现、配置管理和服务管理平台。它旨在帮助开发者更轻松地构建、部署和管理分布式系统,特别是在微服务架构中。Nacos 提供了简单易用的界面和丰富的功能,使得服务注册与发现、配置管理等操作变得更加直观和高效。

image

微服务生态组件

image

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 特性

  1. 服务发现
  • 动态注册与发现:支持基于DNS和HTTP的服务发现机制,让服务可以自动注册到Nacos,并允许其他服务通过名称查找它们。
  • 健康检查:内置健康检查机制,确保只有健康的实例能够被发现。
  • 多数据中心支持:支持跨多个数据中心的服务注册与发现,有助于实现高可用性和地理冗余。
  1. 配置管理
  • 动态配置管理:提供集中式的配置管理能力,支持配置的实时更新,无需重启应用即可生效。
  • 版本控制:为配置项提供历史版本记录,方便回滚和审计。
  • 加密存储:支持敏感数据的加密存储,保障配置的安全性。
  1. 服务管理
  • 命名空间隔离:支持多租户模式,不同业务或团队可以在各自的命名空间内独立管理自己的服务和配置。
  • 分组管理:通过分组对服务进行分类管理,便于组织和维护。
  • 权限控制:提供细粒度的权限控制,确保只有授权用户才能访问特定资源。

1.4 组件架构

Nacos 的架构主要分为以下几个核心组件:

  1. Nacos Server

    • Nacos Server 是整个 Nacos 系统的核心,负责服务注册与发现、配置管理、健康检查等任务。
    • 它可以分布式部署,并通过一致性协议(如 Raft)保证集群中所有节点的数据一致性。
  2. Nacos Client

    • Nacos Client 是应用程序的客户端,它负责与 Nacos Server 进行交互,进行服务的注册、发现、配置读取等操作。
    • 在微服务中,服务提供者和消费者都通过 Nacos Client 进行服务注册和发现。
  3. Nacos Console

    • Nacos Console 是一个 web 界面,用于服务和配置的管理。通过控制台,用户可以注册和管理服务,查看服务的健康状况,修改配置,查看配置版本等。
    • 控制台通常部署在 Nacos Server 上,提供一个方便的操作界面。
  4. 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 提供了两种两种部署运行模式:单机模式​和集群模式

image-20241228110011410

单机模式

单机模式又称单例模式​, 拥有所有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

image-20230704212405167

image-20230705000454179

image-20230705000854389

解压后得到文件

image-20230705000918750

(3)配置

数据库建库

在mysql中新建数据库,库的名称nacos_config

image-20230705002317506

image-20230705002718717

数据库建表

打开nacos中conf文件夹,复制nacos-mysql.sql中的sql语句,在mysql中执行

image-20230705001914067

image-20230705002631256

image-20230705002747480

数据库配置连接

打开nacos中conf文件夹,修改application.properties文件

image-20230504113939851

去掉注释,修改数据库地址,库名,账号,密码

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

image-20230705004709879

在默认的Nacos server配置中,不会对客户端鉴权,即任何能访问Nacos server的用户,都可以直接获取Nacos中存储的配置。

开启Nacos server的鉴权。在Nacos server上修改application.properties中的nacos.core.auth.enabled值为true即可:

nacos.core.auth.enabled=true

image-20230705004910167

启动配置

到/bin/startup.cmd脚本,然后配置单机模式:set MODE\="standalone",保存后双击即可运行

image-20230705003919319

image-20230705004003320

(4)启动

正常双击startup.cmd脚本,部分需要以管理员运行

image-20230504113555317

image-20230504113616808

image-20230705215601669

(5)浏览器访问

http://127.0.0.1:8848/nacos/#/login

账号:nacos

密码:nacos

image-20230504113641568

通过本文的介绍,我们已经了解了 Nacos 的基本概念,并掌握了传统安装方式。Nacos 作为一个功能强大的服务发现和配置管理平台,在微服务架构中扮演着至关重要的角色,为系统的可靠性、可扩展性和灵活性提供了强有力的保障。

接下来,我们将深入探讨 Nacos 的核心功能,重点介绍如何利用 Nacos 实现高效的配置中心注册中心功能。无论是配置管理还是服务治理,Nacos 都能提供丰富的功能和灵活的扩展方式,帮助开发者轻松实现分布式系统中的服务管理和配置控制。

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
2月前
|
监控 网络协议 Nacos
Nacos:构建微服务架构的基石
Nacos:构建微服务架构的基石
113 2
|
20天前
|
JSON Java Nacos
SpringCloud 应用 Nacos 配置中心注解
在 Spring Cloud 应用中可以非常低成本地集成 Nacos 实现配置动态刷新,在应用程序代码中通过 Spring 官方的注解 @Value 和 @ConfigurationProperties,引用 Spring enviroment 上下文中的属性值,这种用法的最大优点是无代码层面侵入性,但也存在诸多限制,为了解决问题,提升应用接入 Nacos 配置中心的易用性,Spring Cloud Alibaba 发布一套全新的 Nacos 配置中心的注解。
128 13
|
2月前
|
Java 网络安全 Nacos
Nacos作为流行的微服务注册与配置中心,其稳定性与易用性广受好评
Nacos作为流行的微服务注册与配置中心,其稳定性与易用性广受好评。然而,“客户端不发送心跳检测”是使用中常见的问题之一。本文详细探讨了该问题的原因及解决方法,包括检查客户端配置、网络连接、日志、版本兼容性、心跳检测策略、服务实例注册状态、重启应用及环境变量等步骤,旨在帮助开发者快速定位并解决问题,确保服务正常运行。
51 5
|
2月前
|
监控 Java 测试技术
Nacos 配置中心变更利器:自定义标签灰度
本文是对 MSE Nacos 应用自定义标签灰度的功能介绍,欢迎大家升级版本进行试用。
167 12
|
2月前
|
Dubbo Cloud Native 应用服务中间件
阿里云的 Dubbo 和 Nacos 深度整合,提供了高效的服务注册与发现、配置管理等关键功能,简化了微服务治理,提升了系统的灵活性和可靠性。
在云原生时代,微服务架构成为主流。阿里云的 Dubbo 和 Nacos 深度整合,提供了高效的服务注册与发现、配置管理等关键功能,简化了微服务治理,提升了系统的灵活性和可靠性。示例代码展示了如何在项目中实现两者的整合,通过 Nacos 动态调整服务状态和配置,适应多变的业务需求。
45 2
|
2月前
|
设计模式 Java API
微服务架构演变与架构设计深度解析
【11月更文挑战第14天】在当今的IT行业中,微服务架构已经成为构建大型、复杂系统的重要范式。本文将从微服务架构的背景、业务场景、功能点、底层原理、实战、设计模式等多个方面进行深度解析,并结合京东电商的案例,探讨微服务架构在实际应用中的实施与效果。
142 6
|
2月前
|
设计模式 Java API
微服务架构演变与架构设计深度解析
【11月更文挑战第14天】在当今的IT行业中,微服务架构已经成为构建大型、复杂系统的重要范式。本文将从微服务架构的背景、业务场景、功能点、底层原理、实战、设计模式等多个方面进行深度解析,并结合京东电商的案例,探讨微服务架构在实际应用中的实施与效果。
54 1
|
26天前
|
Java 开发者 微服务
从单体到微服务:如何借助 Spring Cloud 实现架构转型
**Spring Cloud** 是一套基于 Spring 框架的**微服务架构解决方案**,它提供了一系列的工具和组件,帮助开发者快速构建分布式系统,尤其是微服务架构。
149 68
从单体到微服务:如何借助 Spring Cloud 实现架构转型
|
25天前
|
运维 监控 持续交付
微服务架构解析:跨越传统架构的技术革命
微服务架构(Microservices Architecture)是一种软件架构风格,它将一个大型的单体应用拆分为多个小而独立的服务,每个服务都可以独立开发、部署和扩展。
160 36
微服务架构解析:跨越传统架构的技术革命
|
4月前
|
安全 应用服务中间件 API
微服务分布式系统架构之zookeeper与dubbo-2
微服务分布式系统架构之zookeeper与dubbo-2