首页 / 业界 / 正文

别把配置管理当运维边角料

上周跟某互联网公司的运维组长在路边摊吃串,他灌了半瓶冰啤酒开始吐槽,说前两周凌晨三点被电话喊起来排障,熬到天快亮才发现,是测试环境的一个数据库连接串,被人改了之后没同步到生产配置库,导致核心交易服务连错了库,差点把前一天的用户交易记录搞丢。

他说这话的时候眼睛都是红的,说为了这点破事,团队被扣了小半个月的绩效。

其实这种事,在大部分跑了三五年的技术团队里,根本不算新鲜。

先理清楚大家吐槽的到底是什么

很多人对配置管理的认知是乱的。有人觉得这就是运维的活,管管服务器的IP、端口就行;有人觉得这就是开发写在代码里的几个常量,git能追溯就算管好了。

说白了,大家吐槽的根本不是“改配置麻烦”,是所有影响系统运行状态、和业务代码解耦的参数,从来没有被真正当回事管过。

你可以随便找个跑了两年以上的团队问问,现在生产环境跑的所有配置,能在十分钟内全部列出来的团队,真的没几个。

有的把配置塞在应用启动脚本里,有的存在本地的配置文件里,有的散在三四个不同的配置中心实例里,甚至还有的存在老员工的本地笔记本里,人一走,参数全成了谜。

配置管理全生命周期参数分类示意图

没人天生爱管这些零碎参数。

毕竟写架构、写核心代码,做出功能来所有人都能看见;管配置这种事,做的再好也没人夸,出一次错全团队都要跟着遭殃。

很多小团队一开始总觉得,把配置和代码揉在一个git仓库里是最省事的,改个参数跟着代码一起上线就行,连单独的配置库都不用搭。真等碰到一次紧急场景——比如大促的时候要临时把限流阈值调高,你总不能为了改一个数字,走全量代码评审、测试、发布的全流程吧?等你流程走完,流量早就把系统冲垮了。

绕不开的几个现实取舍

做配置管理从来没有一劳永逸的完美方案,所有的落地过程,本质上都是在几个现实矛盾里找平衡。

第一个矛盾,是配置放代码仓库还是独立配置中心。

选代码仓库的好处是追溯方便,不用额外搭系统,小团队初期用着确实顺手;但代价是紧急变更的流程太重,而且配置一旦被打进代码包里,后续要改就得重新打包发布,灵活性几乎为零。之前碰到个早期的创业团队,把所有生产配置全打在Spring Boot的jar包里,有次发现日志级别设错了,导致磁盘被日志三天写满,为了改这一个参数,重新打包发布花了四十分钟,服务中断了快半小时,损失的钱都够搭三个独立配置中心了。

第二个矛盾,是变更权限到底给谁。

全锁死给运维团队管,确实安全,不会有人乱改;但代价是开发团队要调个日志级别、改个临时的功能开关,都得排队等运维处理,迭代节奏全被拖慢。要是把权限全放开给所有开发,那迟早要出事——上次碰到个刚入职的实习生,为了测试本地的功能,把生产环境的线程池最大连接数从200改成了20,早高峰的时候接口直接大面积超时,整个团队熬了一上午才把流量恢复。

其实这事没那么复杂,配置权限的边界从来不是按职级划分的,是按变更的影响面划的。日志级别、功能开关这种改了顶多影响日志输出的,开发可以直接操作;数据库连接串、支付密钥、限流阈值这种改了能直接把系统搞崩的,必须走双人复核的流程,谁来都不例外。

配置变更权限分级审批流程图
配置变更权限分级审批流程图

第三个矛盾,是配置变更要不要留全量的审计日志。

很多团队觉得,改配置而已,错了改回去就行,没必要留那么多日志占存储空间。真等出了问题才知道,你根本记不住上周改了哪几个参数,差一个端口号、少一个超时时间的设置,都能让你排障排到崩溃。

之前碰到个团队,配置中心的日志只保留三天,有次一周前改的一个缓存过期时间出了问题,想回去找当时的变更记录,根本找不到,三个人对着系统熬了整整一个通宵,才把之前的参数试出来。

别被全自动化的概念忽悠瘸了

现在很多厂商卖配置管理平台的时候,总喜欢吹自己的系统能做动态调优,能根据实时流量自动调整参数,能省多少多少运维人力。

说实话,这事没那么玄。

系统的运行状态是动态的,流量高峰、数据库慢查询、甚至机房的网络抖动,都会影响参数的最优值,所谓的自动调优,本质上还是基于历史数据算出来的固定阈值,真碰到极端的流量场景,该崩还是崩。

我一直觉得,配置管理最核心的价值,从来不是帮你省多少改配置的时间,是出问题的时候,你能在十秒内说清楚,当前系统跑的每一个参数是什么,是谁在什么时候改的,改之前的值是多少。

做到这一点,就已经超过八成的团队了。

配置变更审计日志追溯界面示例
配置变更审计日志追溯界面示例

很多团队花大几十万买的商业配置平台,连个完整的审计日志都做不好,每次等保测评要翻三个月的配置变更记录,得手动拼半天excel才能交差,这钱花得真的冤。

不过话说回来,配置管理这事从来不是靠买个工具就能搞定的。你要是连“哪些参数属于核心配置”都没梳理清楚,买再贵的工具也是白搭。

之前碰到个走了弯路的团队,把所有用户的个性化偏好设置全存在配置中心里,每天的配置变更量有上万条,真要排核心系统的故障,翻日志翻到天荒地老,完全是把配置中心当关系型数据库用了。甚至还有更离谱的,把员工的考勤规则、财务的报销标准全塞在配置中心里,上次系统升级的时候把配置库清了,全公司的考勤全乱套,人事算了三天才算完。

这真的和配置管理本身没关系。是他们把根本不属于配置范畴的东西,硬塞进来占地方了。

很多人觉得配置管理是个没技术含量的活,不像做架构、写算法那么有技术光环。但你真碰到凌晨三点的紧急故障就知道,能快速把配置的来龙去脉理清楚的人,比能讲十层技术架构的人靠谱多了。

毕竟,系统跑在现实世界里,不是跑在PPT上的。那些藏在角落里的参数,才是决定系统到底稳不稳的关键。