【BlossomConfig】什么是配置中心?以及如何实现一个配置中心?

文章目录

  • 什么是配置中心?
  • 如何自己设计一个配置中心?

网关项目源码
RPC项目源码
配置中心项目源码

什么是配置中心?

在单体架构的时候我们可以将配置写在配置文件中,但有⼀个缺点就是每次修改配置都需要重启服务才能生效。 当应用程序实例比较少的时候还可以维护。
如果转向微服务架构有成百上千个实例,每修改⼀次配置要将全部实例重启,不仅增加了系统的不稳定性,也提高了维护的成本。
那么如何能够做到服务不重启就可以修改配置?所有就产生了四个基础诉求:

  1. 需要支持动态修改配置
  2. 需要动态变更有多实时
  3. 变更快了之后如何管控控制变更风险,如灰度、回滚等
  4. 敏感配置如何做安全配置
    因此,基于上面的一些需求,就渐渐衍生出了配置中心,目前比较主流的有:Nacos、Apollo、SpringCloud Config、Disconf(百度)。
    那么,对于配置中心,我们可能会有几个问题。
  5. 什么是配置中心
    ○ 定义:配置中心是一个独立的系统,用于集中管理应用程序的配置信息。
    ○ 作用:它允许在不同环境和服务间共享和管理配置信息,同时支持动态配置更新。
  6. 配置中心的作用和优点
    ○ 管理和集中配置:集中存储应用配置,方便管理和维护。
    ○ 动态更新:支持在不重启服务的情况下更新配置。
    ○ 环境隔离:支持不同环境(开发、测试、生产)的配置隔离。
    ○ 提高可靠性和安全性:集中管理有助于加强安全性和容错性。
  7. 配置中心的使用场景
    ○ 微服务架构:在微服务环境中管理跨多个服务的配置。
    ○ 多环境部署:管理不同环境(开发、测试、生产)的配置信息。
    ○ 动态配置需求:需要动态调整应用配置的场景,如特性开关、参数调整等。

那么,从上面的了解,以及我最近对Nacos的学习,可以得出,一个优秀的配置中心可以提供如下一些功能:

  1. 动态配置管理
    ○ 功能描述:支持添加、修改、删除配置项,能够在运行时动态应用这些变更,无需重启服务。
    ○ 具体功能:提供API和用户界面来实时更新配置,支持各种数据格式(如JSON、YAML)的配置文件。
  2. 版本控制和回滚
    ○ 功能描述:维护配置的历史版本,支持快速回滚到任意历史版本。
    ○ 具体功能:提供版本历史记录,界面或API操作回滚,确保错误配置快速修正。
  3. 环境和分组管理
    ○ 功能描述:支持不同环境(如开发、测试、生产)的配置隔离,并按服务或模块分组管理配置项。
    ○ 具体功能:提供环境标签、配置项分组功能,使配置管理更加清晰和有序。
  4. 服务发现和注册
    ○ 功能描述:配置中心与服务注册和发现机制集成,自动或手动将服务与相应配置关联。
    ○ 具体功能:与现有服务发现系统(如Eureka、Consul)集成,自动同步服务与配置。
  5. 安全性
    ○ 功能描述:包括用户认证、授权、敏感信息加密等安全措施。
    ○ 具体功能:提供用户登录、权限控制,对敏感配置进行加密存储和传输。
  6. 高可用性和容错性
    ○ 功能描述:保证配置中心的稳定性和可靠性,包括数据备份、故障转移等机制。
    ○ 具体功能:配置中心集群部署,自动故障切换,数据备份和恢复机制。
  7. 客户端SDK/API
    ○ 功能描述:提供易于使用的客户端库或API,方便不同的应用和服务获取和更新配置信息。
    ○ 具体功能:为主流开发语言提供SDK,文档和示例代码,简化集成流程。
  8. 用户友好的界面
    ○ 功能描述:提供直观的用户界面用于配置管理,支持配置的查看、编辑、发布等操作。
    ○ 具体功能:图形界面操作,配置项搜索、编辑、发布功能,支持多用户协作。
  9. 通知和回调机制
    ○ 功能描述:配置变更通知到相关服务或客户端,支持回调机制来处理配置更新。
    ○ 具体功能:变更通知机制(如Webhook、消息队列),客户端回调接口。
  10. 配置审核和跟踪
    ○ 功能描述:记录配置的变更历史,支持审核配置变更,追踪配置的更新和使用情况。
    ○ 具体功能:变更日志记录,审计追踪,配置使用报告。
  11. 健康检查和监控
    ○ 功能描述:监控配置中心的健康状况,提供日志记录、性能指标等监控功能。
    ○ 具体功能:健康检查API,性能监控指标,日志记录系统。

Nacos厉害就厉害在不仅代码优雅,而且完全实现了上面的所有要求,并且他不单单是将所有的上面的这些功能耦合在一个模块中,从而现成一个很重的模块,而是使用Sidecar模式。
Sidecar模式是一种在微服务架构中广泛使用的设计模式,它主要用于将应用程序的核心功能与那些可以与其他服务共享的辅助功能(如监控、日志记录、配置、网络通信等)分离。在这种模式中,每个微服务与一个附属的辅助服务(Sidecar)并行运行,Sidecar服务可以看作是主服务的延伸,负责处理非业务逻辑的工作。

Sidecar模式的特点:

  1. 分离关注点: 将与业务逻辑无关的功能(如日志、监控、配置管理等)从应用程序中分离出来,以简化微服务的开发和维护。
  2. 提升可复用性: 由于Sidecar中的功能可以被多个服务共享,因此提高了代码的可复用性。
  3. 增强安全性和可靠性: Sidecar可以处理诸如服务发现、负载均衡、断路器、安全通信等,从而增强微服务的安全性和可靠性。
  4. 易于维护和扩展: Sidecar的使用使得对系统进行升级和扩展更加容易,因为可以独立地更新Sidecar组件而不影响主服务。
  5. 语言和平台透明: Sidecar模式允许每个服务独立选择最适合的编程语言和技术栈,因为Sidecar可以为所有服务提供统一的接口和功能。
    简单的了解完毕一个配置中心需要提供的功能,我们接下来来分析一下如何自己实现一个简单的配置中心。

如何自己设计一个配置中心?

也就是设计一个配置中心需要考虑些什么。
从上面的点我们可以知道,一个注册中心在得到用户的配置信息之后,需要做如下几件事情:

  1. 动态的更新(增删改)项目的配置信息。
  2. 如何动态修改@Value以及@ConfigurationProperties等注解修饰的属性的对应的值。
    我们首先从第一点进行分析,在之前我们学习SpringBoot配置信息加载的时候,我们知道,我们的配置文件的加载,和EnvironmentPostProcessor有一些关联。
    在这里插入图片描述

我们找到实现类SystemEnvironmentPropertySourceEnvironmentPostProcessor,可以发现,在2.7.8的boot版本中,配置文件的加载和ConfigurableEnvironment
以及PropertySource会有一些关联。
也就是说,使用这两个类,估计能帮助我们完成对配置信息的获取以及修改。
所以我们先来研究一下ConfigurableEnvironment。
接下来的几篇文章,我就会对这些重点类的源码进行分析。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/506882.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MySQL使用技巧,高级Java开发必看

insert into tab(col1,col2…) select … 5、活用正则表达式 regexp ^ $ . * | 6、关联查询比子查询效率快,优先使用join关联查询 7、if(exp,v1,v2) if()函数的使用 exp:表达式 v1:exp为真时返回的值 v2:exp为假时返回的值 8、case when… then… else… en…

D34118电话机免提通话电路应用方案

1、 概述: D34118免提语音通话电路包含了必要的放大器、衰减器、背景噪声检测和控制算法形成高品质的免提通话系统。它包括一个麦克风可调增益放大器、静音控制、发射和接收衰减器,还包括两个线路驱动放大器,可用于形成一个与外部耦合变压器连…

【虚幻引擎】C++ slate全流程开发教程

本套课程介绍了使用我们的虚幻C去开发我们的编辑器,扩展我们的编辑器,设置我们自定义样式,Slate架构设计,自定义我们的编辑器样式,从基础的Slate控件到我们的布局,一步步的讲解我们的的Slate基础知识&#…

Python 人工智能实战|产生式规则推理系统:动物识别系统、智能客服系统

一、动物识别系统 1.1:前言 产生式系统是基于产生式规则的推理系统,它以产生式规则为基础,利用规则匹配的推理机制来进行推断和解决问题。下图是产生式系统的组成,请从“动物识别系统”程序代码中分别找出规则库、综合数据库和推…

Golang | Leetcode Golang题解之第4题寻找两个正序数组的中位数

题目&#xff1a; 题解&#xff1a; func findMedianSortedArrays(nums1 []int, nums2 []int) float64 {if len(nums1) > len(nums2) {return findMedianSortedArrays(nums2, nums1)}m, n : len(nums1), len(nums2)left, right : 0, mmedian1, median2 : 0, 0for left <…

IPD推行成功的核心要素(二)如何选择咨询公司或是自己推行?

大家都知道华为公司在引入了IBM的IPD研发管理体系后&#xff0c;营收不断创新高。随着企业的发展壮大&#xff0c;越来越多的企业发现&#xff0c;在产品管理与开发过程中&#xff0c;出现一些难以解决的困难。这也刺激了相当多一部分公司跟风引入IPD体系。IPD是以市场需求为导…

C++第十四弹---模板初阶

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】【C详解】 目录 1、泛型编程 2、函数模板 2.1、函数模板的概念 2.2、函数模板的格式 2.3、函数模板的原理 2.4、函数模板的实例化 2.5、模板参数的匹配原则 …

三、强一致性介绍

这里写自定义目录标题 三、强一致性介绍3.1 基本理解3.2 DTP模型3.3 落地协议XA3.4 ⼆阶段提交模型3.5 ⼆阶段提交的问题3.6 navicat操作xa 三、强一致性介绍 3.1 基本理解 相关特点 强⼀致性解决⽅案要求在任何时间点&#xff0c;任何时刻查询&#xff0c;参与全局事务的各个…

B树、B+树、哈夫曼树

目录 1. B树2. B树3. 哈夫曼树 1. B树 特点&#xff1a;一个节点当中可以有多个值&#xff0c;节点内部key 值是有序的&#xff0c;节点内部存储的是key-value类型的数据 磁盘中文件存储用B树。 4阶B树一个节点最多三个key值 5阶B树一个节点最多四个key值 B树有很多的分支&…

抽象类和接口(2)(接口部分)

❤️❤️前言~&#x1f973;&#x1f389;&#x1f389;&#x1f389; hellohello~&#xff0c;大家好&#x1f495;&#x1f495;&#xff0c;这里是E绵绵呀✋✋ &#xff0c;如果觉得这篇文章还不错的话还请点赞❤️❤️收藏&#x1f49e; &#x1f49e; 关注&#x1f4a5;&a…

Go的数据结构与实现【Ring Buffer】

介绍 在本文中&#xff0c;我们将用Go实现环形缓冲区&#xff08;Ring Buffer&#xff09; Ring Buffer 环形缓冲区&#xff08;或循环缓冲区&#xff09;是一种有界循环数据结构&#xff0c;用于在两个或多个线程之间缓冲数据。当我们继续写入环形缓冲区时&#xff0c;它会…

JavaScript 入门指南(三)BOM 对象和 DOM 对象

BOM 对象 BOM 简介 BOM&#xff08;browser Object Model&#xff09;即浏览器对象模型BOM 由一系列对象组成&#xff0c;是访问、控制、修改浏览器的属性的方法BOM 没有统一的标准&#xff08;每种客户端都可以自定标准&#xff09;。BOM 的顶层是 window 对象 window 对象 …

深入解析Hadoop生态核心组件:HDFS、MapReduce和YARN

这里写目录标题 01HDFS02Yarn03Hive04HBase1&#xff0e;特点2&#xff0e;存储 05Spark及Spark Streaming关于作者&#xff1a;推荐理由&#xff1a;作者直播推荐&#xff1a; 一篇讲明白 Hadoop 生态的三大部件 进入大数据阶段就意味着进入NoSQL阶段&#xff0c;更多的是面向…

代码随想录阅读笔记-二叉树【二叉树的所有路径】

题目 给定一个二叉树&#xff0c;返回所有从根节点到叶子节点的路径。 说明: 叶子节点是指没有子节点的节点。 示例: 思路 这道题目要求从根节点到叶子的路径&#xff0c;所以需要前序遍历&#xff0c;这样才方便让父节点指向孩子节点&#xff0c;找到对应的路径。 在这道…

【CSS】基础选择器

目录 标签选择器 id选择器 类选择器 CSS的编写地点&#xff1a; 标签选择器 说明&#xff1a;标签选择器实际上就是HTML标签元素&#xff08;可以是任何HTML元素&#xff09;&#xff0c;用来改变一个指定标签的样式 示例&#xff1a; <style type"text/css"…

QQ邮箱SMTP发送邮件时要注意哪些安全设置?

QQ邮箱SMTP发送邮件的步骤&#xff1f;如何配置QQ邮箱服务器&#xff1f; 在使用QQ邮箱SMTP发送邮件时&#xff0c;安全设置是至关重要的一环。不当的安全设置不仅可能导致邮件发送失败&#xff0c;还可能使你的账户面临安全风险。下面&#xff0c;AokSend就来详细探讨一下QQ邮…

基于单片机16位智能抢答器设计

**单片机设计介绍&#xff0c;基于单片机16位智能抢答器设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机16位智能抢答器设计是一个结合了单片机技术、显示技术、按键输入技术以及声音提示技术的综合性项目。其设计…

脑机辅助推导算法

目录 一&#xff0c;背景 二&#xff0c;华容道中道 1&#xff0c;问题 2&#xff0c;告诉脑机如何编码一个正方形格子 3&#xff0c;让脑机汇总信息 4&#xff0c;观察图&#xff0c;得到启发式算法 5&#xff0c;根据启发式算法求出具体解 6&#xff0c;可视化 一&am…

苹果App审核大揭秘

苹果上架要求是苹果公司对于提交应用程序到苹果商店上架的要求和规定。这些要求主要是为了保证用户体验、应用程序的质量和安全性。以下是苹果上架要求的详细介绍&#xff1a;1. 应用程序的内容和功能必须符合苹果公司的规 苹果上架要求是苹果公司对于提交应用程序到苹果商店上…

u盘不显示盘符怎么办,u盘不显示盘符

我们经常使用电脑,难免会遇到各种问题,其中U盘不显示盘盘符也是常见的一种。用u盘插入电脑usb接口后,却识别不出u盘,而且更换usb接口以后还是没有u盘盘符,这可怎么用呢?针对此问题,极客狗整理了两个处理方法,接下来带小伙伴一起看看u盘不显示盘符怎么办。遇到同样问题的…