CodeRoadMap
首页路线题库资源库文章社区
CodeRoadMap

程序员的学习成长路线图。内容免费开放,登录后可同步路线图与课时进度。

由 程序员柏风 独立维护 · 关于作者

学习

  • 路线图
  • 课程
  • 面试题
  • 文章
  • 我

更多

  • 资源
  • 社区
  • 关于作者
  • 内容说明

© 2026 CodeRoadMap

津ICP备2026012044号-1·津公网安备12011002026155号·coderoadmap@126.com
可靠性与故障模式/课时/超时与 deadline
RawBlame
课时目录12 节

可靠性与故障模式

  1. 01故障模式是什么
  2. 02故障分类
  3. 03级联失败
  4. 04重试与退避
  5. 05超时与 deadline
  6. 06熔断与舱壁
  7. 07降级与限流
  8. 08事务与一致性
  9. 09单体 vs 微服务故障域
  10. 10SLO 与错误预算
  11. 11事后复盘
  12. 12综合练习

超时与 deadline

连接/读/写超时;gRPC deadline 对照。

25 分钟

超时与 deadline

没有超时的调用,在依赖变慢时会 占住线程直到永远——级联失败的第一帮凶。超时 给每次调用设 上限时间;deadline 把预算沿调用链 向下传递,子调用不能超过剩余时间。

学习目标

  • 区分连接超时、读超时、写超时
  • 理解 deadline 在链路中的传递
  • 配置 Spring Boot / Feign / Nginx 超时

三类超时

类型含义典型值(内网)
ConnectTCP 握手完成1~3s
Read等待响应体按 P99 + 余量
Write发送请求体大上传单独调
# application.yml — RestTemplate / WebClient
spring:
  datasource:
    hikari:
      connection-timeout: 3000
      validation-timeout: 2000

Feign 超时见 sc-feign;Gateway 见 sc-gateway。

Deadline 传递

用户 deadline = 3s
    │
    ├─ backend 处理预算 2.8s
    │       ├─ 调 course-svc 预算 1s  ← 不能超过父剩余
    │       └─ 查 MySQL 预算 500ms
    │
    └─ 超时则立即 504,释放线程

gRPC 原生支持 context deadline;HTTP 可用 X-Request-Timeout 等约定(团队统一即可)。

宝塔 Nginx 层

# 概念配置 — 保护 upstream 不被拖死
proxy_connect_timeout 3s;
proxy_read_timeout    30s;
proxy_send_timeout    30s;

Nginx 超时应 略大于 backend 自身超时,否则 backend 还在处理、Nginx 已断连,造成 重复请求。

与重试、熔断的关系

超时 → 触发重试?(仅 transient + 幂等)
     → 连续超时 → 熔断 OPEN([rel-circuit](/tracks/reliability-essentials/lessons/rel-circuit))
     → 用户侧降级

练习

  • 列出 CodeRoadMap 四条链路的建议 read timeout
  • 解释「Nginx 超时 < backend 超时」的问题
  • 对照 rel-cascade 画线程释放时序

小结

超时释放资源;deadline 防止子调用偷走整段预算。 下一课:熔断与舱壁。

加载本节练习…
← 上一课重试与退避下一课 →熔断与舱壁