标准答案
- 制品包含 lockfile 对应的依赖和明确 Node runtime,启动时输出非敏感版本摘要。
- 先做健康和就绪检查,再按实例、流量或租户灰度,观察错误、P99、内存、GC 和下游压力。
- 消息和数据库变更遵循先扩展后收缩,避免新旧版本无法共同工作。
- 回滚要能恢复代码、配置和流量路由,并处理已经产生的异步任务和数据。
题目解析
Node 版本升级可能改变 ESM/CJS 解析、TLS、原生模块 ABI、默认超时、Web API 和 GC 行为。依赖 lockfile、编译产物、监控 agent 和系统库要与 runtime 一起验证。
灰度要看启动、健康、事件循环、P99、内存、错误、下游连接和异步任务,而不是只看构建或进程存活。数据库和消息 Schema 采用扩展后收缩,保证新旧版本共存。
回滚要恢复制品、配置和流量,并处理已经进入队列或写入新字段的数据。不可逆迁移不能用简单代码回滚解决,应准备向前修复或恢复路径。
常见误区
- 误区:只看构建成功。改正:验证目标 Node、依赖、原生模块、启动、性能和下游契约。
- 误区:灰度期间删除旧制品。改正:保留旧镜像和配置,直到数据、流量和异步任务都确认可回滚。
- 误区:回滚代码却保留不可兼容数据库迁移。改正:使用新旧兼容的结构变更,并准备向前修复或恢复。