Logo
新用户订阅 RPC,首月享 6.5 折优惠查看优惠
RPC Assistant

Solana RPC 提供商在速率限制和吞吐量方面有何不同?

摘要

Solana RPC 提供商的主要区别在于它们如何计量请求、如何处理计算单元密集的调用,以及是否提供专用容量。共享层级通常应用每秒或每方法限制,而专用节点则让你直接控制吞吐量。

本对比将分解你会遇到的速率限制模型、重要的 Solana 特定限制(如 getProgramAccounts 和 WebSocket 订阅),以及如何为生产工作负载评估提供商。

Solana 的高吞吐量使得 RPC 容量成为真正的工程约束。与 EVM 链上简单的 eth_call 成本低廉不同,Solana RPC 请求的成本差异巨大:getBalance 调用微不足道,而 getProgramAccounts 或繁忙的 WebSocket 订阅可能消耗节点资源的很大一部分。这就是为什么 Solana 上的“速率限制”不是一个可以在提供商之间比较的单一数字。它是每秒请求数上限、方法级限制、计算单元计量和连接限制的组合。

本文解释了你会遇到的速率限制模型、在承诺使用提供商之前需要检查的内容,以及如何为你的工作负载在共享和专用容量之间做出决定。

快速推荐:共享层级还是专用节点?

在逐行比较提供商之前,先确定哪种容量模型适合你的应用。

  • 原型设计、低流量 dApp 或只读仪表板: 共享 RPC 层级通常就足够了。你获得一个具有已发布或软速率限制的托管端点,并且无需管理基础设施。
  • 交易机器人、索引器、钱包后端或任何具有突发或持续负载的应用: 共享层级最终会限制你。一个专用节点为你提供可预测的上限,并消除导致延迟峰值的共享池争用。
  • 重型 getProgramAccounts、getSignaturesForAddress 扫描或大型 WebSocket 扇出: 这些是最可能在共享层级上受到限制的调用。如果你的应用依赖它们,请计划专用容量或索引层。

如果不确定,请从共享端点开始,监测你的请求模式,并在看到限流或延迟变化时转向专用容量。OnFinality 提供两种模型,因此你可以在不更换提供商的情况下扩展。请参阅 RPC 定价了解层级如何映射到使用量。

你实际会遇到的四种速率限制模型

提供商很少发布单一的“每秒请求数”数字。大多数结合了几种机制:

  1. 每秒请求数(RPS)或每分钟请求数(RPM)。 最简单的上限。按 API 密钥或 IP 应用。适用于稳定流量,对突发流量惩罚严重。
  2. 计算单元(CU)计量。 每个方法被分配一个成本。getBalance 可能花费 1 CU,而 getProgramAccounts 花费数百或数千。你的计划是 CU 预算,而不是请求计数。这是最符合 Solana 节点实际消耗资源方式的模型。
  3. 方法级限制。 一些提供商在共享层级上阻止或严格限制昂贵的方法,无论你的 CU 预算如何。getProgramAccounts 和 getProgramAccounts 风格的扫描是常见的嫌疑对象。
  4. 连接和订阅限制。 WebSocket 连接、并发订阅以及 accountSubscribe / logsSubscribe 计数通常与 HTTP 分开限制。

当你比较提供商时,询问这四种中哪些适用以及它们如何相互作用。一个具有宽松 RPS 上限但严格 CU 计量的提供商可能会比你预期更早地限制你。

提供商评估矩阵

使用此表来组织你的比较。从每个提供商当前的文档中填写具体信息,因为限制会随时间变化。

比较内容为什么在 Solana 上重要向提供商询问什么
速率限制模型仅 RPS 会误导;CU 计量反映真实节点成本上限是基于 RPS、RPM 还是 CU?每个方法的 CU 如何计算?
重型方法策略getProgramAccounts 和签名扫描主导资源使用这些方法在共享层级上允许吗?成本是多少?
WebSocket 限制订阅是长期存在的并消耗内存每个密钥有多少并发 WS 连接和订阅?
突发行为流量很少均匀;启动和清算会激增有突发允许量吗,还是每秒硬上限?
专用选项为生产提供可预测的上限我能获得专用节点吗,它会移除共享上限吗?
故障转移/多端点单端点是单点故障你们支持多个区域或端点用于故障转移吗?
可观测性你无法调整你无法衡量的东西你们暴露使用量、CU 消耗和错误细分吗?

OnFinality 提供共享 RPC API 访问和专用 Solana 节点,因此你可以将模型与工作负载匹配。在 Solana 网络页面上比较两者。

使比较陷入困境的 Solana 特定限制

通用的 RPC 比较通常忽略 Solana 的方法经济学。三个领域值得特别关注。

getProgramAccounts 和账户扫描

getProgramAccounts 可能返回巨大的结果集。许多提供商要么在共享层级上禁用它,要么要求 dataSlice 或过滤器,要么收取高 CU 成本。如果你的应用依赖它,请在承诺之前确认政策。一个“支持 Solana”但静默地对此方法进行速率限制的提供商会破坏你的索引器。

WebSocket 订阅

Solana 应用经常使用 accountSubscribe、logsSubscribe 和 slotSubscribe。这些在连接的生命周期内占用服务器资源。提供商限制每个密钥的并发订阅,并且繁忙的订阅可以独立于你的 HTTP 流量被限流。在现实负载下测试订阅限制,而不仅仅是单个连接。

交易提交和优先费用

sendTransaction 行为各不相同。一些提供商以不同的策略将交易转发给领导者,一些对写入路径调用应用单独的限制。如果你大量提交交易,请询问提供商如何处理提交以及它是否影响你的速率预算。

在承诺之前测试提供商的限制

不要仅依赖已发布的数字。对你的候选端点运行短期负载测试,并观察限流的形态。

使用 curl 对 OnFinality 公共 Solana 端点进行最小探测:

curl https://solana.api.onfinality.io/public \
  -X POST -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"getSlot","params":[]}'

在 JavaScript 中进行快速吞吐量检查,触发一批廉价调用并测量提供商在你增加并发时的响应:

const endpoint = "https://solana.api.onfinality.io/public";

async function probe(concurrency) {
  const calls = Array.from({ length: concurrency }, (_, i) =>
    fetch(endpoint, {
      method: "POST",
      headers: { "Content-Type": "application/json" },
      body: JSON.stringify({
        jsonrpc: "2.0",
        id: i,
        method: "getSlot",
        params: [],
      }),
    }).then((r) => r.status)
  );
  const results = await Promise.all(calls);
  const throttled = results.filter((s) => s === 429).length;
  console.log(`concurrency=${concurrency} throttled=${throttled}`);
}

probe(10);
probe(50);
probe(100);

注意 HTTP 429 响应、JSON-RPC 错误代码和延迟上升。限流开始的并发级别是该层级上的实际上限。对专用端点重复测试以查看差异。

正确读取限流信号

当你达到限制时,症状告诉你哪个机制触发了:

症状可能原因下一步
许多调用同时出现 HTTP 429超过 RPS 或 CU 上限降低并发或升级层级
仅在 getProgramAccounts 上出现 429方法级限制添加过滤器/dataSlice 或迁移到专用
负载下 WebSocket 断开订阅或连接上限减少订阅或使用专用节点
延迟上升但没有 429共享池争用考虑专用容量
仅在 sendTransaction 上出错写入路径限制或转发策略询问提供商关于提交策略

区分这些情况可以防止常见错误:在真正的修复是批处理或过滤调用时升级计划。

减少你的速率限制足迹

在支付更多容量之前,削减不必要的负载:

  • 批处理 JSON-RPC 请求(如果提供商支持),以便许多廉价调用共享一个 HTTP 往返。
  • 在 getProgramAccounts 上使用 dataSlice 和过滤器以缩小结果集。
  • 积极缓存。 槽高度、代币元数据和账户数据的变化频率低于你可能轮询的频率。
  • 对于频繁变化的状态,优先使用 WebSocket 订阅而不是轮询,但限制订阅数量。
  • 分离读取和写入路径,以便交易提交的突发不会饿死你的读取流量。

这些更改通常会延迟对更高层级的需求,并使你的使用更可预测。

何时专用容量是正确的答案

共享层级经济实惠,对许多应用来说很好。专用节点在以下情况下有意义:

  • 你需要一个可预测的吞吐量上限,不随其他租户变化。
  • 你依赖共享层级限制的重型方法或大型 WebSocket 扇出。
  • 你想运行归档式查询或索引历史数据。
  • 你需要一致的延迟用于交易或实时用户体验。

OnFinality 的专用节点选项为你提供私有 Solana 节点,同时保持托管运营模式。你可以在网络页面上查看支持的网络,并在 RPC 定价上比较成本。

关键要点

  • Solana 速率限制不是一个数字;它结合了 RPS/RPM 上限、计算单元计量、方法限制和 WebSocket 限制。
  • getProgramAccounts、签名扫描和订阅是最可能在共享层级上被限流的调用。
  • 在承诺之前,始终对候选端点进行负载测试并读取限流信号。
  • 在升级之前,通过批处理、过滤器、缓存和订阅减少你的足迹。
  • 当你需要可预测的吞吐量、重型方法支持或一致的延迟时,迁移到专用节点。

常见问题解答

我可以仅通过每秒请求数来比较 Solana RPC 提供商吗? 不。RPS 只是一种机制。计算单元计量和方法级限制通常更重要,尤其是对于像 getProgramAccounts 这样的重型调用。

为什么我只在某些方法上收到 429 错误? 这通常表明是方法级限制而不是全局 RPS 上限。添加过滤器或 dataSlice,或将这些调用迁移到专用节点。

WebSocket 订阅会计入我的速率限制吗? 通常是的,但与 HTTP 分开计算。提供商通常限制每个密钥的并发连接和订阅。

我如何知道何时从共享切换到专用? 当你看到持续限流、共享池争用导致的延迟变化,或者你依赖共享层级上受限的方法时。

OnFinality 同时提供共享和专用 Solana 访问吗? 是的。OnFinality 提供共享 RPC API 端点和专用 Solana 节点,因此你可以从共享开始并扩展到专用,而无需更换提供商。请参阅 RPC 定价和 Solana 网络页面。

下一步

首先映射你的实际请求模式:哪些方法、频率如何以及突发性如何。然后针对你的峰值负载测试共享端点。如果它能承受,你就完成了。如果它限流,你现在知道修复方法是批处理、过滤还是专用容量。OnFinality 支持两种模型,你可以查看支持的 RPC 网络来规划你的部署。

RPC 知识库

相关 RPC 内容

网络 RPCKusamaAsset Hub

什么是Kusama Asset Hub以及如何连接?

# 什么是Kusama Asset Hub以及如何连接? Kusama Asset Hub(原名Statemine)是Kusama网络上的一个公益平行链,支持同质化和非同质化资产的发行与转移。它也是持有和转移KSM代币的低成本链。经过最近的运行时升级,Asset Hub现在支持智能合约,并承载了以前...

网络 RPCEfinity

什么是 TON 公共节点,何时应该使用它?

TON 公共节点是一个共享的 RPC 端点,允许你读取 TON 区块链数据并提交交易,而无需运行自己的节点。这是让钱包、脚本或原型与 TON 通信的最快方式,但共享端点存在速率限制、延迟波动,且没有运营保证。 本文解释了 TON RPC 与 EVM 链的区别、如何连接到公共端点、何时公共节点足够,以...

网络 RPCPolygon

Polygon RPC 列表:面向开发者的主网和 Amoy 测试网端点

查找 Polygon 主网和 Amoy 测试网的官方 RPC 端点,包括 HTTPS 和 WebSocket URL。了解如何根据应用需求在公共、托管和专用 RPC 提供商之间进行选择,并获取钱包和开发者的配置示例。...

网络 RPCBittensor

Bittensor 子网 123:它是什么以及如何连接?

Bittensor 子网 123 是运行在 Bittensor 网络之上的编号激励子网之一。每个子网都有自己的任务、矿工和验证者激励设计,以及自己的链上注册和质押记账,因此“子网 123”最好理解为特定子网的 netuid,而不是固定的产品名称。如果你正在其上构建,实际问题通常是:如何读取其状态以及...

区块链基础设施Bittensor

什么是 Bittensor 节点以及如何选择合适的设置?

Bittensor 节点(subtensor)是一个完整的区块链节点,连接到 Bittensor 网络,使您能够读取链状态、提交交易并参与子网。运行自己的节点可以完全控制并保护隐私,但需要大量的硬件和维护。对于许多团队来说,使用托管的 RPC 端点或专用节点基础设施是更实际的选择。...

RPC 提供商选择

什么是 Chainstack?开发者区块链基础设施指南

# 什么是 Chainstack?开发者区块链基础设施指南 Chainstack 是一个区块链基础设施平台,提供托管 RPC 节点、专用节点以及开发者工具,覆盖 70 多条区块链网络。该公司成立于 2018 年,总部位于马萨诸塞州伯灵顿,旨在通过地理均衡的 Global Nodes、固定费用定价以及...

永远不用担心基础设施

OnFinality 消除了 DevOps 的繁重工作,让您能够更聪明、更快地构建。

开始