摘要
速率限制和用量层级决定了在开始限流之前,您可以向 Solana RPC 端点发送多少每秒请求数(RPS)或计算单元。最佳选择取决于您的工作负载:轻量级 dApp 可以使用共享公共端点,而高频交易机器人、索引器和生产应用通常需要专用节点或具有可预测吞吐量的付费层级。
本文解释了 Solana RPC 提供商如何构建速率限制、在用量层级之间应比较哪些内容,以及如何根据您的请求特征评估 OnFinality 的共享 RPC API 或专用 Solana 节点等选项。
Solana 的高吞吐量设计意味着 RPC 提供商必须在请求量与节点资源之间取得平衡。与区块时间可预测的以太坊式链不同,Solana 大约每 400 毫秒产生一个区块,而单次 getProgramAccounts 调用可能返回数兆字节的数据。这使得速率限制和用量层级成为评估提供商时的首要考虑因素。
本文详细介绍了 Solana RPC 速率限制通常如何构建、在层级之间应比较哪些内容,以及如何将提供商与您的工作负载相匹配。本文面向需要可预测吞吐量而不必猜测隐藏上限的开发者和基础设施采购者。
快速建议:根据请求形态匹配层级
在比较提供商名称之前,先对您的工作负载进行分类。Solana 速率限制通常以每秒请求数(RPS)、每 10 秒请求数或每秒计算单元来表示。正确的层级更多取决于您的请求模式,而非品牌。
| 工作负载模式 | 典型请求形态 | 通常适合的层级 |
|---|---|---|
| 钱包 UI 或轻量级 dApp | < 10 RPS,主要是 getBalance、getLatestBlockhash | 共享/公共 RPC 或入门付费层级 |
| 交易机器人或套利 | 50–500+ RPS,延迟敏感,WebSocket 订阅 | 专用节点或高吞吐量付费层级 |
| 索引器或分析 | 突发性 getProgramAccounts、getSignaturesForAddress | 支持归档的专用节点,具有高 CU 预算 |
| NFT 铸造或空投 | 短时 sendTransaction 峰值 | 支持突发且队列可见的层级 |
| 验证者工具 | 稳定的 getSlot、getEpochInfo | 低成本共享层级通常足够 |
如果您的应用属于第一行或最后一行,像 OnFinality 的 Solana RPC API 这样的共享端点通常就足够了。如果您处于中间行,请计划使用专用节点或具有文档化限制的付费层级。
Solana RPC 速率限制的实际工作原理
提供商很少公布单一数字。相反,他们结合了多种机制:
- 每秒请求数(RPS): 您每秒可以发起的 HTTP 调用数量的硬性上限。
- 计算单元(CU): 一种加权预算,昂贵的方法成本更高。
getProgramAccounts可能花费 100 CU,而getBalance花费 1 CU。 - 并发限制: 您的 API 密钥可以同时拥有的进行中请求数量。
- WebSocket 订阅上限: 您可以同时订阅的账户或程序数量。
- 突发允许量: 高于稳态限制的短期峰值,通常有冷却时间。
当您超过限制时,提供商通常会返回 HTTP 429 和 JSON-RPC 错误正文。一些提供商则静默丢弃 WebSocket 消息,这更难调试。
典型的 429 响应如下所示:
{
"jsonrpc": "2.0",
"error": {
"code": -32429,
"message": "Too many requests"
},
"id": 1
}
如果您在正常操作期间看到此错误,说明您的层级对于您的工作负载来说规模不足。
在用量层级之间应比较哪些内容
并非所有“无限”或“高吞吐量”层级都意味着相同的事情。当您阅读定价页面时,请提取以下细节:
- 限制单位: 上限是以 RPS、CU 还是两者兼有?一个 100 RPS 层级搭配 10,000 CU/s 预算的行为与一个没有 CU 加权的 100 RPS 层级非常不同。
- 方法限制: 某些层级排除了
getProgramAccounts、getSignaturesForAddress或归档查询。请检查方法允许列表。 - WebSocket 支持: 如果您依赖
accountSubscribe或logsSubscribe,请确认该层级包含 WebSocket 以及允许的订阅数量。 - 突发行为: 提供商是否允许短期峰值,还是限制按秒强制执行且没有缓冲?
- 超额处理: 提供商是限流、对超额计费,还是将请求排队?排队会增加延迟;限流会导致错误。
- 密钥轮换和团队访问: 对于团队,请检查是否可以签发具有独立限制的多个 API 密钥。
用于提供商评估的实用对比表:
| 评估领域 | 需要关注的内容 | 为什么重要 |
|---|---|---|
| 速率限制单位 | 文档化的 RPS + CU 加权 | 防止在重型方法上出现意外限流 |
| 方法覆盖 | getProgramAccounts、归档、sendTransaction | 索引器和交易机器人依赖这些 |
| WebSocket 限制 | 订阅数量和消息速率 | 没有这些,实时应用会静默失败 |
| 突发策略 | 文档化的突发窗口 | 铸造和空投峰值需要余量 |
| 超额行为 | 限流 vs. 排队 vs. 计费 | 影响错误处理和用户体验 |
| 专用选项 | 迁移到私有节点的能力 | 消除共享池争用 |
OnFinality 的 RPC 定价 页面列出了当前的层级结构,当共享限制不够时,可以使用 专用节点。
各提供商在速率限制和层级方面的说明
这不是排名。它总结了不同提供商模式如何处理速率限制,以便您提出正确的问题。
OnFinality 提供具有文档化用量层级的共享 Solana RPC API,以及通往专用 Solana 节点的路径。共享端点适用于开发和中等生产流量,而专用节点消除了共享池速率限制,并为您提供私有端点。OnFinality 还支持 Solana 上的 HTTP 和 WebSocket 传输,如果您使用订阅,这一点很重要。
公共/免费端点(包括 Solana 自己的公共 RPC)通常具有严格的速率限制、无 SLA 和无 WebSocket 保证。它们适合测试,但不适合生产流量。
基于信用定价的托管 RPC 提供商 通常按计算单元而非 RPS 计量。这对于轻量级工作负载可能更便宜,但对于调用昂贵方法的索引器来说更难预测。
专用节点提供商 向您出售私有节点,这实际上消除了共享速率限制,但将监控和扩展的责任转移给您或提供商的托管层。
交易所或钱包 RPC 端点 通常不适用于第三方应用,因此很少出现在提供商比较中。
在比较时,请要求每个提供商以书面形式提供其速率限制文档。如果提供商无法说明限制单位和超额行为,请将其视为风险。
在承诺之前测试速率限制
您可以通过简单的负载测试来测量有效速率限制。从低并发开始,逐渐增加,直到看到 429 或延迟上升。
# 针对 Solana RPC 端点的简单 RPS 探测
for i in $(seq 1 50); do
curl -s -o /dev/null -w "%{http_code} %{time_total}\n" \
-X POST https://solana.api.onfinality.io/public \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"getSlot","params":[]}'
done
针对您的候选端点运行此命令,并观察 HTTP 429 响应或延迟峰值。对于 WebSocket,请单独测试订阅限制:
// WebSocket 订阅探测
const ws = new WebSocket("wss://solana.api.onfinality.io/public-ws");
ws.onopen = () => {
ws.send(JSON.stringify({
jsonrpc: "2.0",
id: 1,
method: "slotSubscribe"
}));
};
ws.onmessage = (event) => console.log(event.data);
如果您需要私有端点,请将 URL 替换为提供商仪表板中的专用节点 URL。
何时从共享迁移到专用
共享层级具有成本效益,直到争用或限制开始影响您的应用。在以下情况下考虑使用专用 Solana 节点:
- 您在高峰流量期间持续遇到 429。
- 您需要归档数据或大量
getProgramAccounts。 - 您需要为交易或清算逻辑提供可预测的延迟。
- 您希望隔离的 WebSocket 订阅,没有共享池噪音。
- 您需要运行自定义插件或特定的 Solana 客户端版本。
OnFinality 的 专用节点 选项提供具有可配置资源的私有 Solana 端点。对于希望使用托管基础设施而不运行验证者的团队,这通常是共享 RPC 和自托管之间的中间地带。
Solana RPC 层级的操作检查清单
一旦您选择了层级,请实施以下实践:
- 监控 429: 记录每个速率限制响应的方法名称和时间戳。
- 积极缓存:
getLatestBlockhash、getEpochInfo和代币元数据变化缓慢;请缓存它们。 - 批量请求: JSON-RPC 批量调用减少 HTTP 开销,但仍计入 CU 限制。
- 使用 WebSocket 进行订阅: 在循环中轮询
getAccountInfo是达到限制的最快方式。 - 设置客户端超时和重试: 对 429 进行指数退避比立即重试更安全。
- 监控每个方法的 CU: 如果您的提供商暴露指标,请跟踪哪些方法消耗最多预算。
- 规划故障转移: 配置辅助端点,以防主端点被限流或降级。
有关更广泛的提供商选择框架,请参阅 如何选择 RPC 提供商。
关键要点
- Solana RPC 速率限制通常是 RPS、计算单元、并发和 WebSocket 订阅上限的混合。
- 最佳层级取决于您的请求形态,而不仅仅是您的月流量。
- 像 OnFinality 的 Solana RPC API 这样的共享端点适合轻量级 dApp 和开发;专用节点适合高吞吐量或延迟敏感的工作负载。
- 始终要求提供商提供书面的速率限制文档,包括超额行为。
- 在承诺层级之前,使用负载探测测试限制。
- 缓存、批量处理并使用 WebSocket 订阅以保持在限制范围内。
常见问题
所有 Solana RPC 提供商都使用相同的速率限制单位吗? 不。有些使用每秒请求数,有些使用计算单元,还有些两者结合。在比较层级之前,请始终确认单位。
免费的 Solana RPC 端点足以用于生产吗? 免费和公共端点通常有严格的限制且没有 SLA。它们适合测试,但对生产流量有风险。
如何知道是否需要专用 Solana 节点?
如果您持续遇到 429、需要大量归档或 getProgramAccounts,或需要可预测的延迟,那么专用节点是下一步。
我可以在共享层级上使用 WebSocket 订阅吗? 许多提供商在共享层级上支持 WebSocket,但会限制订阅数量。在构建实时功能之前,请检查限制。
当我超过用量层级时会发生什么? 行为各不相同:一些提供商通过 429 限流,一些将请求排队,还有一些对超额计费。在承诺之前请确认这一点。
OnFinality 是否提供 Solana WebSocket 端点? 是的,OnFinality 支持 Solana 的 HTTP 和 WebSocket 传输。有关端点详细信息,请参阅 Solana 网络页面。
有关当前的层级选项,请访问 RPC 定价,并浏览 支持的 RPC 网络 以了解 Solana 在您的多链设置中的位置。