抓取配额按主机名划分,物理资源却只有一份
搜索引擎调度抓取时,通常以主机名为单位维护队列和预算。协议加主机名相同,才算同一个抓取单位。所以在同一台服务器上放多个域名,它们在调度层面往往各有各的队列,但在物理层面共用同一份 CPU、内存、带宽和数据库连接数。真正的挤占,多数发生在物理这一层。
还有一点容易被忽略:主机名一般包含协议和端口。站点从 http 切换到 https 时,在部分实现里会被当作不同的抓取单位,抓取数据出现一段时间的断层属于常见现象,不必急着归因到内容改动。
三种常见的挤占场景
同一域名下的不同目录
同一个主机名下的所有 URL 共享同一份抓取配额。如果某个栏目生成了大量结构相似、价值不高的页面,蜘蛛把时间花在那里,其他栏目分到的访问次数自然变少。这种情况靠多提交几个 Sitemap 解决不了,只能减少无效 URL 的产生。
同一 IP 上的多个域名
配额通常相互独立,但服务器被其中一个站点占满时,蜘蛛对其他站点的请求也可能超时、连接被拒。表现是:某个站点数据正常,其他站点却频繁出现 5xx 或响应时间飙升。排查时先看整体负载,再分域名看日志。
子域名与共享出口
子域名一般被当成独立主机名处理,配额相对独立。但它们的解析、出口带宽、上游缓存是共享的。子域名开得越多,同一时间叠加到服务器上的请求总量越大,响应变慢时所有子域名的抓取都会受影响。
共享 IP 与 CDN
使用共享 CDN 或虚拟主机时,同一个 IP 上还有其他站点。抓取配额一般不会互相转移,但对方的异常流量可能触发上游的防护规则,导致你的请求被一起限速。出现无法解释的 403 或 429 时,可以确认一下出口 IP 上是否有其他站点在制造异常。
怎么判断是不是被挤占了
- 把访问日志按主机名分组,统计各自的请求量、平均响应时间和 5xx 占比,而不是只看全站合计。
- 对比蜘蛛访问量下滑的时间点与服务器负载峰值是否吻合。
- 检查是否有单个栏目或接口贡献了异常比例的抓取请求。
- 观察超时比例,它比平均响应时间更能说明问题。
可以做的几件事
- 先处理慢的,再谈配额。慢查询、未缓存的接口、体积过大的图片,通常是拖累响应的主要原因。把 HTML 文档的响应稳定住,收益比研究调度算法更直接。
- 减少无效 URL。筛选参数、排序参数、会话 ID 这类会生成大量近似页面的入口,用规则收敛掉,既省服务器资源,也省抓取机会。
- 把静态资源分流。CSS、JS、图片走 CDN 或独立域名,让主站把连接数留给 HTML 文档。
- 关键站点单独放。如果一台机器上既跑着核心站点,又跑着测试站或历史项目,考虑把核心站点迁到独立环境。
- 留出余量。服务器长期跑在高负载区间,遇到流量波动就容易出现超时,而蜘蛛降低抓取频率之后,恢复需要一段时间。
抓取机会不是靠抢来的。把无效消耗降下来、把响应稳定住,通常比研究配额如何分配更有效。
小结
同一台服务器上的多个站点,配额未必共享,但资源一定共享。排查抓取问题时,先确认是调度层面的分配变化,还是物理层面的响应变慢——两者的处理方向完全不同。