标准答案
- 确认目标 JDK、编译插件、运行镜像、监控代理和第三方库的支持矩阵。
- 执行单元、集成、契约和启动测试,重点检查反射、序列化、TLS、时区和默认行为变化。
- 用代表性流量比较启动、CPU、内存、GC、P99、错误和下游连接。
- 保留旧制品和配置,使用灰度或蓝绿发布,确认数据库和消息 Schema 可回退。
题目解析
JDK 或依赖升级会改变字节码、模块反射、TLS、时区、GC 默认值、代理和驱动行为,编译通过只能证明一小部分兼容性。运行镜像、监控 agent 和启动参数也要进入矩阵。
升级验证要覆盖启动、序列化、契约、数据库、消息 Schema 和真实流量性能。比较 CPU、内存、GC、P99、连接和错误,确认没有以吞吐或尾延迟换取表面成功。
回滚要同时考虑应用制品、配置、数据库结构和消息兼容窗口。不可逆迁移不能依赖简单 down 脚本,应准备向前修复、备份恢复或灰度停留方案。
常见误区
- 误区:只在本地 JDK 编译成功就上线。改正:在生产镜像、驱动、代理和配置组合中做启动与集成验证。
- 误区:升级后没有性能基线。改正:保留旧版本的启动、CPU、内存、GC、P99、错误和下游连接数据。
- 误区:数据库迁移不可逆却没有回滚方案。改正:采用兼容迁移,并准备备份恢复或向前修复路径。