摘要
通过速率限制、使用层级和请求类型来比较 Solana RPC 提供商。了解在选择提供商之前需要检查什么,以及如何将你的工作负载与合适的计划相匹配。
Solana 应用程序依赖 RPC 提供商来完成从读取账户状态到提交交易的所有操作。当你比较提供商时,速率限制和使用层级往往比原始延迟或正常运行时间更重要。一个在纸面上看起来慷慨的计划,如果限制是按每秒请求数而不是计算单元来衡量的,或者如果像 getProgramAccounts 这样的重方法计入单独的配额,那么它仍然可能限制你的工作负载。
本文介绍了你将遇到的速率限制模型、提供商发布的使用层级,以及在你做出承诺之前要问的问题。目标是帮助你根据流量特征选择合适的提供商计划,而不是猜测。
决策指南:将你的工作负载与提供商层级匹配
在比较价格表之前,先定义你的工作负载。Solana RPC 流量并不统一。一个简单的 NFT 铸造网站、一个 DEX 聚合器和一个验证器监控机器人对端点的需求截然不同。
| 工作负载 | 典型请求模式 | 最需要关注的点 |
|---|---|---|
| 轻量 dApp(读取余额、偶尔交易) | 低 QPS、突发性 | 免费层级或低成本共享计划 |
| 交易机器人或做市商 | 高 QPS、低延迟、WebSocket 订阅 | 专用节点、高速率限制、低延迟 |
| 数据索引器或分析 | 大量 getProgramAccounts、getSignaturesForAddress | 计算单元限制、归档数据、专用容量 |
| NFT 市场 | 混合读写、偶尔峰值 | 可预测的速率限制、突发处理 |
一旦你了解了你的工作负载,向每个提供商提出三个问题:
- 速率限制是多少? 是每秒、每分钟还是每天的请求数?是按 IP 还是按 API 密钥?
- 限制是如何执行的? HTTP 和 WebSocket 是否有单独的限制?重方法是否计费更多?
- 超过限制时会发生什么? 你会收到 HTTP 429 响应、连接被断开,还是被静默限流?
对于生产应用程序,你需要对这三个问题都有清晰的答案。如果提供商无法解释其速率限制模型,那是一个危险信号。
Solana RPC 提供商如何构建速率限制
大多数提供商使用以下三种模型之一:
- 每秒请求数(RPS):对每秒请求数的简单上限。易于理解,但未考虑每个请求的成本。
- 计算单元(CU):每个方法根据处理成本有一个权重。
getBalance可能花费 1 CU,而getProgramAccounts可能花费 100 CU。你的限制是每秒或每天 CU 预算。 - 每日请求配额:每天请求总数,通常与每秒突发限制结合。
Solana 的 RPC 方法成本差异很大。getLatestBlockhash 很便宜,但带有大数据切片的 getProgramAccounts 可能对节点来说很昂贵。使用基于 CU 限制的提供商能更好地保护其基础设施,但开发者可能更难预测。
WebSocket 订阅通常单独限制。一些提供商限制并发连接数,而另一些则限制每个连接的订阅数。如果你的应用依赖实时更新,请仔细检查这些限制。
使用层级:提供商通常提供什么
大多数 Solana RPC 提供商提供免费层级和多个付费层级。免费层级通常足以用于开发和小型项目,但通常有严格的限制,使其不适合生产环境。
常见的层级结构包括:
- 免费层级:低 RPS(例如 5-10)、每日请求有限、无 WebSocket 或归档访问。
- 按量付费:按使用量付费,每百万请求有基本费率。适合流量波动的情况。
- 月度订阅:每月固定请求数的固定价格,超出部分额外收费。对于稳定流量可预测。
- 专用节点:你获得一个私有端点,没有共享速率限制。该节点专用于你的流量,因此你可以维持高吞吐量而不会遇到共享限制。
OnFinality 同时提供共享 RPC 访问和专用节点。共享服务为开发提供公共端点,而专用节点为你提供具有自己容量的私有端点。对于持续流量的生产工作负载,专用节点通常是正确的选择。
评估提供商时要比较什么
当你比较 Solana RPC 提供商时,不要只看标题速率限制。考虑以下因素:
请求类型和方法成本
一些提供商对所有方法一视同仁,而另一些则对昂贵方法加权。如果你的应用大量使用 getProgramAccounts,那么对其加权的提供商可能比不加权的更昂贵。索取方法权重列表或成本计算器。
WebSocket 支持
Solana 应用通常使用 WebSocket 订阅进行实时账户更新。检查提供商是否支持 WebSocket、你可以拥有多少并发连接,以及订阅是否计入速率限制。
归档数据和历史访问
如果你需要历史状态或交易,你需要一个归档节点。并非所有提供商都提供归档数据,即使提供也可能收取额外费用。检查归档是完整还是部分,以及可以追溯多远。
地理分布
延迟对于交易和其他时间敏感的应用很重要。在多个区域拥有端点的提供商可以通过从附近位置提供请求来减少延迟。检查提供商的节点位于何处,以及你是否可以选择区域。
故障转移和冗余
如果提供商的端点宕机,你能故障转移到另一个提供商吗?一些提供商提供多个端点或自动故障转移。对于生产应用,单点故障是有风险的。
速率限制错误及如何处理
当你超过速率限制时,通常会看到 HTTP 429 响应。响应可能包含 Retry-After 头,指示等待多长时间。你的客户端应通过退避和重试来优雅地处理此问题。
以下是在 JavaScript 中处理速率限制的简单示例:
async function rpcCall(url, body, retries = 3) {
for (let i = 0; i < retries; i++) {
const response = await fetch(url, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(body)
});
if (response.status === 429) {
const retryAfter = response.headers.get('Retry-After') || 1;
await new Promise(resolve => setTimeout(resolve, retryAfter * 1000));
continue;
}
return response.json();
}
throw new Error('Rate limit exceeded after retries');
}
对于 WebSocket 连接,速率限制可能表现为连接断开或消息丢失。实现具有指数退避的重连逻辑。
将 OnFinality 与其他 Solana RPC 提供商进行比较
OnFinality 通过共享和专用选项提供 Solana RPC 访问。共享端点适用于开发和轻度生产使用,而专用节点为高吞吐量工作负载提供专用容量。
| 提供商 | 速率限制模型 | 免费层级 | 专用节点 | WebSocket | 归档 |
|---|---|---|---|---|---|
| OnFinality | 共享端点按秒和按天限制;专用节点无共享限制 | 是 | 是 | 是 | 是(专用节点) |
| 提供商 A | 基于 RPS | 是 | 是 | 是 | 额外费用 |
| 提供商 B | 基于 CU | 是 | 否 | 有限 | 否 |
| 提供商 C | 每日配额 | 是 | 是 | 是 | 是 |
此表仅供说明。请务必查看提供商当前文档以获取确切限制和定价。OnFinality 的 RPC 定价 页面列出了当前计划,支持的网络 页面显示了哪些网络可用。
迁移清单:切换 Solana RPC 提供商
如果你要切换提供商,请遵循此清单以避免停机:
- 审计当前使用情况:测量一周内的 RPS、每日请求和 WebSocket 连接。
- 识别重方法:使用日志查看哪些方法消耗了大部分请求。
- 测试新提供商:对新端点运行负载测试,以验证其能处理你的流量。
- 更新配置:更改应用中的 RPC URL。例如,在 Solana web3.js 连接中:
import { Connection } from '@solana/web3.js';
const connection = new Connection('https://solana.api.onfinality.io/public', {
wsEndpoint: 'wss://solana.api.onfinality.io/public-ws',
commitment: 'confirmed'
});
- 监控错误:在过渡期间注意 429 响应和 WebSocket 断开。
- 保留旧提供商作为后备:在应用中配置故障转移,以便在新提供商出现问题时切换。
关键要点
- 速率限制因提供商而异,可能基于每秒请求数、计算单元或每日配额。
- 将工作负载与层级匹配:轻量应用可以使用免费层级,但生产应用需要可预测的限制。
- WebSocket 和归档访问通常单独限制;在承诺之前检查这些限制。
- OnFinality 提供共享和专用 Solana RPC 选项,具有用于开发的公共端点和用于高吞吐量工作负载的专用节点。
- 在切换之前,始终使用实际流量模式测试新提供商。
常见问题解答
Solana RPC 的典型免费层级速率限制是多少?
免费层级通常允许每秒 5-10 个请求和有限的每日请求数。它们适用于开发,但不适用于生产流量。
如何知道我是否需要专用的 Solana 节点?
如果你在共享计划上持续达到速率限制,或者你需要低延迟和高吞吐量用于交易或索引,专用节点可提供专用容量,而不会受到共享限流。
OnFinality 是否支持 Solana 的 WebSocket?
是的,OnFinality 为 Solana 提供 WebSocket 端点。查看 Solana 网络页面 获取最新详细信息。
我可以将 OnFinality 的公共 Solana 端点用于生产吗?
公共端点是共享的且有限速,因此最适合开发和测试。对于生产,请考虑专用节点或具有更高限制的付费共享计划。
如果我收到 HTTP 429 错误,该怎么办?
实现具有指数退避的重试逻辑,并遵守 Retry-After 头。如果你持续达到限制,请升级计划或迁移到专用节点。