网关按 X-Gray 头把请求路由到 v2,压测发现新版本只收到一成流量,大部分请求仍落在 v1 上,改 header 也不变,挺奇怪。日志里能对上时间点,这种反而好排。
负载均衡器把实例列表缓存了几十秒,灰度实例刚注册还没进本地缓存,过滤器判完 header,也只能在老列表里挑机器,新机器自然没流量。这一点先确认清楚,后面就不用反复试。
spring.cloud.loadbalancer.cache.ttl=5s spring.cloud.nacos.discovery.watch-delay=1000
「网关灰度缓存实例」排查到最后往往是很小的一处差异,前面那些复杂猜测可以先放一放。偶发问题先统计频率,一小时几次和一天一次,查法完全不同。
改完顺手把文档补一句,省得下次自己重新推一遍。
处理上按这个顺序:把实例列表的刷新间隔调短,灰度期间接受这点开销;确认灰度实例已经注册成功,并且健康检查是通过的;灰度结束之后把间隔改回去,别长期保持高频拉取。
结果对不对很好判断,带灰度头的请求稳定落到 v2,去掉头回到 v1,比例与预期一致,没有串的。
