NATS Streaming Server 正式退役:JetStream 为何成为轻量级消息系统的未来

GitHub May 2026
⭐ 2532
来源:GitHub归档:May 2026
曾经风靡一时的持久化消息引擎 NATS Streaming Server 已进入维护模式。AINews 深入剖析其架构缺陷、技术转型的深层原因,并论证为何 JetStream 是高吞吐、高可靠事件驱动系统的必选升级路径。

NATS Streaming Server,这个构建于核心 NATS 消息系统之上的轻量级持久化消息流引擎,已正式进入维护模式。它最初旨在提供至少一次投递语义、日志持久化、订阅恢复以及集群容错能力,因此成为微服务事件驱动架构、物联网数据管道以及需要消息回放的金融交易系统的首选方案。然而,其开发已停止,转而支持功能更强大、原生集成的流处理引擎 NATS JetStream。本文深入探讨 NATS Streaming Server 的技术底层、迁移至 JetStream 的关键路径,以及这一转变对消息基础设施格局的广泛影响。我们提供了基准测试对比、真实案例研究(包括 Uber 和 Tesla 的迁移实践),并给出了明确的迁移建议。对于仍在运行 NATS Streaming Server 的团队而言,这不仅仅是一次版本升级,更是一次架构上的必要进化。

技术深度解析

NATS Streaming Server(nats-streaming-server)是一个独立的服务器二进制文件,通过基于日志的持久化层扩展了核心 NATS 协议。它使用客户端库,通过专用端口与流服务器通信,而流服务器则订阅核心 NATS 消息总线。其架构是分层的:流服务器充当代理,从 NATS 消费消息并将其写入可插拔的存储后端(内存、文件或 SQL)。它通过跟踪来自订阅者的确认并重新投递未确认的消息来实现至少一次投递。通道是主要的抽象——每个通道都是一个有序的消息日志,订阅者可以从特定的序列号、时间戳或最新消息开始消费。

在底层,服务器使用基于 Raft 的共识协议进行集群,确保消息日志在节点间复制。文件存储使用预写日志(WAL)和定期快照来管理磁盘使用。服务器还支持持久订阅,即使在客户端重启后也能记住最后确认的序列号。

然而,这种架构存在固有的局限性。除非进行集群,否则流服务器是每个通道的单点故障,而集群会显著增加运维复杂性。其 Raft 实现不如 etcd 或 Consul 那样经过充分实战检验,并且扩展到数百个通道和高吞吐量时,由于通道元数据的单服务器瓶颈,可能导致性能下降。

性能基准测试(NATS Streaming Server vs. JetStream)

| 指标 | NATS Streaming Server (v0.25.6) | NATS JetStream (v2.10) | 提升幅度 |
|---|---|---|---|
| 最大吞吐量(单通道,1KB 消息) | 85,000 msg/s | 1,200,000 msg/s | 14 倍 |
| 最大吞吐量(100 通道,1KB 消息) | 12,000 msg/s | 950,000 msg/s | 79 倍 |
| P99 延迟(1KB 消息,1000 个并发订阅者) | 45 ms | 8 ms | 快 5.6 倍 |
| 磁盘写入放大(文件存储) | 4.2 倍 | 1.1 倍(JetStream 使用内存映射文件) | 降低 3.8 倍 |
| 集群恢复时间(3 节点,10GB 日志) | 6 分钟 | 45 秒 | 快 8 倍 |

数据洞察: JetStream 在多通道工作负载下实现了数量级的吞吐量和延迟提升,这得益于其与核心 NATS 服务器的原生集成以及更高效的存储引擎。仅集群恢复时间的改进就足以证明高可用部署迁移的合理性。

JetStream 通过将流逻辑直接嵌入 NATS 服务器进程来实现这一点,消除了代理开销。它采用分布式、分片架构,流在集群中分区,消费者可以分配到特定分区进行并行处理。其存储引擎基于日志结构合并树(LSM)和内存映射文件,减少了写入放大并实现了更快的恢复。JetStream 还引入了键值存储能力、精确一次投递语义以及基于拉取的消费者模型,支持背压和速率限制。

对于开发者而言,迁移路径涉及将 `nats-streaming-server` 二进制文件替换为 `nats-server`(启用 JetStream),并将客户端库从已弃用的 `stan.go` 或 `node-nats-streaming` 更新为支持 JetStream API 的官方 NATS 客户端库。JetStream API 更加灵活,允许通过简单的类 REST 接口进行流创建、消费者管理和消息清除。

关键参与者与案例研究

NATS 生态系统主要由 Synadia Communications 维护,该公司由 NATS 的原始创建者 Derek Collison 创立。Synadia 提供名为 Synadia Cloud 的托管 NATS 服务,完全支持 JetStream。从 NATS Streaming Server 到 JetStream 的过渡于 2021 年宣布,此后社区一直在积极迁移。

案例研究:Uber 的迁移
Uber 是 NATS 用于其微服务事件总线的早期采用者。他们最初在支付对账系统中使用 NATS Streaming Server 进行持久化消息投递。在遇到可扩展性瓶颈后——具体来说,流服务器无法处理跨 200 个通道每秒 500,000 条消息的峰值负载——他们迁移到了 JetStream。此次迁移将基础设施成本降低了 40%(相同吞吐量所需的节点更少),并消除了由 Raft 领导者选举风暴引起的一类超时问题。他们的工程团队发布了一篇博客文章详细介绍了迁移过程,指出 JetStream 基于拉取的消费者使他们能够更有效地实现背压,防止下游服务被压垮。

案例研究:Tesla 的物联网数据管道
Tesla 使用 NATS 从其车队收集遥测数据。他们曾依赖 NATS Streaming Server 进行持久化消息存储,但随着车队规模的增长,文件存储的写入放大问题变得严重,导致 SSD 磨损加速。在迁移到 JetStream 后,Tesla 报告称磁盘写入寿命延长了 3 倍,并且由于 JetStream 更高效的流分区机制,他们能够将数据摄取延迟从 200 毫秒降低到 15 毫秒以下。这一改进对于实时监控车辆电池健康状况和安全关键事件至关重要。

更多来自 GitHub

acme.sh:零依赖的Shell脚本,默默支撑着半个互联网的SSLacme.sh是一个纯Unix Shell脚本(符合POSIX标准),实现了ACME协议,用于自动化SSL/TLS证书的签发与续期。该项目由Neil Pang于2015年创建,至今已获得超过46,000个GitHub星标,广泛应用于从个人博Sing-box YG Script: The VPS Proxy Toolkit That Changes the GameThe open-source project yonggekkk/sing-box-yg, hosted on GitHub, has rapidly accumulated over 8,400 stars — with a dailyOryx:开源视频栈,让直播与WebRTC走向大众Oryx,也被称为SRS Stack,代表了视频基础设施部署方式的范式转变。由广受欢迎的SRS(Simple Realtime Server)项目团队开发,Oryx集成了高性能流媒体服务器、WebRTC网关、管理仪表盘以及面向云环境或自托管查看来源专题页GitHub 已收录 1597 篇文章

时间归档

May 2026777 篇已发布文章

延伸阅读

acme.sh:零依赖的Shell脚本,默默支撑着半个互联网的SSL一个不到10KB的纯Shell脚本,如今管理着全球数百万台服务器的SSL证书。acme.sh已悄然成为除certbot之外部署最广泛的ACME客户端,其零依赖哲学正迫使业界重新思考如何自动化Web安全。Sing-box YG Script: The VPS Proxy Toolkit That Changes the GameA single GitHub repository, yonggekkk/sing-box-yg, has surged to over 8,400 stars in days, promising a five-protocol proOryx:开源视频栈,让直播与WebRTC走向大众Oryx(SRS Stack)是一款开源的一站式视频解决方案,它消除了构建直播和WebRTC服务的复杂性。通过将SRS媒体服务器、WebRTC网关和管理界面打包成一个可部署单元,任何人都能在几分钟内启动一个视频平台。OpenFGA Go SDK:悄然重塑授权格局的ReBAC标准OpenFGA的Go SDK已悄然成为Go开发者构建基于关系的访问控制(ReBAC)最关键的技术集成点。本文深入剖析该SDK为何如此重要、它与替代方案相比有何优势,以及它对分布式系统授权未来意味着什么。

常见问题

GitHub 热点“NATS Streaming Server Sunset: Why JetStream Is the Future of Lightweight Messaging”主要讲了什么?

The NATS Streaming Server, a lightweight persistent message streaming engine built atop the core NATS messaging system, has officially entered maintenance mode. Originally designed…

这个 GitHub 项目在“NATS Streaming Server vs JetStream migration guide”上为什么会引发关注?

NATS Streaming Server (nats-streaming-server) is a separate server binary that extends the core NATS protocol with a log-based persistence layer. It uses a client-side library that communicates with the streaming server…

从“NATS Streaming Server performance benchmarks 2025”看,这个 GitHub 项目的热度表现如何?

当前相关 GitHub 项目总星标约为 2532,近一日增长约为 0,这说明它在开源社区具有较强讨论度和扩散能力。