搜索抓取

蜘蛛连上服务器之前:DNS、TLS 与首字节时间对取页效率的影响

蜘蛛取一个页面,并不只是发出请求然后等待 HTML。在真正传输内容之前,还要经过域名解析、建立连接、TLS 握手等环节。这些步骤平时不显眼,一旦变慢或失败,就会表现为抓取变慢、超时增多,甚至让蜘蛛降低来访频率。本文按顺序拆解这些连接阶段,并给出可落地的排查思路。

搜索抓取

蜘蛛连上服务器之前:DNS、TLS 与首字节时间对取页效率的影响

我们谈蜘蛛抓取时,注意力常放在 HTML、内链和 Sitemap 上,但蜘蛛在拿到第一个字节之前,还要先完成一连串连接动作。这些动作平时很快,快到没人注意;可一旦某个环节抖动,表现出来就是抓取变慢、超时变多,甚至来访频次下降。

一次取页,前后分成几段

把蜘蛛取页拆开看,大致是:解析域名、建立 TCP 连接、TLS 握手(HTTPS)、发送请求、等待服务器返回首字节、传输内容、关闭或复用连接。任何一段拖长,整次取页就被拖长。

DNS 解析:第一步就容易出问题

蜘蛛要先知道域名指向哪台服务器。如果权威 DNS 响应慢、不稳定,或者返回的记录互相矛盾,抓取在第一跳就可能失败。常见情况包括:

  • 解析服务商节点覆盖不足,某些地区解析超时;
  • 同时配置了多条 A 记录,其中一条指向已下线或无法访问的 IP;
  • TTL 设置过短,解析频繁回源,遇到波动就影响可用性;
  • 域名解析与 CDN 配置脱节,蜘蛛拿到的是旧地址。

这些问题的表现往往是间歇性的:一部分抓取正常,一部分超时。日志里看到的是超时或连接失败,而不是 4xx、5xx。

TLS 握手与证书

HTTPS 站点在连接之后要做 TLS 握手。证书过期、证书链不完整、SNI 配置不一致,都可能让握手失败,蜘蛛直接拿不到页面。另外,服务器如果同时支持很老的加密套件,或对握手做了过多限制,也会增加失败概率。

维护上可以关注几点:证书到期时间提前设置提醒;中间证书要一并下发,别只装叶子证书;换了证书或换了证书颁发机构之后,用外部工具从多个地区验证一次握手是否正常。

首字节时间:服务器处理有多快

请求发出去后,蜘蛛等的是第一个字节。首字节时间包含服务器排队、应用处理、后端查询、模板渲染等耗时。它偏高的常见原因有:

  • 数据库慢查询或缺少合适索引,页面每次都要重新计算;
  • 缓存命中率低,动态页面占比高;
  • 应用与数据库之间网络延迟大;
  • 同一时间有大量请求涌入,服务器排队等待。

首字节时间不是越低越好,但持续偏高意味着蜘蛛每次取页都要占用更久的连接,单位时间内能取的 URL 自然减少。

连接复用与并发的关系

HTTP/1.1 与 HTTP/2 在连接复用上的表现不同。HTTP/2 可以在一条连接上并行多个请求,减少重复握手;HTTP/1.1 则需要更多连接。如果服务器的连接数上限、超时时间设置不合理,抓取并发一上来就容易出现排队甚至被拒绝。

抓取变慢时,先分清是服务器处理慢还是连接建立慢。两者排查方向完全不同。

排查时可以先看什么

  1. 用多个地区的探测工具测域名解析耗时与结果是否一致;
  2. 检查证书有效期、证书链完整性与握手协议版本;
  3. 对比静态页面与动态页面的首字节时间,找出慢在应用还是后端;
  4. 看服务器日志里超时、连接重置的比例,判断是偶发还是持续;
  5. 确认抓取高峰时段的连接数与服务器承载是否匹配。

维护上的几条建议

  • 解析记录变更后,留出足够的 TTL 生效时间再观察抓取情况;
  • 证书与中间证书统一管理,避免临期更换;
  • 给动态页面加合理的缓存层,降低重复计算;
  • 监控首字节时间的分位数,而不是只看平均值;
  • 服务器扩容或迁移时,同步确认解析与证书都已就绪。

连接阶段的问题往往不体现在页面内容上,而是藏在日志的超时里。把 DNS、TLS 与首字节时间当作抓取路径的第一段来维护,蜘蛛来到站点时,才不至于还没进门就卡住。