摘要
Solana RPC 提供商在实施速率限制方面有所不同:有些按 IP 限制每秒请求数,有些按计算单元或积分计量,高级套餐提供更高吞吐量或专用节点。本文比较了主要提供商的速率限制模型,并帮助您为工作负载选择合适的方案。
快速建议:将速率限制与您的工作负载匹配
在比较提供商之前,先确定您的应用实际需要什么。轻量级 NFT 行情器可以在共享 RPC 上运行,只需适度的请求上限。高频交易机器人或重放历史数据的 Solana 索引器会很快耗尽共享限制,可能需要专用节点或基于计算单元计量的套餐。
问三个问题:
- 您的请求模式是什么? 对
getLatestBlockhash或sendTransaction的突发调用需要高于平均 RPS 的余量。 - 您是否使用 WebSocket 订阅? 许多提供商单独计算每个订阅,并限制并发连接数。
- 您是否需要历史数据? 像
getSignaturesForAddress和getTransaction这样的方法开销较大;提供商可能会更严格地计量它们。
如果您预期持续负载或需要可预测的性能,请尽早评估专用节点选项。OnFinality 提供具有隔离容量的 专用 Solana 节点,其 RPC 定价 页面列出了共享和专用套餐。有关提供商选择标准的更广泛视图,请参阅 如何选择 RPC 提供商。
为什么速率限制在 Solana 上很重要
Solana 专为高吞吐量而设计,但该吞吐量取决于您使用的 RPC 端点。单个共享端点可能被少数重度消费者淹没,从而降低每个人的延迟。速率限制保护提供商的基础设施并确保公平使用,但它们也直接影响您应用程序的可靠性。
与以太坊(通常采用简单的每秒请求数上限)不同,Solana RPC 提供商通常使用更细粒度的计量。有些对每个 JSON-RPC 调用一视同仁,而另一些则根据计算负载为每个方法分配成本。这意味着允许 100 RPS 的套餐如果您发送许多 getTransaction 请求(远比 getSlot 昂贵),仍然可能限制您。
Solana RPC 提供商使用的速率限制模型
提供商通常分为三类:
1. 每秒请求数(RPS)上限
最简单的模型:您被允许每秒固定数量的请求,通常按 IP 地址计算。免费套餐可能允许 10-50 RPS,而付费套餐可扩展到数百或数千。此模型易于理解,但对于成本差异很大的方法可能不公平。
2. 计算单元或基于积分的计量
一些提供商为每个 RPC 方法分配成本,类似于 Solana 自身的计算限制。简单的 getHealth 调用可能花费 1 个积分,而响应较大的 getTransaction 可能花费 10 或更多。您的套餐包含每月积分配额,当您用完时会受到限制。此模型将定价与实际服务器负载对齐,但要求您更仔细地估算使用量。
3. WebSocket 的并发连接限制
WebSocket 订阅对于实时更新至关重要,但它们保持持久连接。提供商通常限制并发 WebSocket 连接数,有些还限制每个连接的订阅数。如果您需要监控许多账户,此限制可能成为瓶颈。
比较顶级 Solana RPC 提供商
下表总结了主要提供商的速率限制方法。请始终查看提供商的最新文档,因为套餐经常变化。
| 提供商 | 速率限制模型 | 免费套餐 | WebSocket 限制 | 专用选项 |
|---|---|---|---|---|
| OnFinality | 基于 RPS 的分层套餐 | 是 | 是,按套餐 | 是,隔离节点 |
| 提供商 A | RPS + 计算单元 | 是 | 是,较低上限 | 是 |
| 提供商 B | 基于积分 | 是 | 是,按订阅 | 是 |
| 提供商 C | 仅 RPS | 否 | 否 | 否 |
OnFinality 提供具有明确 RPS 限制的共享 RPC 端点,以及完全消除共享节流的专用节点。其 Solana 网络页面 列出了用于测试的公共端点和 WebSocket URL。
提供商 A 使用混合模型:基本 RPS 上限加上对昂贵方法的计算单元计量。这对轻度用户来说可能具有成本效益,但如果您依赖 getSignaturesForAddress,可能会让您感到意外。
提供商 B 因其积分系统而广受欢迎,该系统为您提供每月配额。对于稳定的工作负载,它是可预测的,但对于突发流量可能难以调整。
提供商 C 仅提供简单的 RPS 上限,并且缺乏 WebSocket 支持,使其不适合实时应用程序。
如何评估适合您用例的速率限制
在比较套餐时,请超越表面的 RPS 数字。考虑:
- 方法成本:提供商是否更严格地计量
getTransaction或getSignaturesForAddress?如果是,请将其纳入容量规划。 - 突发余量:一些提供商允许高于平均 RPS 的短突发,而另一些则在上限处硬性节流。如果您的应用有峰值,突发余量很有价值。
- 基于 IP 与基于密钥的限制:如果您运行多个后端服务器,基于 IP 的限制可能有问题。与 API 密钥关联的基于密钥的限制更易于管理。
- WebSocket 订阅上限:计算您需要并发订阅的数量,并验证提供商支持该数量。
- 存档数据访问:如果您需要历史数据,请检查提供商是否提供存档节点,以及这些请求是否计入相同的限制。
在承诺之前测试速率限制
您可以使用简单的脚本测量提供商的速率限制行为。以下示例发送一批 getSlot 请求,并报告在达到限制之前有多少成功。
for i in $(seq 1 200); do
curl -s -o /dev/null -w "%{http_code}\n" \
-X POST https://solana.api.onfinality.io/public \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"getSlot"}'
done | sort | uniq -c
如果您看到 HTTP 429 响应,则您已触发速率限制。确切阈值将取决于提供商和套餐。对于生产测试,请使用您的 API 密钥和真实的方法组合。
WebSocket 速率限制及其处理方法
WebSocket 连接通常与 HTTP 请求分开限制。常见限制是每个 API 密钥 10-50 个并发连接。如果您需要更多,可能需要专用节点。
为了减少连接数,您可以使用带有过滤器的单个订阅,而不是单独订阅每个账户。例如,使用 programSubscribe 监控程序的所有账户,而不是订阅每个地址。
以下是一个 Node.js 片段,它打开到 OnFinality 公共端点的 WebSocket 连接并订阅时隙更新:
const WebSocket = require('ws');
const ws = new WebSocket('wss://solana.api.onfinality.io/public-ws');
ws.on('open', () => {
ws.send(JSON.stringify({
jsonrpc: '2.0',
id: 1,
method: 'slotSubscribe'
}));
});
ws.on('message', (data) => {
console.log(data.toString());
});
请记住,每个订阅都会消耗连接限制中的一个槽位。监控您的使用情况以避免意外断开。
何时选择专用 Solana 节点
共享 RPC 端点对于开发和低流量应用程序具有成本效益,但它们有固有限制。如果您遇到以下任何情况,请考虑专用节点:
- 您经常遇到 HTTP 429 或 WebSocket 断开。
- 您的应用程序需要一致的低延迟,例如交易或游戏。
- 您需要运行重型分析或索引大量历史数据。
- 您希望避免可能降低共享端点性能的嘈杂邻居。
OnFinality 的 专用节点服务 提供具有专用资源的 Solana 节点,让您完全控制速率限制和性能。您还可以使用它访问存档数据或运行自定义配置。
常见速率限制错误及其调试方法
当您超过速率限制时,通常会看到以下响应之一:
- HTTP 429 Too Many Requests:提供商正在限制您的请求。检查您当前的使用情况与套餐限制。
- JSON-RPC 错误 -32005:这是 Solana 特定的错误,表示您已超过节点的速率限制。它通常包含
retryAfter字段。 - WebSocket 关闭代码 1008:服务器因策略违规而关闭连接,通常是因为您超过了订阅限制。
要调试,请在 RPC 客户端中添加日志记录以捕获响应头和错误代码。许多提供商包含诸如 x-ratelimit-remaining 之类的头,帮助您跟踪使用情况。
关键要点
- 速率限制模型各不相同:RPS 上限、计算单元计量和 WebSocket 连接限制是最常见的。
- 将提供商的模型与您的工作负载匹配:突发型应用需要余量,重型分析需要存档访问,实时应用需要 WebSocket 容量。
- 在承诺套餐之前,始终使用真实的请求组合测试速率限制。
- 专用节点消除共享节流,并为要求苛刻的应用程序提供可预测的性能。
- 查看每个提供商的最新文档,因为限制和定价经常变化。
常见问题解答
Solana RPC 提供商的典型免费套餐速率限制是多少?
免费套餐通常允许每秒 10 到 50 个请求,WebSocket 连接限制较低。一些提供商还限制每日请求数。这些限制足以用于开发和轻度测试,但不适用于生产流量。
如何知道我是否需要专用 Solana 节点?
如果您持续达到速率限制,需要低延迟用于时间敏感的应用程序,或需要存档数据访问,那么专用节点值得投资。它提供隔离资源并消除共享端点的可变性。
我可以在多台服务器上使用同一个 API 密钥吗?
大多数提供商允许这样做,但速率限制可能按 IP 地址或按密钥应用。如果您有多台服务器,请检查提供商是汇总使用量还是按 IP 应用限制。在分布式设置中,基于密钥的限制更易于管理。
WebSocket 订阅是否与 HTTP 请求计入相同的速率限制?
通常不会。提供商通常对 WebSocket 连接和订阅有单独的限制。您应该监控两者以避免意外节流。
如何监控我的 RPC 使用情况?
许多提供商提供仪表板,您可以在其中查看请求计数、错误率和当前限制。您还可以添加客户端日志记录以跟踪响应代码和头。对于全面的方法,请考虑使用监控服务来跟踪 RPC 健康和延迟。
有关 Solana RPC 端点和套餐的更多详细信息,请访问 Solana 网络页面 和 RPC 定价页面。