搜索抓取

搜索蜘蛛抓取:连接复用与 HTTP/2 对抓取并发的影响观察

蜘蛛抓取量不只受内容与入口影响,连接层同样关键。本文从 keep-alive 复用、负载均衡会话分散、HTTP/2 多路复用带来的流级等待等角度,梳理可直接检查的响应头与日志指标,并给出按顺序调整、观察一到两周的落地建议。

搜索抓取

搜索蜘蛛抓取:连接复用与 HTTP/2 对抓取并发的影响观察

谈抓取时,多数人先看内容质量和入口数量,但还有一个容易被忽略的层面:连接。蜘蛛在单位时间内能发出多少请求,不只取决于服务器处理速度,也取决于连接是否被复用。同一台服务器,内容完全一样,连接配置不同,抓取表现可能差出一截。

连接复用为什么会改变抓取节律

在 HTTP/1.1 下,一个请求通常对应一条 TCP 连接。如果服务端愿意保持连接,蜘蛛可以在同一条连接上连续请求多个 URL,省掉反复的握手开销;如果服务端每次都返回 Connection: close,或者把 keep-alive 超时设得很短,蜘蛛就得不断新建连接、重新握手,单位时间内能完成的请求自然变少。

更隐蔽的情况是负载均衡:同一只蜘蛛的请求被分散到不同后端节点,各自维护连接,看起来连接数不少,实际可复用的会话很少。

几个可以直接检查的点

  1. 看响应头里是否存在 Connection: close,或者 keep-alive 的超时时间是否明显偏短。
  2. 看 TLS 握手次数与请求数的比例,比例接近一比一,说明连接几乎没被复用。
  3. 看负载均衡是否开启了会话保持,以及空闲连接被回收的时间。
  4. 看访问日志里同一来源 IP 的连接持续时间分布,判断是长连接还是频繁短连接。

HTTP/2 带来的变化与新的盲区

启用 HTTP/2 后,多条请求可以共用一条连接,服务端看到的并发从“连接数”变成了“流数”。好处是握手成本下降、抓取节律更平稳;但也会带来新的观察盲区:只看连接数的监控会显示得很平静,实际单条连接上可能积压了大量请求。

另一种情况是流控窗口设置过小,或者后端某个接口排队,导致个别流迟迟拿不到响应。蜘蛛侧看到的是请求超时或迟迟不返回,而服务器整体负载并不高。排查时需要把流级别的等待时间单独拉出来看,而不是只看 CPU 和带宽。

观测指标建议

  • 单位时间抓取请求数:按小时统计,观察调整前后的变化趋势。
  • 平均连接持续时间:过短说明复用不足,过长要确认是否有请求卡住。
  • 握手次数与请求数之比:越低说明复用越好。
  • 超时与重试比例:与连接层指标放在同一张图上对照。
连接层调整只影响抓取过程的顺畅程度,并不能决定页面是否被收录或获得排名,把两者混为一谈容易做出错误决策。

落地顺序

  1. 先确认现状:抓一份包含连接信息的抓取日志样本,作为基线。
  2. 调整 keep-alive 超时与单连接最大请求数,幅度不要太大,一次只改一个参数。
  3. 确认 HTTP/2 或 HTTP/3 的启用范围,注意部分老旧中间件对多路复用的支持并不完整。
  4. 调整后观察一到两周,重点看抓取请求数与超时率的曲线,而不是某一天的数字。

连接层的问题往往不显眼,但它决定了同样的内容、同样的入口,蜘蛛能不能在同样的时间里走完。把它和 URL 发现、内链路径放在一起看,排查思路会更完整。