Hyaika Blog

Penguin is all you need

技术

90 颗核里,有 14 颗永远在给爬虫渲染网页

90 颗核里,有 14 颗永远在给爬虫渲染网页

90 颗核里,有 14 颗永远在给爬虫渲染网页

目录

上午六点,我翻了一下访问日志

今天早上的例行检查,我打开服务器的 HTTP 访问日志。过去 24 小时,3083 条请求。

然后我数了数 user-agent:长得像浏览器的,只有 362 条,11.7%。剩下 88.3% 里,有 942 条搜索引擎(bing、百度、搜狗),1050 条干脆不带任何 UA,119 条是 AI 训练采集(GPTBot、ClaudeBot 之流),109 条是安全扫描器,还有 47 条直奔 /.git/config/.env 去的。

我的站日 PV 是三位数。就这样,机器流量还是人类的七倍多。

过去 24 小时我服务器的流量构成:非浏览器占 88.3%

这不是什么新鲜事,但今天早上我正好读到 kernel.org 基础设施维护者的一篇博客,标题叫「Creepy crawlies」。他给出的数字,让我愣了 3 秒。

90 颗核,14 颗在喂爬虫

git.kernel.org 是 Linux 内核的官方仓库托管。90 颗 CPU 核,分布在 5 个地理位置的节点上。其中有 14 到 16 颗,全年无休、什么别的事都不干,就是在给爬虫渲染网页。

注意这个数字的荒诞之处:这些核不是在服务人类的 git clone——clone 是高效的,打包传输就行。它们在干的,是把 148 万个 commit 逐条渲染成 HTML 页面,好让爬虫来抓。

爬虫渲染 commit 的 CPU 消耗对比 git clone

为什么内核仓库对 AI 公司这么值钱?因为这里的数据有一个不可替代的属性:保证没有 AI 污染。Linux 开发全程在公开邮件列表和 git 里进行,审核者是人,历史是干净的。对训练大模型来说,用 AI 生成的数据喂 AI,等于给模型喂「数字朊病毒」——所以一块保证「纯人工」的训练数据,比什么都金贵。

最蠢的采集方式

kernel.org 其实把一切都给了你。你可以 git clone 整个仓库,包括全部历史。你可以 clone LKML 邮件列表。所有数据都是公开的,一份拷贝,几 GB,走人。

但爬虫不这么干。它们选择把每个 commit 渲染成 HTML 再解析——linux.git 有 148 万个 commit,还有 922 个 fork。每个 fork 的每个 commit 都能生成一组 URL:diff、patch、plain render、任意两个 commit 的对比……单个 fork 就能产生超十亿个合法 URL。

一个内核仓库 fork 能生成的合法 URL 数量级

于是爬虫就这么一寸一寸地啃。同一份代码,被爬了 922 遍。

作者的吐槽写得很平淡:「一个声称是 AI 的东西,本应使用最高效的方式获取数据——clone、walk、完成。但实际它选择了最蠢的方式。」这句话值得反复读。聪明到能写论文的模型,背后的数据采集却蠢到令人发指——或者说,采集这件事从一开始就没有「聪明」的动机,只有「便宜」的动机。渲染 HTML 的爬虫不用写 clone 逻辑,不用处理冲突,直接把页面当静态文件抓就行,写起来三分钟。

猫鼠游戏:从 fail2ban 到工作量证明

对付爬虫,kernel.org 走完了教科书式的完整旅程。

第一阶段,fail2ban。一开始很有效,因为爬虫诚实地在 UA 里写自己是 bot。然后它们学乖了,伪装成普通浏览器。第二阶段,封 IP。然后爬虫铺开到整个子网。第三阶段,封整个 ASN——误伤了些自动化检查链接的合法用户,但值得。

然后事情变得真正难看:爬虫开始从几百万个随机的住宅和移动 IP 出发。这些 IP 是真实人家的路由器、电视、手机——它们被「代理 SDK」收编,替数据公司爬网页,机主毫不知情。一个 IP 发 4-5 个请求就消失,永远不再出现。封禁?等你识别出来,它已经干完活走了。

2026 年的互联网,一部分家庭设备是用户自己的,另一部分,是爬虫的。

于是 kernel.org 上了终极大招:Anubis——用工作量证明(PoW)挡在站点前面。想访问?先算一道题:拿你的 IP 加一个密钥,算一个 SHA-256 前 4 位为零的字符串。这道题对人类是「等两秒」,对爬虫机器群是「每一千次请求都要烧掉实打实的电费」。

Anubis 工作量证明难度与各端求解耗时

效果立竿见影。几个月内爬虫集体撤退。然后几个月后,它们回来了,并且能解出难度 4。把难度提到 5,手机要算好几秒、开始发烫——但爬虫也跟上了。今天 git.kernel.org 每天收到约 600 万条请求,66% 被 Anubis 直接弹走,33% 已经能通过数学考试。

git.kernel.org 流量漏斗:约 2% 才是合理请求

「我们不知道哪些是人类哪些是 bot,但如果它在一个 8 年前的废弃 fork 里翻每一页 commit,那多半不是你的 Chrome。」

这场生意的钱从哪来

爬虫不是闲得慌。代理 SDK 是门大生意:智能电视、路由器、手机 App 里嵌了 SDK,你的设备在你看电视的时候安静地替爬虫公司发出请求,换取几厘钱的分成。安全研究机构 spur.us 的调查显示,这类「住宅代理」流量已经泛滥成灾——这也解释了「伪装的 Chrome」为什么能来自几百万个真实家庭的 IP。

你客厅的电视,是你家网络里最忠诚的员工,只是雇主不是你家。

这套东西在国内是另一副面孔:中国互联网的反爬战争更早、更卷。知乎、微博、B 站早就把验证码、滑块、行为风控做成了日常——你每次「请拖动滑块到最右边」,都是网站和爬虫军备竞赛的产物。而爬虫这一侧,招聘网站上「爬虫工程师」的岗位常年挂着,月薪开到几十 K。数据是新的石油,采集是新的淘金——这句被说烂的话,在简历市场里是实打实的行情。

我的日志里,谁在敲门

对照完 kernel.org 的数字,我回到自己的日志。

过去 24 小时,我的站收到 3083 条请求:

  • 浏览器 UA:362 条(11.7%)
  • 无 UA:1050 条(34.1%)——连身份都不报的,比什么都可疑
  • 搜索引擎:942 条(30.6%)
  • AI 采集 + SEO 分析爬虫:119 + 138 条
  • 扫描器:109 条(Censys、zgrab 之流,专门探测漏洞)
  • 另有 47 条直奔 /.git/config/.env——基础设施漏洞扫描的标配路径

我盯着那 47 条 /.git/config 想了一会儿。它和我日志里每一个 Failed password 长得一样——都是一些程序在自动敲门,敲完就走,从不回头。

kernel.org 的维护者说,他们不打算从此锁死一切,clone 依然对所有人开放,「你可能得多跳几个圈」。

这句话的潜台词是:开放不等于免费。当一个公共物品的维护成本被一小撮人用最蠢的方式吃干抹净时,最先崩溃的往往是维护者的耐心。而我能做的,是把日志翻出来,数一数,然后把这 88.3% 写进文章里——至少让「14 颗核永远在给爬虫渲染网页」这个数字,不再是某个角落的运维博客里的一句抱怨。

分享:

评论(0)

暂无评论,来写第一条吧~

发表评论