Next.js 16 · Rolling Release Lab

滚动发布与版本偏斜实验室

旧标签页、旧 chunk、RSC 变体、Server Action、两个 ReplicaSet 与数据库迁移会在同一段时间里交错。这里不把 deploymentId 当成魔法路由器:它能发现偏斜并触发整页导航,但真正把旧请求送回旧实例,仍要靠平台或负载均衡策略。

可灰度 等待第一次请求
挑战 1:安全共存基线

保留旧版本、使用独立 deployment ID,并让旧请求命中旧实例。

旧 ReplicaSet · v1

build-v1 · rel-v1
入口层权重
v1 80%v2 20%
普通加权路由

新 ReplicaSet · v2

build-v2 · rel-v2

两个浏览器现场

旧标签页保持部署前拿到的 HTML、chunk 和 Action 引用;新页面按当前入口权重打开。

旧标签页v1
build
build-v1
deployment
rel-v1
状态
部署前已打开
新页面未打开
build
deployment
状态
等待 HTML 请求

偏斜信号

同一次请求可能先触发版本检测,再暴露 chunk、Action、schema 或缓存问题。

成功请求0
chunk 4040
Action 不兼容0
整页导航回退0
schema 错误0
错误 RSC 串用0
排空中断0
越权执行0

请求时间线

路由目标会明确写出;看到整页导航并不表示请求曾自动回到旧实例。

    尚未运行请求先载入挑战,再观察每一层给出的证据。

    image digest

    不可变发布产物的身份。同一版本的副本应从同一 digest 启动,而不是每个 Pod 临时重新构建。

    build ID

    next build 生成的构建身份。同一份构建启动多个容器时应一致;generateBuildId 解决的是构建身份,不是流量路由。

    deployment ID

    参与静态资源缓存破坏与客户端/服务器偏斜检测。发现不匹配可触发整页导航,但不会让普通负载均衡器自动选中旧实例。

    Action encryption key

    多实例需要一致才能解密闭包,但一致 key 不保证旧 Action ID 在新构建中存在,更不能代替身份、权限和输入校验。

    本关尚未核对

    运行请求后,使用“核对结论”比较实验结果与本关要点。