Postgres LISTEN/NOTIFY 其实能扩展

Postgres LISTEN/NOTIFY actually scales

Postgres LISTEN/NOTIFY 其实能扩展

很多人认为 Postgres 的 LISTEN/NOTIFY 功能只适合小规模应用,无法应对高并发场景。但 DBOS 团队的最新测试表明,只要配置得当,这套机制完全能够支撑大规模生产环境。文章通过实际数据展示了其在高负载下的表现,打破了传统认知。如果你正在寻找轻量级、无需额外中间件的实时通知方案,Postgres 自带的 LISTEN/NOTIFY 或许比你想象的更强大。

Postgres 的 LISTEN/NOTIFY 功能其实具备出色的扩展能力,足以支撑大规模生产场景。
  1. jerf

    "扩展性"(Scale)不是非黑即白的二元概念,而是一个连续谱。"能扩展到 60K/s"对某个系统来说可能多出了 5 个数量级,对另一个系统来说却又少了 5 个数量级。就我个人而言,我会把通用的"过早优化"从"最常见的开发者错误"列表中划掉,取而代之的是"使用了扩展因子不匹配的技术"。如果你用的东西太小而超出了其承载能力,失败是显而易见的;但反过来同样是个问题。对于一个本可以用更丰富的模型(其丰富性虽限制了扩展性,但能节省大量精力)来更好处理的系统,却引入了超可扩展技术带来的开销、管理问题及其为了扩展而施加的限制,这同样是个糟糕的选择。

    LISTEN/NOTIFY 的上限确实很小,需要引起注意,我个人倾向于在考虑到最悲观的负载数据后,至少还要留出 1 个数量级的余量。但这对于许多项目来说已经绰绰有余了。考虑到它与数据库其余部分的集成度、高可用性,以及它不需要你额外运维另一个服务,这绝对不应该被简单地视为一个不可行的选项而直接否决。甚至他们引用的原始 2K/s 这个数字,对于那些更应以"秒/条消息"来衡量的系统来说,消息量也已经非常庞大了。

  2. nzoschke

    我继续为 DBOS 点赞,因为它能恰当地利用 Postgres(现在还有 SQLite)。将其集成到现有的 CRUD 架构中毫不费力。

    一旦你踏上"持久化工作流"(durable workflows)这条路,你会发现它们无处不在。

    我最新的实验是将单封邮件视为持久化工作流,其中你、你沟通的对象、智能体以及 GitHub 或 Attio 等工具都在流程中轮流参与。

    https://housecat.com/blog/gmail-durable-workflows-sandbox-vm

  3. elendilm

    测试用的机器看起来很大,拥有 96 个 vCPU 和 384GB 内存,但仅产生 20k 的写入量听起来太低了。跳到 60k 确实很好,但对于这台机器的能力来说,吞吐量仍然太小。

    批处理(Batching)能确保你在 CPU 和内存速度下运行,只为刷新(flush)支付显著的延迟——如果并发执行,Linux 内核通常能很好地合并这些操作。

  4. dang

    相关主题,推测如下:

    Postgres LISTEN/NOTIFY 无法扩展 - https://news.ycombinator.com/item?id=44490510 - 2025 年 7 月(321 条评论)

  5. sandeepkd

    我认为这类帖子大多是对个人问题、理解和解决方案的独立评估。如果一个人试图使用工具的默认设置并期望获得特定性能,就将其称为"缺乏专业知识"是存疑的。每个人都在通过失败进行持续学习。

    1. 我觉得有趣的是,该实验似乎使用了一台拥有 96 核、384GB 内存的数据库服务器(https://github.com/dbos-inc/dbos-postgres-benchmark/blob/mai...)。这是任何此类实验的关键部分,本应明确指出。数据库是垂直扩展的,且其本身也有极限。

    2. 谁在建立连接,以及连接来自何处,对性能和整体延迟也有影响。

    3. 60k 看起来是个大数字,但在现实世界中,导致系统崩溃的往往是突发流量,而非常规流量。

    除非我是大公司,否则我个人绝不会一开始就使用这么大的服务器。如果包含只读副本和跨区域冗余,一个生产级数据库集群的成本将超过 10 万美元。

同日更多故事

2026-07-24