跳到主要内容

配置兼容性保证

适用范围:本文讨论的配置为由 config.Config 定义的动态配置。

兼容性窗口(仅 1 个历史版本 + 1 个未来版本)

  • 向后兼容 1 个历史版本:新版本(N)能够加载上一个版本(N-1)产出的动态配置。
  • 向前兼容 1 个未来版本:旧版本(N)能够加载下一个版本(N+1)产出的动态配置。

超过该窗口(例如 N-2、N+2)不做保证。

兼容性矩阵

Gateway 版本配置版本预期结果
NN-1✅ 可加载(向后兼容)
NN✅ 可加载
NN+1✅ 可加载(向前兼容:新字段被忽略)
NN+2 / N-2❌ 不保证

细则

仅对于动态配置加载,存在向后与向前兼容;

但对于 Management API,采用严格解析、仅向后兼容;当试图利用 API 去检查或覆盖配置时,如果存在未知字段,会直接报错。

推荐的发布与验证策略

为了同时兼顾兼容性与可控性,建议按以下方式使用:

  1. 同版本校验:用即将部署的 Gateway 版本(N)对应的 POST /config/validate 或者对应版本的 schema + protovalidate 做校验。
  2. 灰度升级顺序:先升级 Gateway(N -> N+1),再逐步开始下发 N+1 才有的新字段配置;避免新字段在大量 N 实例上被悄悄丢弃。

重要提醒

  • “可加载”不等于“行为一致”。旧版忽略新字段后通常会缺少新能力或退化为默认行为。
  • 任何会影响路由安全、鉴权、限流等关键路径的配置变更,都建议进行灰度验证,并优先通过严格校验链路保障正确性。