主题
Spring Cloud 微服务生产检查清单
适用 Spring Cloud 2020.0+ / Spring Cloud Alibaba(Nacos、Sentinel、Seata)。每条都可勾选,括号内是默认值或判断依据;版本差异以官方文档为准。 只列「不做会出事」的动作,机制解释见各篇正文。
上线前
- [ ] Nacos 至少 3 节点并外置 MySQL,
mode=cluster(以官方文档为准);namespace 按dev/test/prod隔离;普通业务用 AP(默认),支付、交易等不能读旧实例的服务显式切 CP。 - [ ] 优雅下线已接入:
preShutdown钩子先摘除实例,等一个消费者缓存周期(LoadBalancer 实例缓存默认 35s)排干流量,再停进程。 - [ ] Feign 客户端基线:换掉默认
HttpURLConnection(引入feign-httpclient/feign-okhttp并设池上限);connectTimeout取 1–5s,readTimeout取下游 P99 × 2,且 Gateway 总超时 >readTimeout+ 重试次数 ×readTimeout;非幂等接口关闭重试;RequestInterceptor透传 traceId 与灰度标识。 - [ ] Gateway 路由变更走 CI/CD + 灰度:先发 1 个实例验证,断言与
order显式声明;上传接口按实际版本调大请求体上限(WebFlux 侧是spring.codec.max-in-memory-size,以官方文档为准);Filter 内禁止 JDBC、同步 HTTP 等阻塞调用。 - [ ] Sentinel 规则持久化到 Nacos/Apollo:启动时主动拉取初始化,不依赖 Dashboard 内存推送;核心接口同时配置系统自适应保护兜底。
- [ ] Seata 的 undo_log 已建在每个业务库,TC 集群共享持久化 DB(
store.mode以官方文档为准);BLOB/TEXT 大字段不放进 AT 管理的表。
运行中
- [ ] Nacos 与配置生效:实例注册数、心跳超时数、CP 服务 leader 切换次数、每次配置变更在各实例的生效时间;Apollo 长轮询 60s 加客户端 0–1000ms 随机延迟,500 实例规模下生效差可达 2 分钟,灰度规则不要依赖它。
- [ ] Feign 调用:按下游看超时率、重试率、连接池活跃数与等待数;重试率上升等同于下游流量被放大。
- [ ] Gateway:404 比例、单路由匹配数为 0 告警、P99、请求体拒绝数;路由匹配数骤降通常先于全站故障出现。
- [ ] Sentinel:block 比例、熔断打开次数、规则条数与配置中心比对;规则数变少说明加载或持久化断了。
故障时
- [ ] 大量超时且下游流量翻倍 → 看 Feign 超时率与重试率 → 确认是重试放大了流量 → 先关非幂等重试、再按 P99 调超时、最后开熔断。
- [ ] 接口变慢且数据库锁等待暴涨 → 查
@Transactional方法内是否调了 Feign/RPC → 把远程调用移到事务外,或改本地消息表 + 补偿。 - [ ] 发布后全站 404 → 查最近一次路由变更、路由
order与通配断言 → 命中数为 0 的路由立即回滚,不要逐条猜。 - [ ] 重启后限流规则消失 → 查规则来源是否为 Dashboard 内存推送 → 从配置中心恢复规则,禁止长期用实时推送模式。
- [ ] Seata 回滚长时间不结束 → 查 TC 与 RM 的 8091 连接、
undo_log是否完整、全局锁是否被占 → 不要手工删 undo_log,先恢复 RM 连通性。