微服务架构 | 2. 服务配置管理

本文涉及的产品
云原生网关 MSE Higress,422元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
注册配置 MSE Nacos/ZooKeeper,118元/月
简介: 将配置写入一个 config 常量类往往会有些问题,每次对配置进行更改时,应用程序都必须重新编译和重新部署;在少量的应用程序中可以将配置写在低层级的属性文件,如:YAML、JSON 或 XML;其中包含数据库和中间件连接信息,以及驱动应用程序行为的相关元数据;但是在处理可能包含数百个微服务的基于云的应用程序,其中每个微服务可能会运行多个服务实例时,需要对配置进行集中管理;

前言

参考资料
《Spring Microservices in Action》
《Spring Cloud Alibaba 微服务原理与实战》
《B站 尚硅谷 SpringCloud 框架开发教程 周阳》

将配置写入一个 config 常量类往往会有些问题,每次对配置进行更改时,应用程序都必须重新编译和重新部署;

在少量的应用程序中可以将配置写在低层级的属性文件,如:YAML、JSON 或 XML;其中包含数据库和中间件连接信息,以及驱动应用程序行为的相关元数据;

但是在处理可能包含数百个微服务的基于云的应用程序,其中每个微服务可能会运行多个服务实例时,需要对配置进行集中管理;


1. 配置管理基础知识

1.1 为什么需要配置管理

  • 将配置写入一个 config 常量类往往会有些问题,每次对配置进行更改时,应用程序都必须重新编译和重新部署;
  • 在少量的应用程序中可以将配置写在低层级的属性文件,如:YAML、JSON 或 XML;其中包含数据库和中间件连接信息,以及驱动应用程序行为的相关元数据;
  • 但是在处理可能包含数百个微服务的基于云的应用程序,其中每个微服务可能会运行多个服务实例时,需要对配置进行集中管理;

1.2 配置管理需要遵从的四个原则

  • 分离:将服务配置信息与服务的实际物理部署完全分开;
  • 抽象:将访问配置数据的功能抽象到一个服务接口;
  • 集中:将应用程序配置集中在尽可能少的存储库中 ;
  • 稳定:保证其高可用和冗余;

1.3 配置在什么时候被读取

微服务的生命周期

1.4 配置管理的架构概念

配置管理的架构概念

  • 配置管理的连接信息(连接凭据、服务端点等)将在微服务启动时被传递给微服务;
  • 配置管理的更改通常通过构建和部署管道来处理,其中配置的更改可以通过版本信息进行标记,并通过不同的环境进行部署;

1.5 配置管理有多种选择

在这里插入图片描述
配置管理的组件选择

1.6 Spring Cloud 的三种配置文件(.xml .yml 与 .properties)

  • .xml

    • 一种可扩展标记语言
    • 用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型;
    • 是一种允许用户对自己的标记语言进行定义的源语言;
    • 适合 Web 传输;
    • 用于引入 pom 依赖文件;
  • .yml(下称 yml)

    • 一种比 XML 更为简单易读的序列化语言,更像是一种数据格式
    • 也称 yaml,yml 文件扩展名是 yaml 的缩写;
    • 以数据为中心,比 json、xml 等更适合做配置文件;
    • 复杂配置建议用 yml。易读性强;
    • 支持的多种编程语言种类(支持python、go等大量编程语言);
    • 支持中文内容;
    • 支持列表
    • 优先加载,会被后加载的 properties 覆盖;
  • .properties(下称 properties)

    • 作用同 yml;
    • 简单配置用 properties;
    • properties 支持中文内容只能用 unicode 编码
    • 只支持键值对数据;
    • 加载优先级低,会覆盖 yml 的内容;

1.7 Spring Cloud 的两类配置文件(application 与 bootstrap)

  • application.ymlapplication.properties(以下统称:application)

    • 主要用于 Spring Boot 项目的自动化配置
    • 是用户级的资源配置项;
  • bootstrap.ymlbootstrap.properties(以下统称:bootstrap)

    • 是系统级的,由父 ApplicationContext 加载,加载优先于 application;
    • 主要用于从额外的资源来加载配置信息
    • 可以在本地外部配置文件中解密属性(用于加密/解密的场景);
    • 默认不能被本地相同配置覆盖
    • bootstrap可以理解成系统级别的一些参数配置,这些参数一般是不会变动的;
    • 使用 Spring Cloud Config 配置中心时,这时需要在 bootstrap 配置文件中添加连接到配置中心的配置属性来加载外部配置中心的配置信息;
    • 需要注意一个例外:若 bootstrap 里面配置了 server.port=8888,而 application 里面配置了 server.port=7777。事实上,项目启动时的端口号是 7777(bootstrap不关心这个属性);
  • 相同点

    • 共用一个环境,是任何 Spring 应用程序的外部来源;

1.8 目前几种流行的配置中心对比

名称 厂商 特点
Config Spring Cloud 非分布式键值存储;提供了对 Spring 和非 Spring 服务的紧密集成;可以使用多个后端来存储配置数据 , 包括共享文件系统、Eureka、Consul 和 Git 等
Nacos Alibaba 具有 CRUD、版本管理、灰度管理、监听管理、推送轨迹、聚合数据等功能


2. Spring Cloud Config

SpringCloud Config 为微服务架构中的微服务提供集中化的外部配置支持,配置服务器为各个不同微服务应用的所有环境提供了一个中心化的外部配置;


3. Alibaba Nacos

Nacos 致力于解决微服务中的统一配置、服务注册与发现等问题。它提供了一组简单易用的特性集,帮助开发者快速实现动态服务发现、服务配置、服务元数据及流量管理;

相关文章
|
1月前
|
弹性计算 API 持续交付
后端服务架构的微服务化转型
本文旨在探讨后端服务从单体架构向微服务架构转型的过程,分析微服务架构的优势和面临的挑战。文章首先介绍单体架构的局限性,然后详细阐述微服务架构的核心概念及其在现代软件开发中的应用。通过对比两种架构,指出微服务化转型的必要性和实施策略。最后,讨论了微服务架构实施过程中可能遇到的问题及解决方案。
|
1月前
|
Java 开发者 微服务
从单体到微服务:如何借助 Spring Cloud 实现架构转型
**Spring Cloud** 是一套基于 Spring 框架的**微服务架构解决方案**,它提供了一系列的工具和组件,帮助开发者快速构建分布式系统,尤其是微服务架构。
180 69
从单体到微服务:如何借助 Spring Cloud 实现架构转型
|
1月前
|
运维 监控 持续交付
微服务架构解析:跨越传统架构的技术革命
微服务架构(Microservices Architecture)是一种软件架构风格,它将一个大型的单体应用拆分为多个小而独立的服务,每个服务都可以独立开发、部署和扩展。
217 36
微服务架构解析:跨越传统架构的技术革命
|
23天前
|
消息中间件 存储 安全
分布式系统架构3:服务容错
分布式系统因其复杂性,故障几乎是必然的。那么如何让系统在不可避免的故障中依然保持稳定?本文详细介绍了分布式架构中7种核心的服务容错策略,包括故障转移、快速失败、安全失败等,以及它们在实际业务场景中的应用。无论是支付场景的快速失败,还是日志采集的安全失败,每种策略都有自己的适用领域和优缺点。此外,文章还为技术面试提供了解题思路,助你在关键时刻脱颖而出。掌握这些策略,不仅能提升系统健壮性,还能让你的技术栈更上一层楼!快来深入学习,走向架构师之路吧!
57 11
|
23天前
|
NoSQL 前端开发 测试技术
👀探秘微服务:从零开启网关 SSO 服务搭建之旅
单点登录(Single Sign-On,简称SSO)是一种认证机制,它允许用户只需一次登录就可以访问多个应用程序或系统。本文结合网关和SaToken快速搭建可用的Session管理服务。
79 8
|
2月前
|
弹性计算 持续交付 API
构建高效后端服务:微服务架构的深度解析与实践
在当今快速发展的软件行业中,构建高效、可扩展且易于维护的后端服务是每个技术团队的追求。本文将深入探讨微服务架构的核心概念、设计原则及其在实际项目中的应用,通过具体案例分析,展示如何利用微服务架构解决传统单体应用面临的挑战,提升系统的灵活性和响应速度。我们将从微服务的拆分策略、通信机制、服务发现、配置管理、以及持续集成/持续部署(CI/CD)等方面进行全面剖析,旨在为读者提供一套实用的微服务实施指南。
|
1月前
|
设计模式 负载均衡 监控
探索微服务架构下的API网关设计
在微服务的大潮中,API网关如同一座桥梁,连接着服务的提供者与消费者。本文将深入探讨API网关的核心功能、设计原则及实现策略,旨在为读者揭示如何构建一个高效、可靠的API网关。通过分析API网关在微服务架构中的作用和挑战,我们将了解到,一个优秀的API网关不仅要处理服务路由、负载均衡、认证授权等基础问题,还需考虑如何提升系统的可扩展性、安全性和可维护性。文章最后将提供实用的代码示例,帮助读者更好地理解和应用API网关的设计概念。
72 8
|
1月前
|
弹性计算 Kubernetes API
构建高效后端服务:微服务架构的深度剖析与实践####
本文深入探讨了微服务架构的核心理念、设计原则及实现策略,旨在为开发者提供一套系统化的方法论,助力其构建灵活、可扩展且易于维护的后端服务体系。通过案例分析与实战经验分享,揭示了微服务在提升开发效率、优化资源利用及增强系统稳定性方面的关键作用。文章首先概述了微服务架构的基本概念,随后详细阐述了其在后端开发中的应用优势与面临的挑战,最后结合具体实例,展示了如何从零开始规划并实施一个基于微服务的后端项目。 ####
|
2月前
|
负载均衡 Java 持续交付
深入解析微服务架构中的服务发现与负载均衡
深入解析微服务架构中的服务发现与负载均衡
98 7
|
2月前
|
消息中间件 运维 Kubernetes
后端架构演进:从单体到微服务####
本文将探讨后端架构的演变过程,重点分析从传统的单体架构向现代微服务架构的转变。通过实际案例和理论解析,揭示这一转变背后的技术驱动力、挑战及最佳实践。文章还将讨论在采用微服务架构时需考虑的关键因素,包括服务划分、通信机制、数据管理以及部署策略,旨在为读者提供一个全面的架构转型视角。 ####
46 1