3、配置项基础:配置项类型、配置项属性、配置项生命周期管理
说实话,配置项这个概念,很多刚接触 DaVinci Config 的朋友容易把它想复杂了。其实说白了,配置项就是你在配置中心里管理的每一个「键值对」—— 一个配置项就是一个独立的配置单元。我最早接手一个遗留系统时,发现配置项散落在各个配置文件里,有的在 XML 里,有的在 properties 里,还有的直接硬编码在代码中。那叫一个乱。
今天我们就来系统梳理一下配置项的三个核心维度:类型、属性、生命周期。把这些搞清楚了,你就能像搭积木一样管理配置了。
3.1 配置项类型
配置项的类型,决定了它能存什么、怎么用。DaVinci Config 支持以下几种常见类型:
| 类型 | 说明 | 典型场景 |
|---|---|---|
| String | 字符串类型,最常用 | 数据库连接串、URL、业务开关名称 |
| Number | 数值类型(整数/浮点数) | 超时时间、线程池大小、阈值 |
| Boolean | 布尔类型 | 功能开关、灰度标识 |
| JSON | 结构化数据 | 复杂策略配置、白名单列表 |
| Properties | 键值对集合 | 多组关联配置,如邮件模板 |
我个人习惯是:能用 String 就别用 JSON,除非你真的需要嵌套结构。为什么?因为 String 类型的变更历史最清晰,回滚也最直接。JSON 虽然灵活,但一旦嵌套深了,diff 对比时眼睛都要看花。
3.2 配置项属性
每个配置项除了「值」之外,还有一堆元数据。这些属性决定了配置项的行为和归属。我把它归纳为三类:
3.2.1 标识属性
- Key:配置项的唯一标识,全局不可重复。命名建议用点号分隔,比如
db.connection.timeout。 - Group:分组标签,用于归类。比如所有数据库相关的配置放在
database组下。 - AppId:所属应用,一个配置项只能属于一个应用。
3.2.2 控制属性
- 权限:读/写/管理,控制谁能改这个配置。
- 版本号:每次修改自动递增,用于并发控制。
- 状态:启用/禁用。禁用的配置项客户端不会拉取到。
3.2.3 描述属性
- 描述信息:写清楚这个配置是干什么的。别偷懒,三个月后你自己都会忘。
- 标签:自定义标签,方便搜索过滤。
- 创建人/修改人:审计用,出了问题能找到人。
3.3 配置项生命周期管理
一个配置项从创建到废弃,会经历几个阶段。我把它画成了一条时间线:
创建 → 发布 → 生效 → 变更 → 废弃 → 删除
3.3.1 创建阶段
在 DaVinci Config 后台新建配置项。这时候要填好 Key、类型、初始值、描述。我建议初始值一定要给一个「安全值」—— 即使客户端在配置还没拉取到的情况下,也能用这个值兜底。
3.3.2 发布与生效
配置项创建后,默认是「未发布」状态。需要手动点击发布,客户端才会拉取到新配置。这里有个细节:
- 热发布:配置变更后立即推送到客户端,无需重启。
- 灰度发布:先推送给一小部分机器,验证没问题再全量。
我个人强烈建议:生产环境的配置变更,一定要走灰度发布。你想想看,一个配置改错了,如果是全量推送,那就是事故。灰度发布至少能给你留个回旋余地。
3.3.3 变更与回滚
配置项发布后,可以多次修改。每次修改都会生成一个新版本。DaVinci Config 会保留所有历史版本,你可以随时回滚到任意一个旧版本。
核心原则: 配置变更 = 代码变更。要有审批、有记录、可回滚。
3.3.4 废弃与删除
当一个配置项不再使用时,先标记为「废弃」,而不是直接删除。为什么?因为可能有遗留的客户端还在引用它。等确认所有客户端都迁移走了,再执行删除操作。
我曾经在清理旧配置时,直接删掉了一个看似无用的配置项。结果第二天线上报警,有个老服务启动时找不到这个配置,直接挂了。从那以后,我定了个规矩:废弃配置至少保留 30 天,到期后再清理。
3.4 实战建议
最后,给你几个我在项目中沉淀下来的配置项管理原则:
- 命名规范要统一:比如
模块.子模块.具体含义,别今天用下划线,明天用驼峰。 - 配置项数量要控制:一个应用不要超过 500 个配置项。太多了管理成本会急剧上升。
- 敏感配置要加密:密码、密钥这类配置,不要在页面上明文展示。DaVinci Config 支持加密存储。
- 定期审计:每个月检查一次,有没有废弃的配置?有没有值异常的配置?
嗯,配置项基础就讲到这里。下一章我们会深入聊「配置分组与命名空间」,那是解决多环境、多集群配置隔离的关键手段。到时候见。