摘要
Solana RPC 提供商通常通过每秒请求数上限、计算单元预算和按方法限制的组合来控制负载,然后将这些限制打包成使用层级。你所在的层级决定了你可以发送多少请求、哪些方法可用,以及你获得的是共享容量还是专用容量。理解其机制比记住任何单一提供商的具体数字更重要,因为限制会变化,而你的工作负载特征才是决定哪个层级真正适合的关键。
本文解释了 Solana RPC 上速率限制通常如何实现,如何在不被生产环境意外困扰的情况下理解使用层级,以及如何在共享端点和专用节点基础设施之间做出选择。它还涵盖了需要关注的故障信号,以及如何在承诺之前用真实流量测试某个层级。
Solana RPC 并不是一个具有单一限制集的产品。每个提供商都在相同的 JSON-RPC 接口上封装了自己的限流模型,然后按层级出售访问权限。如果你在比较提供商,有用的问题不是“谁的数字最高”,而是“哪种限制模型匹配我的应用实际发送流量的方式”。
本页解释了 Solana RPC 上速率限制通常如何工作,使用层级通常控制什么,以及如何在共享端点和专用节点基础设施之间做出选择。它是为需要在发布前确定端点规模的开发者和基础设施购买者编写的。
在比较层级之前如何决定
在你阅读任何提供商的层级表之前,先写下关于你工作负载的三件事:你的峰值每秒请求数、你调用的方法组合,以及你是否需要 WebSocket 订阅。这三个答案会立即排除大多数层级。
- 低而稳定的流量(一个钱包、一个仪表盘、每天几千次调用):共享公共或入门层级通常就足够了。你更关心方法可用性而不是原始吞吐量。
- 突发流量(一次铸造、一个领取窗口、一个在事件发生时唤醒的机器人):你关心突发允许量以及一旦超过后提供商限流你的速度。
- 重度或持续流量(索引器、交易系统、
getProgramAccounts扫描、日志流):共享层级往往会成为瓶颈。这时专用节点或私有端点通常更有意义。
如果你的应用属于第三类,层级表就不是用来优化的正确文档。从容量出发,将共享层级视为备用路径。
Solana RPC 上的“速率限制”实际意味着什么
提供商很少强制执行单一数字。实际上你会同时遇到多种限制类型,而你首先触发的那个就定义了你的体验。
| 限制类型 | 约束什么 | 典型触发条件 |
|---|---|---|
| 每秒请求数 (RPS) | 你的密钥每秒总调用数 | 高频轮询、大量小调用 |
| 计算单元预算 | 昂贵方法的加权成本 | getProgramAccounts、大型 getSignaturesForAddress |
| 按方法限制 | 特定的重型方法 | 账户扫描、交易模拟 |
| 连接限制 | 并发 HTTP 或 WebSocket 连接 | 大量打开的订阅 |
| 突发允许量 | 高于稳定速率的短时峰值 | 事件驱动流量 |
RPS 是大多数提供商宣传的数字,但在 Solana 上,计算单元风格的预算往往是真正阻止你的因素。一个带有宽泛过滤器的 getProgramAccounts 调用可能比数百次 getSlot 调用成本更高。如果你只比较 RPS 数字,你可能会选择一个看起来慷慨的层级,但在第一次账户扫描时仍然被限流。
理解使用层级而不被意外困扰
使用层级是四件事的捆绑:速率允许量、方法集、传输集以及支持或 SLA 层。提供商以不同方式呈现它们,但底层问题是相同的。
- 速率是硬上限还是软上限? 硬上限立即返回错误。软上限可能先排队或降低延迟。
- 哪些方法被排除? 归档查询、跟踪式调用和重型账户扫描通常被限制在更高层级。
- 是否包含 WebSocket? 订阅的行为与 HTTP 不同,有时单独计量。
- 达到限制时会发生什么? 清晰的错误代码比静默的延迟增长更容易处理。
当你评估一个层级时,询问故障行为,而不仅仅是上限。一个返回干净的 429 且你可以退避的层级,比一个悄悄减慢每个请求的层级更可行。
Solana 上的共享端点与专用节点
这是查询背后的真正决策。速率限制的存在是因为共享容量是有限的。专用基础设施改变了问题的形态。
| 维度 | 共享/分层 RPC | 专用节点 |
|---|---|---|
| 容量模型 | 池化,按密钥设上限 | 为你的工作负载预留 |
| 速率限制 | 由提供商强制执行 | 由你自己的节点定义 |
| 重型方法 | 通常按层级限制 | 根据你的配置可用 |
| WebSocket | 共享,有时计量 | 由你自行确定规模 |
| 最适合 | 钱包、仪表盘、中等应用 | 索引器、交易、高流量后端 |
| 成本形态 | 可预测,入门较低 | 较高,随容量扩展 |
OnFinality 为 Solana 提供两种模型:用于标准工作负载的共享 Solana RPC 端点,以及当你需要预留容量并控制自己的限制时的 专用节点 基础设施。正确的选择取决于你的上限是由别人的池设定还是由你自己的流量设定。
用真实流量测试层级
不要从表格来确定层级规模。发送代表性流量并观察边缘情况。在提交计划之前,对公共端点进行短暂的负载探测可以让你了解响应的形态。
# 针对 OnFinality Solana 公共端点的简单 RPS 探测
ENDPOINT="https://solana.api.onfinality.io/public"
for i in $(seq 1 50); do
curl -s -o /dev/null -w "%{http_code} %{time_total}s\n" \
-X POST "$ENDPOINT" \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"getSlot","params":[]}'
done
注意三个信号:非 200 响应、time_total 上升以及响应体中的任何 JSON-RPC 错误对象。在你预期的峰值下干净运行表明层级适合。错误或延迟增长告诉你需要升级层级或转向专用容量。
对于方法级测试,探测你实际依赖的调用,而不仅仅是 getSlot:
// 检查你的层级上是否有重型方法可用
const endpoint = "https://solana.api.onfinality.io/public";
async function probe(method, params) {
const res = await fetch(endpoint, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ jsonrpc: "2.0", id: 1, method, params }),
});
const body = await res.json();
console.log(method, res.status, body.error ?? "ok");
}
await probe("getSlot", []);
await probe("getVersion", []);
如果某个方法在你的层级上返回方法未找到或速率错误,那是层级边界,不是 bug。记录下来并纳入你的计划。
故障信号及其含义
当 Solana RPC 端点开始拒绝工作时,症状告诉你触发了哪个限制。
| 症状 | 可能的限制 | 下一步 |
|---|---|---|
每次调用立即 429 | RPS 上限 | 退避、批量调用或提高层级 |
仅在账户扫描时 429 | 计算预算或按方法限制 | 将重型方法移至专用容量 |
| 响应缓慢,无错误 | 软限流或共享争用 | 测量延迟,考虑预留节点 |
| WebSocket 断开 | 连接限制 | 减少订阅或拆分连接 |
| 方法不可用 | 层级方法限制 | 升级前确认方法支持 |
将这些视为设计输入。如果你的应用经常触发相同的限制,那么层级对工作负载来说形态不对,再多的重试逻辑也无法修复底层的不匹配。
围绕限制设计而不是对抗它们
好的 Solana 客户端假设限制存在。一些习惯可以减少你触发它们的频率:
- 在 API 允许的地方批量处理。 JSON-RPC 批量请求减少往返和 RPS 压力。
- 缓存不变的内容。 槽高度、纪元信息和静态账户数据不需要每个请求都调用。
- 使用 WebSocket 订阅处理状态变化,而不是在循环中轮询。
- 按密钥分离工作负载。 将索引器流量与面向用户的流量分开,以免一个饿死另一个。
- 添加备用端点。 第二个提供商或专用节点在主端点限流时为你提供路径。
这些模式与提供商无关。它们也使层级比较更容易,因为你是在将优化后的流量与每个层级比较,而不是最坏情况的突发。
关键要点
- Solana RPC 速率限制通常是 RPS 上限、计算单元预算、按方法限制和连接限制的混合,而不是单一数字。
- 使用层级捆绑了速率允许量、方法集、传输集和支持层;故障行为与上限同样重要。
- 像账户扫描这样的重型方法往往是真正的约束,所以比较方法支持,而不仅仅是 RPS。
- 共享端点适合钱包、仪表盘和中等应用;专用节点适合索引器、交易系统和持续高流量后端。
- 用代表性流量测试层级,并在提交前注意
429、延迟增长和方法错误。 - OnFinality 提供共享 Solana RPC 端点 和 专用节点 选项,详情见 RPC 定价 和 支持的 RPC 网络。
常见问题
所有 Solana RPC 提供商都以相同方式限流吗? 不。大多数将 RPS 上限与加权方法成本和连接限制结合,但确切的模型和触发限流的点不同。比较故障行为,而不仅仅是标题数字。
更高的使用层级总是正确的解决方案吗? 只有当你的工作负载适合共享模型时才是。如果你运行持续的重流量或频繁的账户扫描,专用容量通常比升级层级更合适。
我如何知道我触发了哪个限制? 看症状。所有调用立即出错通常意味着 RPS 上限。仅重型方法出错指向计算预算或按方法限制。无错误的延迟增长表明软限流或共享争用。
我能完全避免速率限制吗? 没有端点是无限制的。你可以通过批量处理、缓存、使用 WebSocket 订阅和分离工作负载来减少触发限制的频率,并且你可以通过专用基础设施提高上限。
OnFinality 支持 Solana WebSocket 吗? 是的。Solana 端点支持 HTTP 和 WebSocket 传输。当前端点详情见 Solana 网络页面,计划选项见 RPC 定价。
下一步
如果你仍在比较提供商,从本页顶部的工作负载问题开始,将你的答案映射到层级。如果你的流量是持续的或方法繁重的,评估 专用节点 容量,而不是追求更高的共享层级。有关端点详情、计划选项和完整网络列表,请参阅 Solana RPC、RPC 定价 和 支持的 RPC 网络。