知识卡片

配置与代码分离的根本动机:变化频率不同的东西不该走同一套发布流程

普通读书笔记卡

内容

在分布式环境里,几乎所有服务都会在多台机器上部署多个实例,业务项目也总免不了各种配置文件——一个常见的痛点是:哪怕只是想改一项配置内容,也要完整走一遍代码提交、打包、分发上线的流程,而当部署实例数量很多时,仅仅是分发上线这一步就已经很繁琐,更麻烦的是配置文件的修改频率往往远远高于代码本身的修改频率。QConf团队认为这个麻烦的根源,是日常管理和发布过程中没有把”配置”和”代码”区别对待——配置本身是从代码里提取出来的、经常变化或需要按环境定制的内容,是为了提高代码灵活性才被独立出来的,但它自身”经常变化”这个特征,一旦被绑定在和代码一样的发布流程里,这个特征反而变成了负担的来源。这个洞察的核心是:把两种变化频率、变化性质截然不同的东西(代码和配置)绑定在同一套流程里,流程的设计天然要向变化频率更低、更需要严谨把控的那一方(代码,通常需要经过评审、测试、灰度)靠拢,而变化频率更高、往往更需要快速生效的那一方(配置)就不得不背负这套本不为它设计的重流程。QConf的解法是让配置内容从代码中彻底分离出来,转由专门的配置管理系统提供及时、可靠、高效的访问和更新服务。这条经验对任何”两类变化频率差异悬殊的东西被迫共用同一套管理机制”的场景都有参考价值:识别出这种频率错配本身,往往就是找到问题根源、进而设计出针对性解法的第一步。

参考来源

- 位置:《高可用架构(第1卷)》第5章《运维保障》"5.1 360如何用QConf搞定两万台以上服务器的配置管理"节,"5.1.1 设计初衷"(源文件:_epub-src/OEBPS/Text/Chapter5_1_2.xhtml) - 结论依据:原文说明"仅仅是一个配置内容的修改,便需要重新进行代码提交SVN/Git、打包、分发上线的全部流程……配置文件的修改频率又远远大于代码本身……我们认为麻烦的根源是在日常管理和发布过程中不加区分配置和代码造成的",直接支撑本卡片结论。 - 原始内容:仅仅是一个配置内容的修改,便需要重新进行代码提交SVN/Git、打包、分发上线的全部流程……何况,配置文件的修改频率又远远大于代码本身。追本溯源,我们认为麻烦的根源是在日常管理和发布过程中不加区分配置和代码造成的。