HackerURLs

一次又一次被重新发现的经典。

同一个链接,相隔一年以上,一次又一次被人重新发现、再次冲上 Hacker News 首页。能经受住这种时间检验的,大多是值得一读再读的文章。每篇附中文标题,讨论最热的那些再加上中文导读和高赞评论翻译。

从名人堂开始
  • 4,700+篇经过时间检验的经典

Hall of fame

名人堂

在经典库里看全部精选

上首页次数最多、而且有中文导读的 30 篇。时间轴上每个黑点是一次上首页,空心点是一次没冲上去的投稿。

  1. 正在载入经典…

Archive

经典库

按第一次上首页的年份分布,点柱子筛选。

排序

    About

    这些经典是怎么挑出来的

    1. 01

      合并同一个链接

      读取 Hacker News 自 2006 年以来的全部链接投稿,把 http/https、www、跟踪参数等写法不同的同一篇文章合并成一条。

    2. 02

      只留经得起时间的

      同一链接至少两次拿到 50 分以上(约等于上首页),而且两次相隔一年以上;再由 AI 剔除状态页、产品首页和新闻事件。

    3. 03

      写导读、译评论

      上首页次数最多的 2,000 篇配上中文导读、"为什么经久不衰",并精选翻译 HN 高赞评论。导读由 AI 生成,可能有误。

    系统与基础设施eng.uber.com

    我们如何用 Go 构建 Uber 每秒查询数最高的服务

    How We Built Uber’s Highest Query per Second Service Using Go

    3次上首页
    3年跨度
    506累计得分
    280条评论

    2016 — 2019,它一次次回到首页

    黑点是上首页(≥ 50 分)的那次投稿,空心点是没冲上去的投稿,点越大分数越高。

    导读

    这是 Uber 工程博客的一篇经典文章,介绍他们用 Go 实现的、号称公司内 QPS 最高的服务——为 Uber 移动端每次请求提供地理围栏(geofence)查询。文中说 2015 年跨年夜峰值达 170k QPS、40 台机器 CPU 占用 35%,p95 延迟低于 5ms、p99 低于 50ms;他们放弃了 R-tree 和 S2,改用一种把候选围栏数量从上万降到上百的简化方案。文章重点讲了 Go 的并发模型与 GC 调优,但社区普遍质疑:真正的性能来源是算法选择而非语言。

    为什么经久不衰:它成了「语言 vs 算法」争论的经典样本,后来还有专文反驳其索引方案,多年后仍是学习地理空间索引和高并发服务设计的反面/正面教材。

    关键词 Go地理围栏空间索引微服务性能

    HN 评论精选

    自建 R-tree 服务在笔记本上就达到 15K QPS,性能关键在于数据结构而非 Go。

    我不觉得从这篇文章里学到了什么。有意思的是 HN 上的关键词抓取得真快(Uber 和 Go)。三年多前我们就实现过一个反向地理编码 Web 服务,索引了完整的 Census TIGER 数据集,在一台 2011 年的 MacBook 上扛住 15K 请求/秒,而且是精确的多边形内搜索(没有近似),用的是为多边形内搜索优化的 R-tree 结构。假设 Uber 的地理围栏查询数据集比 TIGER 小得多,我认为本可以用少得多的资源做出高效得多的实现。再说一遍,用 Go 与此无关。

    emrekzd查看英文原文

    I don't think I've learned anything from this article. It's interesting how quickly the keywords pick up on HN (Uber and Go). More than 3 years ago we've implemented a reverse geocoder web-service that indexed complete Census TIGER dataset. The service handled over 15K reqs/sec on a 2011 macbook, doing exact in polygon search(no approximations). We implemented an optimized (for in polygon search) R-tree data structure for the lookups. Assuming Uber's geofence lookups would rely on a much smaller dataset than TIGER, I think you could have come up with a much more efficient implementation requiring a fraction of the resources. And again, use of Go; irrelevant.

    文章论证不充分,语言选择和 channel 的取舍都缺乏证据。

    这篇文章对我来说有点含糊其辞。本质上他们可以用任何语言实现这个服务,也没有证据说明为什么不能用 channel。多给点细节才能让它成为一篇好文章,至少对我来说是这样。

    StreamBright查看英文原文

    This article is a little bit hand-wavy for me. Essentially they could use any languages to implement this, also there is no proof how channels could not be used. I bit more details would be essential to make this a good read, at least for me.

    刻意回避复杂索引却谈语言性能,缺乏基准对比,算法选择才是重点。

    「我们没有用 R-tree 或复杂的 S2 来建索引,而是选择了更简单的路线……」「虽然这个方案的运行时复杂度仍是 O(N),但这种简单技巧把 N 从数万量级降到了数百量级。」让我觉得奇怪的是,他们明明在谈 Go 的性能,却因为更好的算法「太复杂」而故意选了次优的。或者,如果他们的简化方案确实比 R-tree 或 S2 更快,那就该给出基准测试和更清楚的解释。在这种场景下,选对算法比选语言更重要。

    chris_overseas查看英文原文

    "Instead of indexing the geofences using R-tree or the complicated S2, we chose a simpler route..." "While the runtime complexity of the solution remains O(N), this simple technique reduced N from the order of 10,000s to the order of 100s." It seems odd to me that they're posting about the performance of Go, yet they deliberately chose a less optimal algorithm because the better ones were "complicated". Or, if their simpler approach did in fact run faster than R-trees or S2, it would have been nice to see some benchmarks and a clearer explanation for why. Choosing the best algorithm seems more important than the language in a case like this one.

    直指实现低效,并引用专文用 R-tree 对比证明。

    这是一个非常低效的实现。说实话整体质量不高,任何对空间索引有基本了解的人都清楚 R-tree 会快很多倍,正如这里所示:https://medium.com/@buckhx/unwinding-uber-s-most-efficient-service-406413c5871d

    woeirua查看英文原文

    This is a very inefficient implementation. Really, just poor quality work overall, as anyone with even a basic understanding of spatial indexing would know that an R-tree would be many times faster, as illustrated here: https://medium.com/@buckhx/unwinding-uber-s-most-efficient-service-406413c5871d

    总预算 100ms 而单服务 p99 占 50ms,这个数字并不值得夸耀。

    「吞吐和延迟都很高。仅服务非中国流量时,这个服务在 2015 年跨年夜峰值处理 170k QPS,40 台机器 CPU 占用 35%。响应时间 p95 低于 5ms,p99 低于 50ms。」「Uber 移动端每个请求都需要地理围栏查询,必须快速响应(p99 低于 100 毫秒)。」在总共 100ms 的预算里,单个微服务的 p99 就要 50ms,这似乎没什么好炫耀的。

    hobofan查看英文原文

    > High performance in throughput and latency. In our main data center serving non-China traffic alone, this service handled a peak load of 170k QPS with 40 machines running at 35% CPU usage on NYE 2015. The response time was < 5 ms at 95th percentile, and < 50 ms at the 99th percentile. > Geofence lookups are required on every request from Uber’s mobile apps and must quickly (99th percentile < 100 milliseconds) answer For a 100ms total budget, a ~50ms 99th percentile for a single microservice doesn't sound like something to boast about.

    历次讨论

    同类还值得读

    1. TTY 揭秘(2008)

      The TTY demystified (2008)

      经典文章深入剖析了 Unix/Linux 中 TTY 子系统的工作原理,包括线路规程、终端驱动、信号与控制字符等机制。

      系统与基础设施上首页 11 次 · 2009–2025linusakesson.net编辑精选
    2. 为什么 GNU grep 这么快

      Why GNU grep is Fast

      FreeBSD 邮件列表上一篇广为流传的帖子,解释 GNU grep 为什么快:核心在于 Boyer-Moore 字符串搜索算法配合精心优化的内部循环和 I/O,让程序在搜索时“…

      系统与基础设施上首页 9 次 · 2010–2022lists.freebsd.org
    3. Xplain:为普通人讲解 X11

      Xplain – Explaining X11 for the rest of us

      《Xplain》是作者(HN 用户 Jasper_)写的一系列 X11 长文,用他在浏览器中重建的 X11 绘图模型做交互演示,讲解 X11 的绘图模型与窗口系统设计。

      系统与基础设施上首页 6 次 · 2013–2020magcius.github.io编辑精选
    4. 旋风教程:为 Linux 创建极小 ELF 可执行文件(1999)

      A Whirlwind Tutorial on Creating Really Teensy ELF Executables for Linux (1999)

      breadbox 写于 1999 年的经典教程,主题是如何为 Linux 手工构造并裁剪出体积极小的 ELF 可执行文件。

      系统与基础设施上首页 6 次 · 2007–2025muppetlabs.com
    5. PostgreSQL 内部原理

      The internals of PostgreSQL

      《The Internals of PostgreSQL》是一本免费在线书籍,系统讲解 PostgreSQL 的内部实现,包括查询处理、并发控制、WAL、缓冲区管理等核心机制。

      系统与基础设施上首页 5 次 · 2017–2025interdb.jp编辑精选

    打赏支持

    打赏二维码

    觉得有用,请作者喝杯咖啡。

    WeChat

    关注向阳乔木

    微信公众号「向阳乔木推荐看」

    微信公众号「向阳乔木推荐看」二维码

    微信扫一扫;在微信里打开本页时,长按二维码识别。