跳到正文

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 连通性。

把一门技术讲透到既懂也会用