我把产品发到了 Hacker News,然后网站就被 AI 爬虫机器人流量淹没了

Hacker News Top 新闻

摘要

开发者在将自定义 feed reader 产品 sprinklz.io 发布到 Hacker News 后,网站遭遇大量 AI 爬虫机器人流量,导致服务器负载异常飙升,作者通过端点日志分析定位了问题来源。

暂无内容
查看原文
查看缓存全文

缓存时间: 2026/10/13 15:56

# Sammy 的博客 来源:https://www.sammystraus.com/ ## 目录 - 1\. 我在 HN 上发了帖,然后我的网站被 AI 机器人流量淹没了 (https://www.sammystraus.com/#i-posted-to-hn-and-then-my-website-was-flooded-with-ai-bot-traffic) - 2\. 用 LLM 让 Emacs 浏览器重回巅峰 (https://www.sammystraus.com/#using-llms-to-make-the-emacs-web-browser-great-again) - 3\. 技术明明变好了,为什么一切却变得更糟了? (https://www.sammystraus.com/#if-technology-got-better-why-did-everything-get-worse) - 4\. Deft 0.2.0 版本发布 (https://www.sammystraus.com/#deft-version-0-2-0) - 5\. 用多少 LLM 算多? (https://www.sammystraus.com/#how-much-llms-is-too-much-llms) - 6\. 用大约 350 行 Clojure 构建国际象棋 (https://www.sammystraus.com/#building-chess-in-about-350-lines-of-clojure) - 7\. Deft 发布:一个面向 Clojure 和 ClojureScript 的类和接口系统 (https://www.sammystraus.com/#announcing-deft-a-class-and-interface-system-for-clojure-and-clojurescript) - 8\. 我的博客现已支持 RSS (https://www.sammystraus.com/#my-blog-is-now-on-rss) - 9\. 如何赢得 Wordle (https://www.sammystraus.com/#how-to-win-at-wordle) - 10\. 习惯的力量(书评第一部分) (https://www.sammystraus.com/#the-power-of-habit-book-review-pt-1) - 11\. 现代货币理论与你 (https://www.sammystraus.com/#modern-monetary-theory-and-you) - 12\. 完美的相机 (https://www.sammystraus.com/#the-perfect-camera) - 13\. 相机镜头:我的摄影包里有什么 (https://www.sammystraus.com/#camera-lenses-what-s-in-my-bag) - 14\. 为什么许多初选预测是错误的 (https://www.sammystraus.com/#why-many-primary-forecasts-are-wrong) - 15\. 民主党初选背后的奇葩数学 (https://www.sammystraus.com/#the-wonky-math-behind-the-democratic-primary) - 16\. 弹劾进展如何 (https://www.sammystraus.com/#what-s-going-on-with-the-impeachment) - 17\. 化疗治癌(第三部分) (https://www.sammystraus.com/#treating-cancer-with-chemo-part-3) - 18\. 化疗治癌(第二部分) (https://www.sammystraus.com/#treating-cancer-with-chemo-part-2) - 19\. 化疗治癌(第一部分) (https://www.sammystraus.com/#treating-cancer-with-chemo-part-1) - 20\. 无所事事的重要性 (https://www.sammystraus.com/#the-importance-of-doing-nothing) - 21\. 我为什么支持"公民联合诉联邦选举委员会案" (https://www.sammystraus.com/#why-i-support-citizens-united) - 22\. 相机设置 (https://www.sammystraus.com/#camera-settings) ## 1\. 我在 HN 上发了帖,然后我的网站被 AI 机器人流量淹没了 过去几年来,我一直在开发 [sprinklz.io](https://sprinklz.io/),一个可定制的 RSS 阅读器,它能做很多事情,其中包括将某些话题从你的新闻流中降权。 一个月前,我在 [HN 上发布了它](https://news.ycombinator.com/item?id=49660482),获得了一百多个点赞,不错!看起来大家确实厌倦了关于 LLM 的内容,他们很享受能把这些话题从信息流中降权的功能。这也是一个很好的演示,展示了为什么这样的工具有用。一切都在向好的方向发展,然后…… 我的网站变慢了。非常慢,慢得令人痛苦。起初我以为是因为帖子突然火了带来的额外关注。和任何开发者一样,我一边为此感到高兴,一边发誓以后要让网站更有弹性。但奇怪的是,这种缓慢在*帖子发布后好几天*仍在持续,甚至开始恶化,而我记录的指标完全说不通。也就是说,明明只有少数几个真正活跃的已登录用户,服务器却表现出极高的负载。 于是我查看了一些数据。我为每个端点添加了顶层日志记录(每个 URL 路径被请求了多少次),结果发现大部分请求根本没有尝试获取新闻文章!作为参考,我的网站是一个单页应用(SPA),这意味着大部分请求甚至没有运行渲染页面所需的 JavaScript(!)。 进一步挖掘,我查看了 NGINX 的汇总日志以找出滥用者,然后你猜怎么着,将近一半的流量竟然来自同一个*特定*用户。我不会指名道姓,但我查了一下,他们自称是一个监听网站变化、然后将变化总结成 AI 生成的垃圾新闻通讯的服务。所谓"监听变化",实际上就是每分钟查询我们的网站很多很多次。封了。 其他几个是常见的已知爬虫,而且都很友好地标识了自己的身份。Claude bot、OpenAI bot、Google 的搜索索引器,还有其他几个。我甚至在途中还遇到了几个漏洞扫描器。至少有人在尝试访问 `-/wp-content/phpinfo.php`(我的网站可不是 WordPress 站点)。我添加了 `robots.txt` 来阻止大多数 AI 扫描器,但允许 google-bot 和其他搜索相关流量,还让 Claude 查询所有漏洞路径并模仿扫描器的行为,以确保没有泄露任何信息。我还添加了合理的速率限制等等。 但最重要的教训是,是时候让我的网站更快了。我想成为那种*能够*应对每天 xxx QPS 真实流量的网站,它应该在高负载下也有更好的扩展性。受到这次遭遇的启发,过去几周我在底层基础设施上做了不少改进,这些改进应该能为所有用户带来相当可观的性能提升。 P.S. 如果你想看看,这个网站完全免费,可以在这里找到 [here](https://sprinklz.io/) 简单总结就是,它让你能定义自己的自定义规则,*除了*像 Hacker News 积分这样的内置功能之外。你可以用它来过滤掉 AI 或 LLM 这样的话题,但话题完全可以任意设置,你甚至可以编写自己的自定义规则。 ## 2\. 用 LLM 让 Emacs 浏览器重回巅峰 每当我跟别人提起 Emacs 浏览器,他们的第一反应是"等等,Emacs 还有浏览器?!",然后是"好吧……这勉强算个浏览器吧"。 Emacs 浏览器的设计初衷是在基于终端的纯文本环境中渲染网页,好吧,结果你也知道。它在纯 HTML、小内容的网站上表现不错,但在其他方面就不太行了。 问题在于,Emacs 本质上是一个纯文本编辑器,而现代互联网*绝不是*基于纯文本的。*简单的*、采用 1990 年代风格设计的 HTML 可以很好地转化为纯文本,但*现代的* UI 设计,配上视觉样式、大量的 JavaScript,以及整体的混乱,就没那么容易了。 Emacs 浏览器本来可以很棒的,如果我们能找到一种时光倒流的方法就好了…… 好吧,计划很简单。我们把现代网页的源代码重写成老式的简单样式 HTML,然后通过管道传给 Emacs 浏览器。我们只需要找到一种简单且可大规模实现的方法。 那么,呃,你没忘记 LLM 吧?用它们来做一件有望*减少*世界上垃圾内容的事,倒也不错。 基本上,计划是我们写一个程序: - 在 firefox 中打开网页 - 加载页面并运行所有 JavaScript - 让 LLM 生成一个**可复用的程序**,将当前页面的内容转换为简化文本 - 将生成的 JavaScript 注入 firefox 浏览器 - 获取新的页面源代码并转发给 Emacs 浏览器 对,所以,我一直在使用它,运行得非常好。实际上,我可以在很多 eww(Emacs Web Wowser)以前无法处理的网页上使用它。 下面是一些前后对比的例子: Clojure 的 mapcat 文档 ClojureDocs_before.png 图 1:(之前)使用 eww-readable ClojureDocs_after.png 图 2:(之后)使用 simpleweb-simplify-page 生成初始的修改程序需要一点时间,但一旦生成好了,运行就相当快了,在日常浏览中,大部分时候不需要额外的 LLM 调用。我自己一直在用,体验很不错。 源代码在这里:https://github.com/sstraust/simpleweb 开源、免费安装,等等等等。 ## 2\. 技术明明变好了,为什么一切却变得更糟了? 我想我们都知道答案:糟糕的激励机制。 技术让系统更高效了,但它并没有让*你*个人变得更高效。那些让计算机更高效的工具,同样让*人们*更高效地榨取你的时间、注意力和身心健康。我说的就是神经网络,baby。 我第一次注意到这个问题是在 2018 年。或者更准确地说,我注意到*我*有个问题,那就是每天花 3 个小时看《星际争霸 2》的回放,然后疑惑时间都去哪了,自己怎么又熬到了凌晨两点。 有趣的是,在 2010 年代末之前我从来没有这些问题。我从 2000 年代中期就有电脑和网络连接了,没过多久就有了一部能用 Twitter、Reddit 之类的智能手机。可能随着年龄增长我的自制力变差了,但我有一种强烈的直觉,是电脑变了。 我说不清楚具体是什么,但我有一种感觉:每次我与某个系统或网站交互时,我都在参与一场对抗性博弈——我只想正常过我的日子,也许读一篇关于电脑的小文章,而它们却在想方设法让我在它们的网站上多待一会儿。 我还有一种感觉:随着软件工程从爱好者和发烧友的领域转向越来越多由金融或商业背景出身的人主导,我们曾经热爱的那些大型工具变得既极其无趣又极其赚钱。 那么我们能做什么来改变现状呢? 1. 走出户外。真的,当世界变成这样,我觉得最好的办法就是离开。这并不容易,尤其是在组织活动往往也在线上进行的情况下,但如果你能做到,我保证在公园里和朋友下一天棋,比你在互联网上花的任何时间都好。 2. 走上街头。我认为抗议是有效的,更多人应该参与。如果你愿意采取行动,你就是在为他人树立榜样,告诉他们也可以采取行动。 3. 别再回到同一台机器。我觉得每个人心里都有赌徒谬误——如果第一次没有回报,但有时候会中奖,我们就会再试一次,但事实并非如此。如果你在亏钱,教训就是停止往机器里投币。 编者按:我一直在开发一个免费的可定制新闻阅读器 [sprinklz.io](https://sprinklz.io/),作为对现代互联网表达不满的一种方式。如果你不用这个,我建议你关注各个独立博客和网站,因为完全脱离那些大平台要好得多。 编者按 2:我还没有把这篇最新文章发到 RSS XML 上,因为我还没准备好发送通知。会在接下来的几周内添加。 ## 3\. Deft 0.2.0 版本发布 既然 [deft 0.2.0](https://github.com/sstraust/deft) 已经发布了,我觉得是时候聊聊我构建了什么以及为什么构建它。 Clojure "一切皆 map" 工具包的*意义*在于,getter 和 setter 是浪费时间。Clojure 在很大程度上就是为了应对 2008 年糟糕的 Java 工作流而诞生的——那时你必须写 getter、setter 和 builder,还要承受所有人都不喜欢的所有冗余代码。 *问题*在于,如果你想用内置的 `defprotocol` 和 `defrecord` 来表示数据,并且想定义依赖于某个字段存在的函数,那么将这个信息*编码*到协议中的唯一方法就是给协议添加 getter 和 setter 方法。真恶心。 你也可以使用协议 + Malli schema 的组合来表示,但在使用时你必须指定"这个函数接受一个既实现了这个协议*又*实现了这个 Malli schema 的输入"。同样恶心。 我们*想要*的是可以像 `defprotocol` 和 `defrecord` 那样使用的东西,但默认就为我们提供所有的 getter、setter 和 map 式操作。关键洞察是:如果一个字段存在于 record 中,其他所有好东西就自动有了,所以我们只需要支持带必填键的协议就行。 Deft v0.2.0 添加了对类型和协议定义中命名空间键的支持。也就是说,你现在可以这样写: ``` (defp Positioned :required-keys [::pos ::Point]) ``` 以及 ``` (deft Circle [::location/position radius]) (>Circle ::location/position [1 2] :radius 12) ``` 这很有用,因为现在你可以定义*依赖于这些字段存在*的方法,例如: ``` (defp Gremlin :extends [location/Positioned]) (defmethod game-object/get-hitbox ::Gremlin [self] (js/Matter.Bodies.rectangle (get-in self [::location/pos ::location/x]) (get-in self [::location/pos ::location/y]) 15 15)) ``` 来看看! https://github.com/sstraust/deft ## 4\. 用多少 LLM 算多? 上周我读完了《On the Edge》,写得很差。并不是我不尊重 Nate Silver。我非常尊重他。所以当他关于赌博和冒险的开创性著作变成一团语无伦次的混乱时,我感到惊讶和失望。尽管如此,作为一个骨子里的完美主义者,我坚持读到了最后,然后看到了这句话: "ChatGPT 在写作这本书的过程中提供了很大帮助,在构思章节副标题、隐喻和类比时充当了我的创意缪斯,也帮助我加深了对可能在其语料库中有充分涵盖的技术主题的理解。" *严格来说*,书确实是他手写的,*严格来说*,字母确实是他自己敲到键盘上的,但说真的,真的吗?他真的把全部的思想、心灵和灵魂都注入到页面上的每一个字了吗?也许吧。这让我想起了一部经典视频 [Simple Made Easy](https://www.youtube.com/watch?v=SxdOUGdseq4),视频的核心内容很大程度上建立在定义精确的语言以及准确表达你想表达的意思之上。当你把这项工作外包出去时,你跳过的不仅仅是措辞,你跳过了那种思考,你也就失去了那种组织力和思维的清晰度。 在读 Nate 的书时,有一处非常明显且真实可感的差异:有些语言像是融入了 Nate 思维方式的组织架构中,而另一些则是后来附加的补充。尤其是后面的章节,感觉缺乏那种把所有内容统一在一个愿景之下的思维凝聚感。我很遗憾,因为这本可以是一部了不起的作品,而且可以看出来他付出了很多努力,特别是在采访和数据收集方面,感觉就差那最后一块缺失的洞见来把一切都串联起来。 那么用多少 LLM 算多?嗯,说到人际交流,我觉得答案是接近零。我不想读你用 AI 生成的邮件,我当然也不想读你用 AI 生成的文章。我宁愿直接读你发给 LLM 的 prompt,因为我在乎的是*你*,对,就是*你*,你个人在想什么,我想理解*你*想要表达什么。 别误会,我在合适的目的下还是很爱 LLM 的。我很乐意用 LLM 分析医生的病历来构建预测流感传播的模型。但说到写作,尤其是这种写作,就感觉完全没有必要,因为当你写下自己的想法时,我已经得到了我想要的东西,在中间加一道工序就显得太荒唐了。 作为一名扑克玩家和博弈论研究者,我相信 Nate 会欣赏这句话:"如果你连 bot 都赢不了……"

相似文章

无AI的Hacker News

Hacker News Top

据报道,Hacker News 正在从其平台上移除或过滤与人工智能相关的内容。