Spring Cloud Gateway 动态路由热更新零宕机:配置下发瞬间 502?双缓冲路由表 + 健康检查切换!
公司用 Nacos 做配置中心,Gateway 路由也放 Nacos 里动态刷新。运维改了一条路由规则,配置一刷新,Gateway 就开始间歇性 502——大概持续了 2 到 3 秒。排查发现是路由表在热更新的时候,旧的被清空了、新的还没加载完,中间有一个空窗期。请求进来找不到路由,全部 502。 热更新本来是为了不重启,结果还是搞出了服务中断。问题不在热更新本身,而在更新的姿势不对——路由表是"先清空再加载"而不是"先准备好再切换"。今天聊聊怎么用双缓冲让路由切换做到真正的零宕机。 问题出在哪里:单路由表的空窗期 Spring Cloud Gateway 的 RouteDefinitionRouteLocator 在接收到 Nacos 配置变更时,默认行为是: 收到新配置 │ ├─ 清空旧路由表 ├─ 逐条解析新路由 ├─ 校验路由合法性 └─ 加载完成 从"清空"到"加载完成"之间,路由表是空的。这段时间进来的请求,全部 502。加载几十条路由可能只要 100ms,但如果路由规则复杂、或者有外部依赖校验,这个窗口可能拉到秒级。 双缓冲:新路由加载完再切过去 双缓冲的思路很朴素....