top of page

Kernel.org 的爬虫正将开放访问变成 CPU 税

9月8日
讀畢需時 15 分鐘

Konstantin Ryabitsev 表示,尽管已部署旨在提高自动化抓取成本的防御措施,爬虫如今仍让 git.kernel.org 的 14 至 16 个 CPU 核心持续忙碌。这些爬虫没有克隆底层 Git 仓库,而是请求数百万个单独的提交页面。这种选择让高效的公共档案变成了为身份不明机器长期提供 HTML 渲染的服务。

Ryabitsev 是参与 kernel.org 基础设施工作的 Linux Foundation 系统管理员,他于 2026 年 8 月 29 日公布了这些数据。Simon Willison 于 9 月 7 日重点提及此事,因为 Datasette 面临类似的风险:它能通过海量有用且可抓取的页面公开数据库内容。

眼下的事件涉及 Linux 基础设施,但冲突的影响远不止于此。开放技术档案原本旨在帮助人们检视、引用并保存信息。大规模机器客户端却可能将这种开放性转化为没有定价的计算负担。

这一反转在 git.kernel.org 上尤为鲜明。其维护者已经通过 Git 提供完整的仓库历史——这套协议正是为高效传输这些历史而设计的。然而据报道,抓取程序仍选择计算成本更高的路径,分别请求提交、补丁和差异的渲染页面。

这种行为迫使维护者限制合法开发者也会使用的接口。Ryabitsev 称,该服务仍保持响应,但已经在禁用部分功能,并将更多操作置于访问控制之后。因此,爬虫激增的代价不仅体现在 CPU 时间上,也体现在开放性的流失上。

爬虫每天产生 600 万次请求

即使网站在人工访问者眼中看似运行正常,其规模也足以持续消耗基础设施资源。

Ryabitsev 的爬虫测量数据显示,系统每天会收到约 600 万次针对看似随机提交的请求。部署在主站前的浏览器挑战机制 Anubis 会立即拒绝约 66% 的请求;另有 33% 能完成挑战并继续访问 git.kernel.org。

这些数字并不能证明每一次受挑战的请求都来自 AI 公司。Ryabitsev 明确表示,运营者无法确定识别每一个客户端。人可能会打开一条旧提交,而机器人也可以伪装成当前的浏览器。

请求模式提供了最有力的证据。一个客户端在早已不活跃的分支中浏览互不相关的提交,并不像是在跟进补丁系列的开发者。Ryabitsev 估计,即便采用对用户有利的假设,合法活动也仅约占总流量的 2%。

由此产生的工作负载占据了分布在五个地理节点上的 90 个 CPU 核心中的 14 至 16 个。平均而言,这相当于该服务总处理能力的约 20%。实际需求会呈波动式到来,因此负载并不像固定分配 20% 那样规整。

这些核心承担的是一项单一任务:将 Git 对象转换成 HTML 页面,再供客户端解析渲染后的输出。Ryabitsev 表示,这项活动消耗的 CPU 时间超过所有合法访问形式的总和,其中也包括 Git 克隆。

这种区别很重要,因为克隆会通过 Git 原生的对象模型传输仓库。客户端获得历史记录后,可以在本地遍历提交。服务器不必为客户端想查看的每一个对象重新构建展示页面。

HTML 请求则颠倒了这种效率。每个请求都要求服务器定位仓库数据、运行 cgit,并生成便于人类阅读的响应。客户端在提取所需文本后,会丢弃大部分周边界面。

当这一过程在数百万个 URL 上重复时,每个单独看似合理的页面就成了昂贵的机器端点。传统容量规划通常将页面浏览视为工作量相近的单位。git.kernel.org 的案例说明,当一个 URL 触发的计算远多于另一个 URL 时,这种模型为何会失效。

该服务尚未在当前的背景负载下崩溃。Ryabitsev 表示,设计不佳的持续集成系统仍可能造成更严重的故障,尤其是在许多节点同时执行浅克隆时。爬虫流量带来的则是另一类问题:它会永久侵蚀运行余量。

失去的余量降低了系统应对流量高峰、维护事件和合法自动化任务的能力。它也迫使运营者花时间研究对抗性行为,而不是改善面向内核开发者的服务。因此,一个表面稳定的网站可能承受着相当可观的隐性成本。

关键变化不在于公开源代码可以被下载。Kernel.org 本就有意支持这种使用方式。变化在于,身份不明的客户端选择了成本高昂的呈现形式,并以工业化规模提出请求。

Git 让数据获取廉价,HTML 却让它变得昂贵

核心冲突并非访问与保密之争,而是高效批量访问与逐页浪费式提取之间的矛盾。

Linux 开发长期受益于复制机制。Git 仓库可以被克隆,邮件列表档案可以被复制,镜像能够在任一单一服务器停止运行后继续保存资料。Kernel.org 鼓励这种冗余,而不是将每一次下载都视为威胁。

Git 通过按照对象之间的关系传输对象,使这种模式具备经济性。仓库存储提交、树和文件内容等可寻址对象。客户端与服务器协商客户端缺少哪些对象,随后传输必要数据,而不必围绕每个提交重建网页。

网页界面则服务于另一种目的。它帮助开发者查看一项变更、分享稳定链接、比较版本,或无需克隆大型仓库就下载补丁。git.kernel.org 使用的 cgit 提供多种视图,因为每一种都支持合理的人类工作流。

这些选项也扩大了可抓取的范围。据 Ryabitsev 介绍,主 Linux 仓库包含约 148 万次提交。Git.kernel.org 托管约 922 个分支,它们在很大程度上共享相同的底层对象。

因此,爬虫可以发现大量通向重复提交内容的 URL。它还可以请求补丁视图、纯文本渲染、仓库树以及任意比较。内容是有限的,但可能的 URL 空间却大得多。

这是数据库驱动网站常见的失效模式。数据库中的记录数量或许可控,但其界面允许无数种筛选、排序、分页和比较组合。对不加区分的爬虫而言,每一条生成的路由都像是另一份文档。

Willison 将这一模式与 Datasette 联系起来。Datasette 是他开发的开源工具,用于在网页上发布可搜索的数据库。Datasette 实例可以将结构化信息转化为可浏览的页面和查询结果。这种可访问性对用户、搜索引擎、研究人员和辅助工具都很有价值。

但它也可能暴露出计算成本高昂的参数组合。机器人无须恶意代码也能制造有害负载;它只需以超过应用低成本响应能力的速度枚举链接或构造有效 URL。

同样的风险也适用于文档系统、问题追踪器、代码浏览器、公共记录门户和个人档案。按需转换结构化数据的网站比静态页面更脆弱,因为每次获取都可能触发数据库工作或服务器端渲染。

当许多客户端请求同一资源时,缓存会有所帮助。但当爬虫有意或无意地将请求分散到唯一 URL 上时,缓存的效果会大幅下降。查询参数、任意差异和旧分支都可能破坏缓存赖以发挥价值的复用机制。

运营者可以预先渲染热门页面,但不可能预渲染每一种可能的比较。他们也可以提供批量导出,但基于网页链接设计的爬虫可能永远不会发现或选择这条高效路径。技术上可用,并不保证客户端行为理性。

对于构建可搜索档案的开发者而言,这是一项架构警示。机器访问应尽可能使用有边界的 API、订阅源、导出功能或仓库协议。面向人类的界面则需要设置与生成每个响应成本相匹配的限制。

记录这些决策的团队也应将运营决策与代码一并保存。一套可搜索的工程知识库可以在下一波流量到来前,将爬虫策略、高成本路由和事故证据关联起来。

kernel.org 事件表明,带宽只是成本的一部分。当自动化客户端反复请求动态呈现形式时,CPU 时间、缓存抖动、可观测性成本和运营者注意力都可能成为主要负担。

Anubis 提高了代价,直到爬虫愿意承担

工作量证明暂时减少了滥用流量,但由于底层数据仍具价值,持续运行的爬虫最终适应了这一机制。

Kernel.org 最初采用了常见的防御措施。运营者识别可疑的用户代理字符串、检查日志,并封锁与明显自动化采集相关的地址。当爬虫会表明身份,或来源于可管理数量的网络时,这种做法是有效的。

随后,流量变得更难分类。Ryabitsev 描述了一些客户端,它们声称自己是普通浏览器,并将请求分布在云服务子网中。封锁整个网络可以阻止滥用,但也可能拒绝同一提供商托管的合法自动化检查。

下一步变化进一步削弱了基于地址的控制。请求开始来自大量住宅和移动网络地址。Ryabitsev 称,每个地址只会发出四五次请求,随后就从日志中消失。

这种模式类似于通过消费级设备路由流量的代理网络。网站看到的似乎是一大群互不相关的用户,而非集中式抓取行动。当一个地址看起来可疑时,该来源可能已经不会再回来。

Kernel.org 因此部署了 Anubis,这是一款开源 Web 防火墙,会在允许客户端访问上游服务前发起挑战。其核心机制是工作量证明:对客户端相对昂贵、但服务器验证成本很低的小型数学任务。

Anubis 项目将这款软件描述为面向遭受持续 AI 爬虫流量的小型互联网服务的防御工具。其维护者也称它是一种严厉的应对方式,因为挑战可能阻挡小型爬虫和合法的归档机器人。

在 git.kernel.org,挑战机制起初改变了经济账。自动化客户端停止尝试访问,而人工访客接受了短暂延迟。这段时期持续了数月。

后来,机器人开始破解难度等级四。运营者将挑战提高至等级五,需要客户端付出更多计算。Ryabitsev 表示,这一设置在移动设备上可能需要数秒,并会让手机明显发热。

更高难度再次换来了数月时间。但它也让每一位遭遇挑战的合法访客承担更高成本。当旧硬件、注重隐私的浏览器、禁用 JavaScript 或连接不稳定的用户无法完成预期流程时,可访问性便会受损。

爬虫最终也攻克了第五级挑战。在 Ryabitsev 发布报告时,每天 600 万次提交请求中,约有三分之一通过了挑战。工作量证明并未失效,因为它仍拦住了另外三分之二的请求,但已无法恢复此前的平衡。

这一结果暴露了经济威慑的核心弱点。挑战只有在成本高于爬虫预期收益时才有效。高价值、干净的技术历史为采集者投入更多资源提供了理由。

Ryabitsev 认为,Linux 提交历史尤其具有吸引力,因为其中大部分内容早于生成式文本大规模出现的时期。研究人员担心,反复使用合成材料进行训练可能降低模型质量,或放大其中的伪影。这使得结构良好、由人类产出的技术记录成为理想的训练材料。

这些客户端的确切身份和用途仍未得到证实。有些可能用于模型训练,另一些则可能用于构建搜索索引、代码数据集、安全产品或商业档案。就运营层面而言,它们的共同表现比其标签更重要。

Anubis 开发者 Xe Iaso 也承认,工作量证明并非完整答案。在一次技术讨论中,Iaso 解释称,该机制针对的是大规模抓取的经济性,但也对它能否有效应对能力强大的分布式客户端表示怀疑。

具备浏览器自动化能力的客户端可以执行 JavaScript、存储 Cookie,并解决与人类相同的公开挑战。分布式客户端则可将工作分散到大量设备上。提高难度反而可能更快地惩罚合法访客,而非威慑资源充足的采集者。

Kernel.org 的经历用生产数据证实了这种权衡。防御措施奏效后,对抗性客户端随之适应,运营者则继续提高成本。这场较量没有结束,因为攻击者和防御者都还有另一个参数可以调整。

开放档案被迫移除实用功能

最具破坏性的结果并不是服务器账单增加,而是匿名、对人类友好的访问方式逐步退缩。

Kernel.org 计划减少可被爬取的 URL 数量,并限制那些执行成本高昂的操作。Ryabitsev 警告称,匿名用户应预期部分功能会消失。底层数据仍可下载,但获取时可能需要额外步骤。

对于基础设施运营者而言,这种应对是理性的。如果某个接口产生了不成比例的负载,限制它就能保护服务的其余部分。Git 克隆和开发者工作流比无限制地匿名渲染任意比较结果更重要。

但每一项限制都会改变谁能使用该档案。安装了 Git 的开发者可以克隆仓库并在本地查看。顺着链接访问的学生、核查某次提交的记者,或使用受限设备的人,则可能依赖浏览器界面。

自动化研究工具也可能具有正当用途。搜索索引帮助用户找到旧修复;档案系统保存证据;安全服务将提交与漏洞关联;无障碍工具可能以不同于传统浏览的方式获取页面。

广泛限制无法将这些客户端与滥用型采集者清晰区分。身份验证带来可追责性,但也增加了管理工作。速率限制可以减少峰值,但当请求来自分布式地址时可能失效。

封锁住宅网络会排除真实家庭用户。封锁云服务商会干扰开发者自动化流程。要求工作量证明,则意味着服务器尚未判断请求是否有用之前,每位访客都得花费电力和时间。

Robots.txt 提供的是一种政策信号,而非访问控制机制。官方robots 标准指出,其规则并非授权。合作型爬虫会遵守声明的偏好,而身份不明的客户端则可以忽略它们,或伪装成浏览器。

结果形成了一种不对称。负责任的机构会标明其爬虫身份、发布文档、遵守排除规则,因此也更容易被封锁。责任较弱的采集者则隐藏身份、分散流量,因而更难被阻止。

这可能产生一种反常结果:合规爬虫失去访问权限,规避限制的爬虫却继续运行。这也使流量归因变得不可靠。运营者可以合理地将某类行为描述为 AI 抓取,却未必能够将请求关联到某个具名模型开发商。

这种不确定性是这则事件中最主要的怀疑点。Ryabitsev 的流量测量是直接的运营证据,但每个请求背后的目的尚未得到独立证实。98% 的估计涉及表面上的抓取行为,而非经核实的 AI 公司名单。

这一差异应当影响政策和报道方式。若没有网络证据,将所有负载归因于某个特定供应商并不准确;同样,因为每个客户端都没有公开身份而否认问题,也同样不准确。

可量化的损害发生在应用层。数百万次请求选择旧提交、重复分叉,以及成本高昂的渲染结果。防御挑战拦住了许多请求,但仍有大量请求支付了计算代价后继续执行。

Cloudflare 通过为网站所有者提供更细粒度的搜索、代理和训练爬虫控制措施来应对这一更广泛的问题。其AI 流量控制体现了一项重要区分:用于模型训练的爬虫与由用户请求的助手并不服务于同一目的。

大型边缘网络可以结合地址情报、浏览器信号、流量历史和跨客户观察进行判断。小型开源服务很少拥有这种可见性。它们只能根据本地日志和不完善的标识符作出决策。

这种差距将损害集中在最无力承受的组织身上。大型商业平台可以购买更多容量并部署专业的机器人管理系统。志愿者项目、学术档案或独立出版商,则可能只能关闭成本高昂的访问路径。

开放网络失去的就不只是几个界面功能。它失去了这样一种假设:发布有用、可链接的信息在经济上是安全的。页面在技术上仍然公开,但访问变得有条件、需要接受挑战,或者只能通过批量数据工作流获得。

真正的冲突是开放性与未定价的计算

开放数据并不要求每一种可能的呈现形式都必须保持免费、匿名且无限制。

围绕爬取的伦理争论通常聚焦于复制内容的许可。Kernel.org 提出了第二个问题:谁应当为将内容转换为采集者偏好格式的成本买单?

Linux 仓库已经通过高效的传输机制提供。运营者并未扣留历史记录,也没有要求获得对其的独家控制。他们反对的是那些让公共服务反复计算更昂贵呈现形式的客户端。

这一差异使该案例不同于一场关于限制知识的简单争论。高效的克隆方式让采集者在传输完成后承担大部分处理成本。逐次提交的 HTML 抓取则将重复工作转嫁给源站。

负责任的采集者应首先寻找批量导出、仓库访问、信息源、站点地图或有文档说明的 API。它应缓存已获取的材料、去重分叉,并避免任意参数组合。它还应表明身份并提供可用的联系方式。

速率协商同样重要。需要异常大规模流量的爬虫可以向运营者申请镜像或定时导出。Kernel.org 表示,即使匿名接口变得更严格,它仍打算向提出请求的人提供数据。

这些做法听起来很基础,因为成熟的搜索引擎经过数十年发展已形成这些规范。AI 需求扩大了收集网络级数据集的组织数量。并非每个团队都继承了同样的运营规范。

激励也不同。急于获取稀缺的前 AI 时代材料的采集者,会从快速行动中获益。低效采集的成本则落在数千个无关网站运营者身上。没有合同、执法或可靠身份的情况下,爬虫不会自动承担这种外部成本。

工作量证明试图将部分成本重新转移给请求者。git.kernel.org 的结果显示了这种模式的吸引力和局限。它提高了边际成本,却无法区分有价值的人类请求和有价值的自动化请求。

按次收费是另一种可能路径,但付费本身并不能解决系统设计问题。如果定价、配额和容量控制没有妥善协调,爬虫仍可能压垮动态端点。小型网站也缺乏协商机器访问所需的计费系统。

更好的协议发现机制将有所帮助。机器可读页面可以引导采集者前往仓库克隆、压缩档案或有边界的数据导出。爬虫仍需要激励或要求来遵循这种指引。

应用设计可以在流量到达前降低暴露风险。开发者可以限制结果大小、拒绝不合理的比较、规范化等效 URL,并为高成本路径设置独立限制。他们可以预先计算常见视图,并要求对非常规查询进行身份验证。

可观测性必须衡量工作量,而不仅仅是请求数。100 万个缓存的静态响应,其成本可能低于几千次未缓存的数据库查询。运营者需要掌握按路径划分的 CPU 时间、缓存效率、挑战完成率,以及跨地址归类的客户端行为。

更深层的政策问题关乎可执行的身份识别。声明运营者和目的的爬虫可以获得量身定制的访问权限。伪装成数百万浏览器的分布式客户端阻碍了协商,并将每个请求都变成信任判断。

在身份识别改善之前,防御系统将依赖行为推断。这意味着误报仍不可避免。应像追踪被拦截的流量一样严肃地追踪人类成本,因为排除真实用户的保护措施可能削弱它所要维护的服务。

因此,Creepy crawlies 既代表治理失败,也代表流量问题。网络对于自愿遵守规范的爬虫已有行为准则,但对于无视这些规范的大规模机器客户端,仍缺乏可靠的框架。

三个信号将显示压力是否正在缓解

下一阶段将通过流量行为、功能损失以及更完善的爬虫问责来衡量。

第一个信号是 git.kernel.org 的挑战通过率。Ryabitsev 公布数据时,约 33% 的随机提交请求能够通过 Anubis。若该比例持续下降,可能表明新控制措施恢复了经济压力,或改善了客户端分类。

通过率保持稳定或上升,则意味着相反的情况:采集者仍然足够重视这些数据,愿意承担每次提高防御后的成本。挑战难度再次提高,也将说明这场较量仍聚焦于成本而非身份。

第二个信号是 kernel.org 移除的匿名功能数量。若限制仅针对异常昂贵的比较操作,将支持这是一种有针对性的应对。若普通提交、补丁或浏览视图也出现更广泛的功能损失,则表明爬虫压力正在改变公众体验。

运营方应记录哪些内容消失了,以及原因何在。这类记录能帮助其他项目在危险的 URL 模式走到同样境地之前识别出来,也能揭示防御措施是否保留了原本想保护的常见人工工作流。

第三个信号是,主要爬虫运营方是否采用可验证的身份和高效的获取路径。公开地址范围、用途明确的用户代理、联系方式以及可执行的速率政策,能让网站区分协作型自动化与规避性抓取。

缺乏这种问责机制,防御市场将继续转向浏览器指纹识别、托管边缘控制、身份验证和付费访问。这些工具能够保护容量,但也会让独立发布变得更复杂。

对开发者而言,当务之急是检查哪些公开路径消耗了最多 CPU,以及有多少不同 URL 暴露的是同一条底层记录。测试批量客户端能否通过成本更低的接口获取相同信息。

清晰地发布这条路径,然后为动态 HTML 生成设置严格的资源预算。分别监控工作量证明的完成率和合法用户的失败情况。一套防御措施应减少滥用性计算,而不是让每位读者都成为附带受害者。

对 AI 构建者而言,负责任的选择更简单:使用成本最低且获得授权的内容呈现形式,表明爬虫身份,遵守网站政策,并在扩大规模前联系运营方。开放访问是邀请人们使用共享知识,而不是对他人处理器资源的无限索取。

git.kernel.org 上那些令人毛骨悚然的爬虫,让这条边界变得清晰可见。开放网络可以支持机器阅读者,但前提是这些机器不再把每个公开 URL 都当作免费的计算能力。

 
 

免费开始使用

一款本地优先的AI助手

为了获得更好的人工智能体验,

remio 目前仅支持Windows 10+ (x64)M-Chip Mac

你的 AI 工作伙伴

remio 一起高效工作

规划、创作、交付

一站式完成

bottom of page