左耳听风
陈皓
网名“左耳朵耗子”,资深技术专家
180929 人已学习
新⼈⾸单¥98
登录后,你可以任选6讲全文学习
课程目录
已完结/共 119 讲
左耳听风
15
15
1.0x
00:00/00:00
登录|注册

53 | 管理设计:配置中心

应用服务配置更新的标准化
操作系统配置变更
平台层配置变更
配置变更控制器
变更通知的组件
配置中心的API
配置管理工具
配置版本管理
外部服务依赖的配置
配置层次的划分
配置项的模型
软件配置的分类
动态配置
静态配置
配置更新控制器的启动责任
配置更新控制器
配置更新的事务处理
统一和标准化配置项
配置中心的架构
配置中心的模型
区分软件的配置
配置中心的设计重点
配置中心的设计
性能设计篇
管理设计篇
弹力设计篇
分布式系统设计模式

该思维导图由 AI 生成,仅供参考

你好,我是陈皓,网名左耳朵耗子。
我们知道,除了代码之外,软件还有一些配置信息,比如数据库的用户名和密码,还有一些我们不想写死在代码里的东西,像线程池大小、队列长度等运行参数,以及日志级别、算法策略等,还有一些是软件运行环境的参数,如 Java 的内存大小,应用启动的参数,包括操作系统的一些参数配置……
所有这些东西,我们都叫做软件配置。以前,我们把软件配置写在一个配置文件中,就像 Windows 下的 ini 文件,或是 Linux 下的 conf 文件。然而,在分布式系统下,这样的方式就变得非常不好管理,并容易出错。于是,为了便于管理,我们引入了一个集中式的配置管理系统,这就是配置中心的由来。
现在,软件的配置中心是分布式系统的一个必要组件。这个系统听起来很简单,但其实并不是。我见过好多公司的配置中心,但是我觉得做得都不好,所以,想写下这篇文章给你一些借鉴。

配置中心的设计

区分软件的配置

首先,我们要区分软件的配置,软件配置的区分有多种方式。
有一种方式是把软件的配置分成静态配置和动态配置。所谓静态配置其实就是在软件启动时的一些配置,运行时基本不会进行修改,也可以理解为是环境或软件初始化时需要用到的配置。
例如,操作系统的网络配置,软件运行时 Docker 进程的配置,这些配置在软件环境初始化时就确定了,未来基本不会修改了。而所谓动态配置其实就是软件运行时的一些配置,在运行时会被修改。比如,日志级别、降级开关、活动开关。
当然,我们这里的内容主要针对动态配置的管理。
对于动态配置的管理,我们还要做好区分。一般来说,会有三个区分的维度。
按运行环境分。一般来说,会有开发环境、测试环境、预发环境、生产环境。这些环境上的运行配置都不完全一样,但是理论来说,应该是大同小异的。
按依赖区分。一种是依赖配置,一种是不依赖的内部配置。比如,外部依赖的 MySQL 或 Redis 的连接配置。还有一种完全是自己内部的配置。
按层次分。就像云计算一样,配置也可以分成 IaaS、PaaS、SaaS 三层。基础层的配置是操作系统的配置,中间平台层的配置是中间件的配置,如 Tomcat 的配置,上层软件层的配置是应用自己的配置。
这些分类方式其实是为了更好地管理我们的配置项。小公司无所谓,而当一个公司变大了以后,如果这些东西没有被很好地管理起来,那么会增加太多系统维护的复杂度。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

分布式系统设计模式中的配置中心是分布式系统中不可或缺的组件。本文详细介绍了配置项的分类、配置中心的模型和架构,为读者提供了设计模式和架构实现的参考。 首先,文章区分了软件配置为静态配置和动态配置,并按照运行环境、依赖和层次进行了分类。其次,设计了软件配置模型,将配置分为操作系统层、平台层和应用层,并提出了配置管理工具的需求。最后,讨论了配置中心的架构,包括配置变更通知、配置变更控制器的部署位置、平台层配置变更的处理方式等。 文章强调了配置中心的设计重点,包括统一和标准化软件的配置项、配置更新的事务处理、配置版本与软件版本的对应关系、配置更新控制器的功能等。通过详细的设计和架构思路,为读者提供了配置中心的设计模式和架构实现的参考,对于分布式系统的配置管理具有一定的指导意义。 总之,本文通过对配置中心的设计重点和架构的详细介绍,为读者提供了在分布式系统中实现配置中心的指导和参考,对于需要进行分布式系统配置管理的技术人员具有重要的参考价值。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《左耳听风》
新⼈⾸单¥98
立即购买
登录 后留言

全部留言(29)

  • 最新
  • 精选
  • 忙里偷闲
    这篇文章对于边车方式实现服务网格的思路相当清晰,如果要找对于这种思路的实现方案的话,kubernetes的istio应该是最贴近的实现。

    作者回复: 是的

    2018-06-14
    4
  • neohope
    浩哥,我想请教一下,一般会把数据库链配置做成动态配置吗?我们现在数据库配置没能做到动态修改配置,只能重启服务。 前面几个的项目用了百度的配置中心,和spring的结合是不错,但整体框架来说感觉有些笨重。 另外,spring cloud提供的配置是基于github的,国内不是很合用,不知道大家有没有找到好的实现呢?

    作者回复: 数据库一般入会,因为大关键了。spring的配置是git的,也好也不好。一般来说都是自己实现

    2018-06-24
    2
  • 曾经的十字镐
    耗子哥这篇文章讲的非常好也非常全,但是我还想发表一下我的看法,我觉得配置中心应该根据实际情况来选择,我见过好多团队,其项目非常简单,就是一个分布式项目,4-5个模块,还搞了一个配置中心,实在有些重,我们项目也不大我使用mysql加定时拉取就搞定了,要搞清楚使用配置中心的目的,不要盲目的实用配置中心,这样你的系统就变得复杂了。
    2018-04-25
    1
    44
  • 繁泽
    耗子叔您好,请问 GitHub 上有没有一些不错的契合您写的设计思路的项目代码能推荐参考呢?
    2018-04-24
    1
    19
  • 约书亚
    我团队架构之前考虑过上配置中心,主要是应用配置方向,调研过携程Apollo,后反复论证暂时搁置,在期间我的思考如下: 1. 动静态的分类比较相对,实际开发常修改的配置大多是性能微调的参数和日志级别等,而前者应减少在生产环境的尝试。其他变更,因微服务的自动化技术,修改后重发布显得问题不大。通用/独有的中间件地址发生变更(比如failover)时,看起来很需要配置中心,但现在有各种流量调度技术 2. 很多配置变更需重建上下文,此类功能难写,框架少,而且担心在重新构建应用程序上下文期间带来服务性能下降。我们Java用SpringBoot,无以上问题...但如没有框架保障,还不如重发布,利用滚动更新+流量调度保证服务可用性 3. 这些配置是否还要出现在源代码配置文件中?如果是,没想好线上修改的配置项怎么保证同步到源代码。如果否,那上新服务和配置变更操作总有先后,要么配置细分小版本,每次服务发布都不同,要么有个灰度环境 以上为我们的情况,其实答案在皓哥文章中都有,但落地还需细节,望各位给出建议
    2018-04-24
    1
    16
  • Field Li
    配置应该还是放在文件里,然后把文件推到agent上,每个机器本地存盘,这样即使配置中心挂了 服务依然可以从本地获取配置
    2018-05-27
    10
  • 迷宫中的将军
    不太推荐使用配置中心的方式,最好的就是和代码仓库一起,静态管理。 这种开发以及维护的成本比较高。同时生产环境上配置的变化开发人员不可见,不太符合IaC的原则。
    2021-01-29
    1
    5
  • 121373628
    我们公司配置中心的使用分为业务相关配置和运维相关配置(Mq,zk,db相关的配置)。运维相关配置放在配置中心,开发人员无权操作。业务相关配置放在应用包里。然后发布通过统一发布系统发布。整个应用发布过程无需运维参与。比全部配置放配置中心,然后线上配置都需要运维修改的模式。效率提高很多。因为运维并不了解具体业务以及业务配置。运维操作更容易出错。在应用包里,可以开发环境就验证线上环境配置。不会出现配置多一个空格这种细小错误。导致上线才暴露问题。个人体会。
    2018-05-19
    1
    5
  • 配置中心可以使用zookeeper的状态来通知各个业务进程某个配置文件有变化,通知时只告知文件内容有变化,具体数据让业务进程重新去配置中心拉取。我们项目目前 是这样实现的。
    2020-04-26
    3
  • 知行合一
    配置中心设计的好的话可以做到灵活配置和版本控制等,而且会有本地缓存或者写文件,即使配置中心挂了,服务也能读取本地的配置保证可用性
    2020-01-10
    2
收起评论
显示
设置
留言
29
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部