如何提升 Solana 应用速度:数据流解析 WS、gRPC、UDP Shreds

如何提升 Solana 应用速度:数据流解析 WS、gRPC、UDP Shreds

2025.12.03
当你考虑让 Solana 应用或交易策略更快时,首先需要厘清的不是代码或服务器规格。 起点是两个根本性问题。
第一,你离关注的 Solana 验证者有多远? 你的应用实际位于哪个区域,从那里到达验证者需要多少毫秒?这个距离是一切的基础。如果距离不对,再多的软件或硬件优化也无法释放本应获得的性能。
第二,在任何给定时刻,leader 验证者在哪里? 当法兰克福是 leader 时,法兰克福附近的节点在结构上占优。当东京是 leader 时,东京附近的节点占优。Solana 的 leader 逐槽位在全球轮换。只要这一特性存在,单区域设置就总会有物理上处于劣势的时间窗口。
实际上,这意味着现实的策略必须是多区域的。 通过在法兰克福、阿姆斯特丹、纽约、芝加哥、东京和新加坡等多个位置部署基础设施,你可以在每个时段从靠近当前或即将成为 leader 的区域观察链。
在确立了这一物理和调度背景后,我们可以讨论 Solana 的数据流。本文重点关注开发者经常遇到的三种:
  • WebSocket (WS)
  • Geyser gRPC
  • Shredstream (UDP Shreds)
我们将探讨每种数据流看到的数据时序、传输特性以及它们实际适用的场景。 目标不是因为"名字听起来快"就选择某个东西,而是理解 Solana 本身的工作方式和底层协议的行为,然后以具体的方式将其与应用性能和用户体验联系起来。

Solana 数据流动的时序差异

第一步是理解在 Solana 的内部管道中,不同类型的数据实际上在何时出现。 大致来说,有三个阶段对于性能推理很有用。
第一阶段是 Shreds。 验证者通过 UDP 交换 Shreds 以构建区块。在这个交换过程中,网络上流动的是尚未完全组装成区块的数据。如果你能接入这个阶段,就能在最早的时刻看到链上的变化。代价是,因为这是 UDP,你必须假设存在丢包和乱序到达,并据此设计系统。
第二阶段是 Geyser gRPC。 在验证者接收到 Shreds 并形成和确认区块后,它可以通过 Geyser 插件以结构化形式暴露结果。这就是 Geyser gRPC 流的来源:它们发出区块、日志和账户更新等事件。时序比 Shreds 晚一步,但数据已经组织好了,使应用更容易消费。
第三阶段是 HTTP RPC 和 WebSocket。 数据经过 Geyser 和其他内部处理并写入节点的内部存储后,就可以通过 JSON-RPC 和 WebSocket 通知获取。getBalance、getProgramAccounts 和日志订阅等方法都是从这个存储状态读取的。就时序而言,这位于 Geyser 通知之后,是大多数应用首先看到的最顶层"公共 API 层"。
总结这三个阶段:
  • Shreds 是非常接近传播时刻的原始数据。
  • Geyser gRPC 在区块确认时提供结构化数据。
  • RPC / WebSocket 将存储的数据作为事后查询的 API 暴露。
你观察哪个阶段决定了你能多早检测到链上的变化。仅这一时序差异就已经创造了显著的性能差距。

传输特性:UDP、gRPC、WebSocket 和 TLS

时序是一个维度。第二个维度是数据实际上如何传输。
Shreds 使用 UDP。 UDP 头部小,不需要连接建立。它不提供重传或排序保证,但作为交换,它将延迟最小化。对于像 Shreds 这样在许多验证者之间冗余传播的数据,这种简单性和速度正是你需要的。
Geyser gRPC 运行在 TCP 上,使用二进制协议。 流式 RPC、头部压缩和二进制编码使其能够比典型的 HTTP+JSON 更高效地移动数据。它非常适合在后端、监控系统和分析管道中持续消费结构化事件。
WebSocket 通常位于 TCP 加 TLS 之上,使用 JSON 负载。 关键优势是浏览器和标准 Web 栈可以直接使用它,这就是为什么它在 dApp 和轻量级机器人中无处不在。缺点是文本 JSON 必须被解析,头部加加密增加了开销。在三者中,这往往是最重的模式。
在此之上,TLS 本身又增加了一层成本。 当你使用 https、wss 或 gRPC-TLS 时,每个连接都必须执行握手并加解密负载。对于一般的 Web 应用来说,这通常是可接受的,甚至不会被注意到。对于数十毫秒关系到用户体验或盈亏的策略来说,这种开销是明显的。
重要的一点是:
  • 你看到数据的时序(Shreds / Geyser / RPC)
  • 你传输数据的方式(UDP / gRPC / WebSocket / TLS)
是独立的关注点,但两者都对你的最终延迟和用户体验有很强的影响。

将速度放入上下文:时序和传输

有了这些要素,你可以更具体地推理速度。
从时序的角度:
  • Shreds 看到最早的阶段。
  • Geyser gRPC 是下一个。
  • RPC / WebSocket 最后。
从传输的角度:
  • UDP 最轻最快。
  • gRPC over TCP 是下一个,具有高效的二进制流。
  • 带 JSON 和 TLS 的 WebSocket 通常最重。
如果标准化为"相同区域、相同硬件、相同网络路径",技术速度排序是:
  • UDP (Shreds)
  • gRPC (Geyser)
  • WebSocket (JSON-RPC 通知)
当然,这是隔离的速度。在实际系统中,你不能只看延迟。你还必须考虑可靠性、正确性要求、开发成本,以及你的团队实际能承受多少复杂性。

可靠性和开发成本:为什么实践中 WS > gRPC > UDP

在许多实际项目中,数据流被采用的顺序几乎与技术速度排名相反:
  • 首先是 WebSocket
  • 然后是 Geyser gRPC
  • 最后是 Shreds / UDP
这不是偶然的。
Shreds(UDP)是最快的,但要求你从一开始就为数据丢失和乱序设计系统。 你不能假设每个包都到达且所有数据完美对齐。你的逻辑必须处理间隙,必要时与其他流协调,并容忍噪声。回报是最小延迟,但实现和运维变得明显更难。
Geyser gRPC 给你的数据已经在节点内部确认和结构化了。 这使得消费变得容易得多。事件驱动的后端、告警系统、链上分析和索引器都可以在 Geyser 上构建,在速度、可靠性和实现工作量之间取得良好平衡。对许多团队来说,这是当仅 WebSocket 设置达到瓶颈时的自然第二步。
WebSocket 的主要优势是它可以直接插入浏览器和正常的 Web 基础设施。 dApp 前端和轻量级服务可以使用现有的工具和库,代码示例广泛可用。对于发布产品的第一个版本,WebSocket 通常是最实际的起点,特别是如果你已经解决了"到验证者的距离"问题。
所以理论上,速度排序是 UDP > gRPC > WS。 实践中,采用顺序通常是 WS > gRPC > UDP。 你需要同时记住这两个维度,并根据当前阶段和目标做出选择,而不是追逐抽象的"最快"标签。

Shreds 和 Geyser gRPC 如何协同工作

一旦你超越基本的速度调优,开始关心每数十毫秒,关键问题就变成如何组合 Shreds 和 Geyser gRPC。
Shreds 用于最先发现。 如果你能在靠近当前 leader 的位置接收 Shreds,你可以比仅监视 Geyser 或 RPC 的人早数十到数百毫秒检测到链上变化。对于这一差距直接转化为盈亏的策略来说,这非常重要。代价是你接受噪声并为此设计。
Geyser gRPC 用于确认和正确推理。 在区块确认时,Geyser 发出日志、账户变更和其他结构化事件。你可以将这些接入你的策略逻辑、风险控制、索引器和监控系统。它比 Shreds 慢,但数据是一致的,更容易推理。
该领域的常见模式是:
  • 使用 Shreds 尽快检测机会并组装候选交易。
  • 同时使用 Geyser gRPC 验证区块和日志,驱动主要逻辑和监控。
这种分离让你能够推进延迟,同时保持决策建立在稳定且可验证的数据之上。

TLS、共享端点和专用节点

到目前为止,我们假设底层节点和网络是相同的。实际上,还有另一个巨大的结构性差异:你使用的是共享端点还是专用节点。
共享端点同时被许多租户使用。 它暴露在公共互联网上,流量通过安全边界。加密是强制性的;你不能简单地关闭 TLS。加解密和握手的成本对于正常的 dApp 使用来说完全可以接受,但如果你试图在 HFT 风格的场景中削减每一毫秒,这就会体现出来。
专用节点为单个租户保留。 因为你可以通过 IP 地址限制访问并隔离环境,你就获得了禁用 TLS 并使用纯 HTTP 或明文 gRPC 的选项。你也不与其他客户共享 CPU、内存、磁盘 I/O 或网络带宽,所以你的延迟不会因为其他人在同一台机器上运行繁重工作负载而跳动。
如果你在专用节点上运行 Shreds、Geyser gRPC 和 RPC,所有这些流都在与其他租户和 TLS 开销隔离的环境中运行。 这种组合使专用设置能达到共享端点在设计上无法达到的延迟范围,即使硬件相同。
共享节点的存在是为了为许多用户提供稳固的性能。 专用节点的存在是为了当你真正需要最快路径时突破极限。

多区域和专用 Shreds(UDP 转发)

回到距离和 leader 位置,只要 Solana 的 leader 在全球轮换,单区域设置就永远不可能在所有地方、所有时间都是最快的。
这就是多区域 Shreds 设置的用武之地。
Direct Shreds Price
Dedicated Shreds(Premium Shreds、Standard Shreds、Metal Shreds、Limited Editions 和类似产品线)结合了:
  • 尽可能快的 UDP Shreds 传输
  • 最小抖动的专用服务器
通过在法兰克福、阿姆斯特丹、纽约、芝加哥、东京和新加坡等多个区域部署专用 Shreds,无论当前哪个区域最有利,你都可以在靠近 leader 的位置接收 Shreds。
Limited Shreds Pricing
常见的模式是同时订阅来自不同区域的多个 Shreds 数据源,仅对最先到达的数据采取行动。 这减少了长距离延迟和区域拥堵的影响,使你能以实际的方式近似"始终靠近 leader"。
为了使多区域专用 Shreds 更易获取,ERPC 提供多区域使用的折扣优惠券:
Dedicated Shreds Bundle Discount
  • 2 个区域:5% 折扣
  • 3 个区域:8% 折扣
  • 5 个区域:10% 折扣
  • 全部区域:15% 折扣
这使得更容易设计这样的配置:将最高端的 Shreds 层级(例如 Premium 或 Metal)放在最具竞争力的区域,在辅助区域使用更具成本效益的选项,同时仍实现广泛覆盖。

共享 Shredstream 套餐:进入 Shreds 的更广泛入口

在你承诺在所有地方都使用完全专用的 Shreds 之前,多区域共享 Shredstream 设置可以是一个非常实际的中间步骤。
Shreds Bundle Price
共享 Shredstream 套餐让你在单一方案下从多个区域消费共享 Shreds。 在内部,共享 Shredstream 从 Shreds 层(UDP)获取数据,并通过 gRPC 传递给你。来源仍然是 Shreds,所以你看到的信息比 Geyser gRPC 早一步,同时受益于 gRPC 流的便利性。
就各层如何对齐而言:
  • 通过 UDP 转发的专用 Shreds 是最快的,最接近传播层。
  • 共享 Shredstream 是从 Shreds 派生的 gRPC 流,位于其上方。
  • Geyser gRPC 在之后,位于区块确认时序。
共享 Shredstream 套餐包括 IP 白名单、10 个连接和到最近边缘的自动路由。这保持了合理的成本,同时允许你在亚洲、北美和欧洲等区域同时使用 Shreds 派生的数据。
与其直接跳到每个区域都使用专用 Shreds,你可以:
  • 从共享 Shredstream 套餐开始,获得基于 Shreds 的数据的实际经验。
  • 使用日志和性能数据了解它在哪里产生最大差异。
  • 一旦有证据和明确的业务案例,将高影响区域迁移到专用 Shreds。

按开发阶段的实际步骤

将所有这些综合起来,按阶段思考更容易。
在第一阶段,选择正确的区域和距离,然后使用 RPC 和 WebSocket 构建你的 dApp 或机器人。 在触及 Shreds 或 gRPC 之前,正确选择区域和网络位置通常就能带来很大的用户体验改善。对于发布产品来说,WebSocket 是非常理性的选择,特别是从前端角度。
在第二阶段,添加 Geyser gRPC 以加强后端、监控和分析。 Geyser gRPC 让你高效消费区块、日志和账户事件,并在其上构建强大的索引器、告警系统和外部 API。它在速度、可靠性和开发成本之间取得了良好平衡,是许多团队的自然"第二步"。
在第三阶段,在延迟差异直接影响盈亏或用户体验的地方引入 Shreds 和 UDP 转发。 通过在多个区域部署专用 Shreds 并使用多区域折扣,你可以进入 HFT、MEV 和 0-slot 策略所需的延迟范围,而无需一次从头设计所有东西。
关键不是"UDP 理论上最快,所以到处只用 UDP"。 关键是审视你的阶段和经济状况,然后决定在哪里以及何时投资 Shreds 和专用基础设施真正能产生效果。

使用 ERPC 套餐和 VPS 作为基础

ERPC 套餐方案旨在为你提供完整的基础:
  • RPC(HTTP / WebSocket)
  • Geyser gRPC
  • 共享 Shredstream gRPC
所有这些都在单一结构下。
Bundle Plan
你可以继续使用 RPC 和 WebSocket 作为主要生产接口,同时在同一网络上试验 Geyser gRPC 和 Shredstream。 因为所有东西都运行在统一的基础设施上,你可以直接比较行为和性能,并根据实际测量而非假设做出决策。
在此基础上,你可以将其与位于相同 ERPC 网络内的 VPS 产品线(如 EPYC VPS 和 Premium Ryzen VPS)结合使用。
Premium Ryzen VPS
这让你在一个地方调优:
  • 到 Solana 验证者的距离
  • 数据流的选择(WS、gRPC、Shreds)
  • 硬件性能
实际的方法是先确保正确的区域和 ERPC 套餐 + VPS 基础,然后随着需求和经济状况的演变开启更快的层(Geyser、共享 Shreds、专用 Shreds)。

总结:从时序、传输和距离设计 Solana 性能

Solana 应用的性能和用户体验来自多种因素的组合:
  • 你的服务器位于哪里
  • 你在每个时段与 leader 有多近
  • 你在什么时序接收链上数据
  • 你使用什么传输和协议
  • 你的应用逻辑如何在此基础上反应
距离和 leader 位置构成基础。在此之上你有:
  • Shreds 用于最早阶段
  • Geyser gRPC 用于确认的结构化数据
  • RPC / WebSocket 用于通过 API 访问存储状态
在传输层面你有:
  • UDP
  • gRPC over TCP
  • WebSocket over TCP,带 JSON 和 TLS
仅凭名称或营销选择数据流或协议是不够的。 关键是沿着这三个轴选择与你的用例匹配的结构:时序、传输特性和到相关验证者的距离。
ERPC 和 Validators DAO 提供以 Solana 为中心的网络、RPC / gRPC / Shredstream 服务、VPS 产品线和专用 Shreds 的多区域折扣,使你能以合理的成本构建这些结构,并随着需求增长不断演进。
如果你想讨论数据流设计、网络距离优化或专用 Shreds、共享 Shredstream 套餐、套餐和 VPS 的组合,请随时通过 Validators DAO Discord 联系我们。