Nacos配置中心介绍与应用,微服务开发标配组件

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
注册配置 MSE Nacos/ZooKeeper,118元/月
云原生网关 MSE Higress,422元/月
简介: Nacos 动态配置服务可以让你以中心化、外部化和动态化的方式管理所有环境的应用配置和服务配置。动态配置消除了配置变更时重新部署应用和服务的需要,让配置管理变得更加高效和敏捷。

配置中心作为分布式微服务开发的标配组件,业界已有很多成功的典型应用,如:携程 Apollo 分布式配置中心、百度 Disconf 分布式配置中心等。盘古开发框架配置中心基于阿里的 Nacos 提供动态配置服务。

鉴于文档可读性,盘古教程和参考范例都使用的本地配置的方式。本文将介绍如何基于配置中心让盘古应用获得动态配置服务的能力。在实际应用中,如无特殊需求我们一般都建议采用配置中心的方式来开发。

配置中心介绍

Nacos 动态配置服务可以让你以中心化、外部化和动态化的方式管理所有环境的应用配置和服务配置。动态配置消除了配置变更时重新部署应用和服务的需要,让配置管理变得更加高效和敏捷。配置中心化管理让实现无状态服务变得更简单,让服务按需弹性扩展变得更容易。它还提供了一个简洁易用的 UI 帮助你管理所有的服务和应用的配置,包括配置版本跟踪、金丝雀发布、一键回滚配置等一系列开箱即用的配置管理特性,帮助你更安全地在生产环境中管理配置变更和降低配置变更带来的风险。

  • 快速 QA:前文中 Nacos 用于服务注册,为什么配置中心也是它?

    Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。致力于发现、配置和管理微服务,完美的整合了配置中心和服务注册中心。因此,Nacos 不仅是服务注册中心也是功能完善的分布式配置中心。

  • 快速 QA:单体分层架构的开发模式也可以使用配置中心进行配置吗?

    配置中心是分布式微服务架构开发环境下强烈建议的必选标配组件。但如果你是基于单体分层架构开发,配置中心也是一样可以使用的。对于这些基础能力,无论是微服务还是单体,盘古框架都做了完美适配,只需要依赖 pangu-spring-boot-starter 就可以实现开箱即用。

相关名词解释

命名空间

用于进行租户粒度的配置隔离。不同的命名空间下,可以存在相同的 Group 或 Data ID 的配置。Namespace 的常用场景之一是不同环境的配置的区分隔离,例如开发测试环境和生产环境的资源(如配置、服务)隔离等。

配置管理

系统配置的编辑、存储、分发、变更管理、历史版本管理、变更审计等所有与配置相关的活动。

配置项

一个具体的可配置的参数与其值域,通常以 param-key=param-value 的形式存在。例如我们常配置系统的日志输出级别( logLevel=INFO|WARN|ERROR )就是一个配置项。

配置集

一组相关或者不相关的配置项的集合称为配置集。在系统中,一个配置文件通常就是一个配置集,包含了系统各个方面的配置。例如,一个配置集可能包含了数据源、线程池、日志级别等配置项。

配置集ID

Nacos 中的某个配置集的 ID。配置集 ID 是组织划分配置的维度之一。一个系统或者应用可以包含多个配置集,每个配置集都可以被一个有意义的名称标识。(比如:使用应用名称作为 Data ID)

配置快照

Nacos 的客户端 SDK 会在本地生成配置的快照。当客户端无法连接到 Nacos Server 时,可以使用配置快照显示系统的整体容灾能力。配置快照类似于 Git 中的本地 commit,也类似于缓存,会在适当的时机更新,但是并没有缓存过期( expiration )的概念。

本地配置与配置中心对比

  • 本地配置(配置文件)

    • 配置分散、与应用耦合、静态配置
    • 无环境隔离无版本支持,容易引发生产事故
    • 无安全审计
  • 配置中心

    • 配置集中、外部化、动态化实时生效
    • 多环境隔离多版本支持,较安全
    • 配置权限控制、操作变更审计

配置中心实战

下面介绍一个使用配置中心的例子。其它基于本地配置的范例都可以参考这个例子改为基于配置中心的动态配置。

安装相关盘古模块

  • 盘古 Parent:pangu-parent
  • 基础模块:pangu-spring-boot-starter

本地配置

基于配置中心的配置也是需要一个本地配置文件的,但这个配置文件是固定的模版格式。用于配置一些与配置中心进行数据通信相关的基础类参数。如下所示。

spring.application.name=pangu-examples-config-remote-nacos
spring.profiles.active=${spring.profiles.active:dev}
nacos.config.bootstrap.enable=true
nacos.config.bootstrap.log-enable=true
nacos.config.auto-refresh=true
nacos.config.namespace=${nacos.namespace:pangu-dev}
nacos.config.server-addr=${nacos.server-addr:127.0.0.1:8848}
#nacos.config.type=yaml
nacos.config.type=properties
nacos.config.data-id=${spring.application.name}

关键配置项说明

  • nacos.config.auto-refresh

配置中心的配置变更后自动刷新到配置客户端

  • nacos.config.namespace

命名空间(注意是对应命名空间的 ID 值),建议使用命名空间来区分部署环境

  • nacos.config.server-addr

配置中心通信地址

  • nacos.config.type

配置中心使用的配置格式( properties、yaml 等)

  • nacos.config.data-id

配置中心某配置集的唯一标识

配置中心配置

在进行完上述本地配置后,我们的应用就能和配置中心进行数据同步了。现在根据本地配置信息在配置中心创建相对应的命名空间和同名 data-id 的配置集。

  • 快速 QA:客户端是如何与 Nacos 配置中心进行数据同步的?

    客户端通过 http 长轮询机制拉取 nacos server 端的配置数据,并会在本地创建配置快照(容灾)。在长轮询的超时等待过程中,nacos server 端如果配置发生改变,会主动将配置写入 response 并返回,模拟了“推送”效果。所以客户端能实时感知配置中心的配置变化。

创建命名空间

在 Nacos 管理系统的『命名空间』菜单新建 ID 为 pangu-dev 的命名空间(此 ID 即为上述配置项 nacos.config.namespace 的值)。如下图所示。

5-pangu-framework-nacos.png

创建配置集

一个命名空间下可以创建多组配置集,每个配置集由 data-id 来唯一标识。在 Nacos 管理系统的『配置管理-配置列表』菜单新建 data-id 值为 pangu-examples-config-remote-nacos 的配置集。如下图所示。

  • 配置集列表

6-pangu-framework-nacos.png

  • 新增/编辑配置集

7-pangu-framework-nacos.png

启动入口

@SpringBootApplication
public class NacosConfigurationApplication {
    public static void main(String[] args) {
        PanGuApplicationBuilder.init(NacosConfigurationApplication.class).run(args);
    }
}

使用配置

至此,我们就可以在应用中使用 @NacosValue 注解来获取配置项了。如下代码所示。

/**
 * 开启 autoRefreshed配置项, 可以实现参数的动态刷新
 */
@NacosValue(value = "${demo.app.id}")
private String appId;
@NacosValue(value = "${demo.app.name}", autoRefreshed = true)
private String appName;
@NacosValue(value = "${demo.app.author}", autoRefreshed = true)
private String appAuthor;
  • 快速 QA:范例只演示了几个简单的变量参数,数据库等中间件的连接配置信息可以放配置中心吗?

    当然是可以的,干就完了。

彩蛋:基于配置中心的日志级别热切换

为了增强日志输出的可观测性,盘古基础模块实现了基于配置中心的日志级别热切换能力。只需要在配置中心修改或新增日志级别配置,则对应的日志输出级别即刻实时生效。

#日志
logging.level.root=INFO
logging.level.com.gitee.pulanos.pangu=INFO

本文相关范例源码

  • pangu-examples-config-remote-nacos:配置中心参考范例
  • pangu-examples-log-dynamic:基于配置中心的日志级别热切换参考范例

下一步

继续阅读其它章节获取你想要的答案或通过我们的开发者社区寻求更多帮助。

彩蛋

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
7天前
|
运维 监控 Java
后端开发中的微服务架构实践与挑战####
在数字化转型加速的今天,微服务架构凭借其高度的灵活性、可扩展性和可维护性,成为众多企业后端系统构建的首选方案。本文深入探讨了微服务架构的核心概念、实施步骤、关键技术考量以及面临的主要挑战,旨在为开发者提供一份实用的实践指南。通过案例分析,揭示微服务在实际项目中的应用效果,并针对常见问题提出解决策略,帮助读者更好地理解和应对微服务架构带来的复杂性与机遇。 ####
|
12天前
|
运维 Kubernetes Docker
深入理解容器化技术及其在微服务架构中的应用
深入理解容器化技术及其在微服务架构中的应用
28 1
|
27天前
|
监控 Java 测试技术
Nacos 配置中心变更利器:自定义标签灰度
本文是对 MSE Nacos 应用自定义标签灰度的功能介绍,欢迎大家升级版本进行试用。
114 10
|
26天前
|
监控 Go API
Go语言在微服务架构中的应用实践
在微服务架构的浪潮中,Go语言以其简洁、高效和并发处理能力脱颖而出,成为构建微服务的理想选择。本文将探讨Go语言在微服务架构中的应用实践,包括Go语言的特性如何适应微服务架构的需求,以及在实际开发中如何利用Go语言的特性来提高服务的性能和可维护性。我们将通过一个具体的案例分析,展示Go语言在微服务开发中的优势,并讨论在实际应用中可能遇到的挑战和解决方案。
|
27天前
|
Go 数据处理 API
Go语言在微服务架构中的应用与优势
本文摘要采用问答形式,以期提供更直接的信息获取方式。 Q1: 为什么选择Go语言进行微服务开发? A1: Go语言的并发模型、简洁的语法和高效的编译速度使其成为微服务架构的理想选择。 Q2: Go语言在微服务架构中有哪些优势? A2: 主要优势包括高性能、高并发处理能力、简洁的代码和强大的标准库。 Q3: 文章将如何展示Go语言在微服务中的应用? A3: 通过对比其他语言和展示Go语言在实际项目中的应用案例,来说明其在微服务架构中的优势。
|
25天前
|
监控 持续交付 Docker
Docker 容器化部署在微服务架构中的应用有哪些?
Docker 容器化部署在微服务架构中的应用有哪些?
|
25天前
|
监控 持续交付 Docker
Docker容器化部署在微服务架构中的应用
Docker容器化部署在微服务架构中的应用
|
27天前
|
监控 API 持续交付
后端开发中的微服务架构实践与挑战####
本文深入探讨了微服务架构在后端开发中的应用,分析了其优势、面临的挑战以及最佳实践策略。不同于传统的单体应用,微服务通过细粒度的服务划分促进了系统的可维护性、可扩展性和敏捷性。文章首先概述了微服务的核心概念及其与传统架构的区别,随后详细阐述了构建微服务时需考虑的关键技术要素,如服务发现、API网关、容器化部署及持续集成/持续部署(CI/CD)流程。此外,还讨论了微服务实施过程中常见的问题,如服务间通信复杂度增加、数据一致性保障等,并提供了相应的解决方案和优化建议。总之,本文旨在为开发者提供一份关于如何在现代后端系统中有效采用和优化微服务架构的实用指南。 ####
|
29天前
|
消息中间件 设计模式 运维
后端开发中的微服务架构实践与挑战####
本文深入探讨了微服务架构在现代后端开发中的应用,通过实际案例分析,揭示了其在提升系统灵活性、可扩展性及促进技术创新方面的显著优势。同时,文章也未回避微服务实施过程中面临的挑战,如服务间通信复杂性、数据一致性保障及部署运维难度增加等问题,并基于实践经验提出了一系列应对策略,为开发者在构建高效、稳定的微服务平台时提供有价值的参考。 ####
|
1月前
|
网络安全 Nacos 开发者
Nacos作为流行的微服务注册与配置中心,“节点提示暂时不可用”是常见的问题之一
Nacos作为流行的微服务注册与配置中心,其稳定性和易用性备受青睐。然而,“节点提示暂时不可用”是常见的问题之一。本文将探讨该问题的原因及解决方案,帮助开发者快速定位并解决问题,确保服务的正常运行。通过检查服务实例状态、网络连接、Nacos配置、调整健康检查策略等步骤,可以有效解决这一问题。
35 4