ICP备案

备案站点的超时设置与重试策略治理

作者:备案源头内容团队内容审核:备案源头内容团队更新于 2026年9月15日

没有超时的调用,等于把命运交给对方

线上最隐蔽的一类故障是这样发生的:某个第三方接口不返回也不报错,只是一直挂着。你的线程卡在那里,连接池慢慢被占满,几分钟后整站所有接口一起变慢——根因只是一处漏配的超时。很多 HTTP 客户端和数据库驱动的默认超时是「无限等待」,这是最危险的默认值。

关键要点

  • 每一次跨进程调用都必须显式设置超时,不要依赖默认值。
  • 超时预算要从入口往内拆:上游超时必须大于下游各段之和,否则会产生「幽灵请求」。
  • 重试只对瞬时故障有效;对已经过载的下游,重试是压垮它的最后一根稻草。
  • 重试的前提是幂等,给非幂等接口加重试等于批量制造重复数据

超时的三个层次

层次 典型取值 漏配的后果
连接超时 1~3 秒 握手阶段卡死,连接池被占满
读写超时 按下游 P99 加余量 线程被长期占用,吞吐归零
整体业务超时 用户可接受的上限 用户早已离开,服务器还在算

三者缺一不可:只配连接超时挡不住「连上了但不返回」,只配读写超时挡不住「握手就卡住」。反向代理层也要同步配置,否则应用侧断了、代理侧还在等,配置见 Nginx 反向代理配置

超时预算:从外往内拆,而不是各配各的

假设入口给用户的承诺是 3 秒,那么这 3 秒要在链路上分配完:网关 3 秒 → 服务 A 2 秒 → 服务 B 800 毫秒 → 数据库 300 毫秒,每层都要为自己的处理和重试留出余量。

最常见的反模式是上游超时比下游还短:入口配 2 秒,下游配 10 秒。结果入口早就返回失败了,下游还在继续执行并占着连接和 CPU,这类无人认领的「幽灵请求」在故障时会成倍消耗资源。

取值要基于实测的 P99 而不是平均值——平均值 200 毫秒的接口,P99 可能是 2 秒,按平均值配超时会让正常请求被大面积误杀,压测取数方法见 性能优化与压测

重试的四条规则

  1. 只重试幂等操作:查询、或带幂等键的写入。
  2. 只重试可重试的错误:连接失败、503、网关超时;参数错误这类 4xx 重试多少次都是错。
  3. 指数退避加随机抖动:1 秒、2 秒、4 秒,并在每次等待上叠加随机偏移,避免所有客户端在同一毫秒集体重试。
  4. 次数封顶并计入超时预算:通常 2~3 次,且总耗时不能超过上游给的时间窗口。

第 3 条的抖动常被省略,后果是「同步波峰」:下游抖动一次,成千上万个客户端同时失败、又同时在 1 秒后一起重试,把刚要恢复的下游再打死一次。

重试风暴:一个被严重低估的放大器

如果链路上每一层都配了 3 次重试,三层串起来,下游收到的请求量会被放大到原来的约 27 倍。故障期间压垮系统的往往不是用户流量,而是自家的重试流量

三个对策:

  • 只在一层重试:通常选最靠近故障点的那一层,其余层只做快速失败。
  • 配合熔断:错误率超阈值后直接短路,不再产生新的重试,做法见 限流、熔断与服务降级
  • 设重试预算:限制重试请求占总请求的比例(例如不超过 10%),超出部分直接失败,把重试量从「乘法」变回「加法」。

幂等键:让重试变得安全

重试安全的前提是服务端能识别「这次和上次是同一个请求」。落地方式是客户端生成一个唯一请求 ID 随请求带上,服务端用唯一索引或去重表保证同一个键只真正执行一次,重复到达时直接返回首次结果。

这套机制和消息消费端的去重是同一个思路,可以共用同一张去重表,见 消息队列与异步任务运维

别忘了连接池

超时和连接池是一对:超时越长,池被占满得越快。并发占用量约等于 QPS 乘以平均响应时间,下游从 100 毫秒劣化到 2 秒,占用量就是 20 倍,池必然被打穿。所以调长超时前,先确认连接池能不能扛住对应的并发,也要给不同下游做资源隔离,避免一个慢依赖吃掉全部连接。

上线与验证

改超时是高风险变更:配小了会误杀正常请求,配大了会在故障时放大影响。建议先灰度一小部分流量观察错误率,见 灰度发布与蓝绿部署。上线后要长期盯三条曲线——超时率、重试率、下游 P99,指标采集见 可观测性建设,告警配置见 备案网站监控告警体系。演练与复盘流程见 故障响应、复盘与 SLO 实践

常见坑

  • 使用客户端默认的无限超时:一个慢依赖拖垮全站。
  • 上游超时小于下游:制造大量幽灵请求。
  • 每层都重试:小故障被放大成雪崩。
  • 给非幂等写接口加重试:重复下单、重复扣款。
  • 固定间隔重试:形成同步波峰,下游反复被打死。

常见问题

超时到底设多少秒合适?

没有通用数值,但有通用方法:取该调用实测的 P99 耗时,乘以 1.5~2 倍作为读写超时,同时确保它小于上游分配给你的时间预算。两个条件冲突时,说明这段链路本身太慢,应该优化而不是调大超时。

重试次数设几次比较好?

多数场景 2~3 次足够。再多的重试对瞬时抖动没有额外收益,却会显著放大故障期间的流量。前提是整条链路只有一层在重试。

为什么重试一定要加随机抖动?

没有抖动时,所有客户端的重试时刻会对齐,形成周期性的流量尖峰,下游刚恢复就被再次打垮。加入随机偏移能把重试流量摊平到一段时间内。

查询接口是不是可以随便重试?

查询通常幂等,但代价不为零:重试会占用下游连接和 CPU。下游已经过载时,查询重试同样会加剧雪崩,所以仍然需要次数上限和熔断保护。

资料来源

主流 HTTP 客户端、RPC 框架与数据库驱动官方文档中关于连接超时、读写超时与重试策略的公开说明,以及指数退避、抖动与重试预算等通用工程实践资料。本文为通用运维说明,仅供参考,具体以实际框架与依赖情况为准。

相关阅读

网站访问日志留存与安全合规运维要点

为什么要留日志:这是法定要求 《网络安全法》第二十一条明确要求网络运营者"采取监测、记录网络运行状态、网络安全事件的技术措施,并按照规定留存相关的网络日志不少于六个月"。已完成备案、对外提供服务的网站属于网络运营者范畴,日志留存不是可选项,而是基础合规义务。 应留存哪些日志 | 日志类型 | 记录内容 | 主要用途 …

网站新增域名如何补充接入备案

企业在原有网站基础上新增域名,比如启用新的品牌域名或拼音域名指向同一网站时,不能直接绑定使用,而是需要在原备案基础上补充办理新增域名的接入手续。 新增域名前的准备工作 新增域名前,建议先确认该域名已经完成实名认证,可以通过 Whois查询 核对域名的注册信息和实名状态,避免因域名信息未实名导致接入申请被退回。同时确认…

备案信息年度核查该如何配合应对

部分省份的通信管理部门会对辖区内已备案网站开展年度或不定期核查,核查方式包括系统比对、电话回访、短信确认等,目的是确认备案信息与网站实际运营情况是否一致。 核查通常关注哪些内容 年度核查一般围绕主体信息、网站信息、接入信息三个维度展开,具体可以对照下表自查: | 核查维度 | 常见核查点 | | --- | --- …

备案号在网站上的规范展示与使用要求

网站完成备案只是第一步,备案号在页面上的展示方式同样需要长期维护,很多主体正是因为展示细节不规范,在日常巡查或年度核查中被要求整改。 展示位置与基本要求 通常做法是将备案号放置在网站首页底部,文字需清晰可辨、不被图片或广告遮挡,且格式应与下发的备案号文本保持一致,不能随意增减字符或调整顺序。是否需要加超链接指向查询入…

备案注销之后重新申请要注意什么

有些主体在此前因业务调整、接入商变更等原因注销了原有备案,之后又因新的业务需要重新申请备案。这种“二次备案”与首次备案在流程上大体相似,但有几个环节容易被忽略。 重新申请前的自查 重新申请前,建议先用 ICP备案查询 确认原备案是否确实已经完成注销,避免出现原备案未彻底清空、新申请与旧记录冲突的情况。同时检查计划使用…

备案信息变更有没有时效要求

备案不是办理完成后就一劳永逸的事项,主体信息、网站信息或联系方式一旦发生变化,通常需要在信息变化后的一定时间内完成变更提交,具体时限以属地管局要求为准。 哪些变化需要及时申报 常见需要变更的情形包括:主办单位名称或证件信息变化、网站负责人更换、联系电话或邮箱失效、网站域名调整、网站内容服务类型发生实质变化等。这类变更…

公司迁址之后备案地址信息如何更新

企业办公地址或注册地址发生变化后,备案信息中登记的地址项也需要相应更新,尤其是当迁址涉及跨区、跨市甚至跨省时,办理流程会比同城内迁址更复杂一些。 迁址后需要关注的信息 迁址后首先要确认工商登记信息是否已经完成同步变更,备案地址一般以工商登记的最新地址为准。可以先用 ICP备案查询 查看当前登记的主办单位地址,与最新的…

备案预留手机号邮箱变更该如何更新

备案信息中登记的手机号和邮箱,是管局与接入服务商联系网站负责人的主要渠道,用于发送核查通知、验证短信、审核结果等重要信息。这些联系方式一旦更换却未同步更新,容易导致关键通知被漏收。 常见需要更新的场景 负责人更换手机号或离职导致原号码停用; 企业邮箱系统迁移,原邮箱地址不再使用; 备案负责人变更,联系方式随之更换。 …

系统学习