配置兼容性保证
适用范围:本文讨论的配置为由 config.Config 定义的动态配置。
兼容性窗口(仅 1 个历史版本 + 1 个未来版本)
- 向后兼容 1 个历史版本:新版本(N)能够加载上一个版本(N-1)产出的动态配置。
- 向前兼容 1 个未来版本:旧版本(N)能够加载下一个版本(N+1)产出的动态配置。
超过该窗口(例如 N-2、N+2)不做保证。
兼容性矩阵
| Gateway 版本 | 配置版本 | 预期结果 |
|---|---|---|
| N | N-1 | ✅ 可加载(向后兼容) |
| N | N | ✅ 可加载 |
| N | N+1 | ✅ 可加载(向前兼容:新字段被忽略) |
| N | N+2 / N-2 | ❌ 不保证 |
细则
仅对于动态配置加载,存在向后与向前兼容;
但对于 Management API,采用严格解析、仅向后兼容;当试图利用 API 去检查或覆盖配置时,如果存在未知字段,会直接报错。
推荐的发布与验证策略
为了同时兼顾兼容性与可控性,建议按以下方式使用:
- 同版本校验:用即将部署的 Gateway 版本(N)对应的
POST /config/validate或者对应版本的 schema +protovalidate做校验。 - 灰度升级顺序:先升级 Gateway(N -> N+1),再逐步开始下发 N+1 才有的新字段配置;避免新字段在大量 N 实例上被悄悄丢弃。
重要提醒
- “可加载”不等于“行为一致”。旧版忽略新字段后通常会缺少新能力或退化为默认行为。
- 任何会影响路由安全、鉴权、限流等关键路径的配置变更,都建议进行灰度验证,并优先通过严格校验链路保障正确性。