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

本文涉及的产品
注册配置 MSE Nacos/ZooKeeper,118元/月
云原生网关 MSE Higress,422元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 将配置写入一个 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 致力于解决微服务中的统一配置、服务注册与发现等问题。它提供了一组简单易用的特性集,帮助开发者快速实现动态服务发现、服务配置、服务元数据及流量管理;

相关文章
|
5天前
|
存储 Linux KVM
Proxmox VE (PVE) 主要架构和重要服务介绍
Proxmox VE (PVE) 是一款开源的虚拟化平台,它基于 KVM (Kernel-based Virtual Machine) 和 LXC (Linux Containers) 技术,支持虚拟机和容器的运行。PVE 还提供高可用集群管理、软件定义存储、备份和恢复以及网络管理等企业级功能。
58 7
|
10天前
|
安全 应用服务中间件 API
微服务分布式系统架构之zookeeper与dubbo-2
微服务分布式系统架构之zookeeper与dubbo-2
|
10天前
|
负载均衡 Java 应用服务中间件
微服务分布式系统架构之zookeeper与dubbor-1
微服务分布式系统架构之zookeeper与dubbor-1
|
9天前
|
消息中间件 Kafka 数据库
微服务架构中,如何确保服务之间的数据一致性
微服务架构中,如何确保服务之间的数据一致性
|
10天前
|
Java API 对象存储
微服务魔法启动!Spring Cloud与Netflix OSS联手,零基础也能创造服务奇迹!
这段内容介绍了如何使用Spring Cloud和Netflix OSS构建微服务架构。首先,基于Spring Boot创建项目并添加Spring Cloud依赖项。接着配置Eureka服务器实现服务发现,然后创建REST控制器作为API入口。为提高服务稳定性,利用Hystrix实现断路器模式。最后,在启动类中启用Eureka客户端功能。此外,还可集成其他Netflix OSS组件以增强系统功能。通过这些步骤,开发者可以更高效地构建稳定且可扩展的微服务系统。
28 1
|
9天前
|
Kubernetes Go Docker
掌握微服务架构:从Go到容器化的旅程
摘要,通常简短概述文章内容,要求精炼。在本文中,我们将打破常规,采用一种故事化叙述的摘要,旨在激发读者的好奇心和探究欲: “从宁静的海滨小城出发,我们踏上了一场技术探险之旅,探索微服务架构的奥秘。我们将学习如何用Go编写微服务,以及如何通过Docker和Kubernetes将它们打包进小巧的容器中。在这场旅程中,我们将遇到挑战、收获知识,最终实现应用的快速部署与可扩展性。”
|
10天前
|
Cloud Native Java 对象存储
揭秘微服务架构之争:Spring Cloud与Netflix OSS巅峰对决,谁将称霸弹性云原生时代?
近年来,微服务架构成为企业应用的主流设计模式。本文对比了两大热门框架Spring Cloud和Netflix OSS,探讨其在构建弹性微服务方面的表现。Spring Cloud依托Spring Boot,提供全面的微服务解决方案,包括服务注册、配置管理和负载均衡等。Netflix OSS则由一系列可独立或组合使用的组件构成,如Eureka、Hystrix等。两者相比,Spring Cloud更易集成且功能完善,而Netflix OSS则需自行整合组件,但灵活性更高。实际上,两者也可结合使用以发挥各自优势。通过对两者的对比分析,希望为企业在微服务架构选型上提供参考。
30 0
|
10天前
|
编解码 Linux 开发工具
Linux平台x86_64|aarch64架构RTMP推送|轻量级RTSP服务模块集成说明
支持x64_64架构、aarch64架构(需要glibc-2.21及以上版本的Linux系统, 需要libX11.so.6, 需要GLib–2.0, 需安装 libstdc++.so.6.0.21、GLIBCXX_3.4.21、 CXXABI_1.3.9)。
|
11天前
|
测试技术 微服务
微服务(八)-服务网关zuul(四)
微服务(八)-服务网关zuul(四)
|
11天前
|
监控 前端开发 Java
微服务(七)-服务网关zuul(三)
微服务(七)-服务网关zuul(三)
下一篇
无影云桌面