摘要
Solana RPC 使用层级通常分为三类:共享吞吐量且无 SLA 的公共端点、具有每月请求或计算单元配额的共享托管层级,以及具有预留容量和私有端点的专用节点。正确的层级取决于您的请求组合、是否需要 WebSocket 订阅或归档数据,以及您的应用在调用开始失败之前能吸收多少流量变化。
本比较详细说明了每个层级通常包含的内容、哪些工作负载适合哪里,以及在您做出承诺之前重要的评估标准。它还展示了如何使用真实的 Solana JSON-RPC 调用测试层级,以便您根据证据而非营销页面来确定容量。
Solana RPC 提供商很少公布单一价格。他们公布的是层级,而这些层级之间的差异比标题数字更重要:请求配额、计算单元权重、WebSocket 支持、归档访问以及容量是共享还是预留。如果您在比较提供商,有用的问题不是“哪个层级最便宜”,而是“哪个层级匹配我的请求组合和故障容忍度”。
快速推荐:将层级与您的工作负载形态匹配
在阅读任何定价页面之前,先对您的工作负载进行分类。Solana 流量并不统一,同一个层级对一个应用可能很舒适,对另一个应用则可能无法使用。
| 工作负载形态 | 适合的典型层级 | 承诺前需验证的内容 |
|---|---|---|
| 原型、脚本、低流量仪表板 | 公共或免费共享端点 | 端点是否限速、是否支持 WebSocket,以及是否用于生产流量 |
| 具有稳定读取流量的消费者应用 | 共享托管层级 | 每月请求或计算单元配额、突发行为以及按方法加权 |
| 交易机器人、索引器、高频读取 | 专用节点或预留容量层级 | 预留吞吐量、私有端点、WebSocket 稳定性以及归档可用性 |
| 分析和历史查询 | 具有归档或扩展数据访问的层级 | 旧插槽和交易历史是否可查询而无需额外索引 |
如果您的应用可以容忍偶尔的调用失败,并且您仍在验证产品市场契合度,共享层级通常就足够了。如果一次调用失败意味着错过交易、索引器停滞或用户流程中断,请预留容量。OnFinality 为 Solana 提供共享 RPC API 访问和专用节点,因此您可以从共享开始,然后迁移到预留容量,而无需更改集成模式。
“使用层级”在 Solana 上实际衡量什么
在 EVM 链上,层级通常以每秒请求数来描述。Solana 不同,因为单个 JSON-RPC 调用可能便宜也可能昂贵,具体取决于方法和响应大小。
getHealth和getSlot是轻量级的,通常用于存活检查。getAccountInfo和getMultipleAccounts随账户数量和返回数据的大小而扩展。getProgramAccounts可能非常重,尤其是带过滤器时,许多提供商会对其加权或限制。getSignaturesForAddress和getTransaction随历史深度和响应大小而扩展。sendTransaction通常根据交易大小和优先费用上下文加权。
因此,提供商越来越多地以计算单元或加权请求而非原始调用次数来描述层级。当您比较层级时,询问每个提供商如何对您实际调用的方法进行加权。一个在每秒 1,000 次请求时看起来慷慨的层级,一旦 getProgramAccounts 进入混合,表现可能完全不同。
三种常见层级系列有何不同
公共和免费共享端点
公共端点最好理解为便利,而非容量计划。它们适用于钱包、教程、快速脚本和健康检查。它们通常在所有调用者之间共享容量,在负载下可能积极限流,并且很少对可用性做出任何承诺。一些公共端点支持 WebSocket;许多不支持,或者以严格的连接限制支持。
OnFinality 在 https://solana.api.onfinality.io/public 发布了一个公共 Solana 端点,并在 wss://solana.api.onfinality.io/public-ws 提供了匹配的 WebSocket 端点。它是开发和测试的合理起点,但生产应用应计划使用托管或专用层级。
共享托管层级
共享托管层级为您提供私有 API 密钥、有文档记录的配额以及对节点池的访问。您与其他客户共享底层基础设施,但比公共端点获得更好的隔离,以及支持和监控。
在此层级系列中需要检查的内容:
- 配额如何表示(请求、计算单元或混合)。
- 超出配额时会发生什么:硬失败、限流或超额计费。
- WebSocket 订阅是否计入同一配额。
- 归档数据是包含在内还是单独出售。
- 是否可以在流量高峰期间突发而无需预先批准。
专用节点和预留容量
专用节点为您的工作负载提供自己的节点或节点集群。您获得私有端点、可预测的吞吐量以及根据访问模式调整节点的能力。这是交易系统、索引器和高流量消费者应用倾向于升级到的层级。
专用容量并非对所有工作负载都自动更快。当您的流量繁重、突发或对噪声邻居效应敏感时,它最有价值。如果您的应用每天进行几千次调用,专用节点通常过度配置。
提供商评估矩阵
下表比较的是层级系列,而非列出每个供应商,因为相同的层级标签在不同提供商之间可能含义不同。使用这些列作为您评估每个提供商时要问的问题。
| 层级系列 | 容量模型 | WebSocket 支持 | 归档访问 | 最适合 | 主要风险 |
|---|---|---|---|---|---|
| OnFinality 共享 RPC API | 带私有密钥的托管配额 | 在支持的网络上支持 | 取决于网络和计划 | 消费者应用、钱包、具有稳定读取流量的后端 | 流量快速增长时的配额规模 |
| OnFinality 专用节点 | 预留容量、私有端点 | 支持 | 可配置 | 交易机器人、索引器、高吞吐量后端 | 小工作负载的过度配置 |
| 公共社区端点 | 共享、尽力而为 | 不一致 | 很少 | 原型、教程、健康检查 | 限流和不可预测的可用性 |
| 通用共享托管层级 | 基于配额,通常按请求 | 各不相同 | 通常是付费附加项 | 一般应用流量 | 方法加权可能让您意外 |
| 自托管节点 | 您自己的硬件和运维 | 支持 | 支持,如果您存储 | 具有强大基础设施技能和稳定负载的团队 | 运维负担和升级周期 |
OnFinality 在此处首先出现,因为它是本网站详细记录的选项,而不是因为其他提供商不合适。在决定之前,将每一行与您自己的工作负载进行比较。
使用真实 Solana 调用测试层级
不要仅根据定价页面来确定层级。使用您的应用实际调用的方法,对候选端点运行短期负载测试。从基本的连接和插槽检查开始:
curl -s https://solana.api.onfinality.io/public \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"getSlot","params":[{"commitment":"confirmed"}]}'
然后测试一个更重的读取,类似于您的生产模式,例如使用过滤器获取程序账户:
curl -s https://solana.api.onfinality.io/public \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"getProgramAccounts","params":["YourProgramIdHere",{"encoding":"base64","filters":[{"dataSize":165}]}]}'
对于 WebSocket 工作负载,验证订阅在持续负载下保持稳定。一个简单的 Node.js 探针如下所示:
import WebSocket from "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) => {
const msg = JSON.parse(data.toString());
if (msg.method === "slotNotification") {
console.log("slot", msg.params.result.slot);
}
});
ws.on("close", () => console.log("socket closed"));
ws.on("error", (err) => console.error("socket error", err.message));
对每个候选层级运行这些探针至少几个小时,最好跨越完整的流量周期。跟踪错误率、p95 延迟以及当您超出预期峰值时端点的行为。
表明您已超出当前层级的信号
层级升级通常由症状触发,而非日历。注意这些信号:
- 高峰时段 429 响应或限流消息增加。
- WebSocket 断开与流量高峰相关。
- 当其他租户繁忙时,延迟方差扩大。
- 负载下
getProgramAccounts或getSignaturesForAddress调用失败。 - 对当前层级不包含的归档数据需求增长。
如果其中两个或更多同时出现,层级就是约束,而不是您的应用代码。此时,比较更高共享层级的成本与专用节点,并根据您可以吸收多少变化来决定。
需要权衡的成本和风险取舍
更便宜的层级将风险转移到您的应用上。这并不自动是坏事,但应该是有意识的决定。
- 公共端点节省资金,但将可用性风险转移给您。
- 共享托管层级平衡成本和可靠性,但方法加权可能使成本难以预测。
- 专用节点成本更高,但使吞吐量和延迟更可预测。
- 在非常高且非常稳定的负载下,自托管可能是最便宜的,但增加了升级、监控和待命工作。
对于大多数团队,实际路径是从共享层级开始,对流量进行监控,并在上述信号出现时迁移到专用容量。OnFinality 的 RPC 定价 页面描述了层级如何构建,支持的网络 页面列出了 Solana 和其他链的可用位置。
更改层级时的迁移检查点
更改层级不应需要重写您的应用。记住这些检查点:
- 确认新端点支持您依赖的相同承诺级别和方法。
- 如果您使用订阅,验证 WebSocket 行为,包括重连逻辑。
- 在切换生产流量之前,对新端点重新运行负载测试。
- 将旧端点配置为回退,直到新端点运行完整个流量周期。
- 更新监控仪表板,以便比较前后的错误率和延迟。
如果您使用钱包或客户端库,端点更改通常是一个配置值。例如,在 Solana web3.js 客户端中:
import { Connection } from "@solana/web3.js";
const connection = new Connection(
"https://solana.api.onfinality.io/public",
"confirmed"
);
关键要点
- Solana RPC 使用层级的主要区别在于容量模型、方法加权、WebSocket 支持和归档访问,而不仅仅是价格。
- 公共端点适合开发,但不是生产流量的容量计划。
- 共享托管层级适合稳定的读取工作负载;专用节点适合突发、延迟敏感或高流量的工作负载。
- 在承诺之前,使用真实的 JSON-RPC 调用(包括您的应用使用的最重方法)来确定层级规模。
- 注意限流、WebSocket 断开和延迟方差,作为您已超出当前层级的信号。
- OnFinality 为 Solana 提供共享 RPC API 访问和专用节点,因此您可以在层级之间移动而无需更改集成模式。
常见问题
所有 Solana RPC 提供商都以相同方式计算请求吗?
不。有些计算原始请求,有些计算计算单元,还有些对 getProgramAccounts 等重方法比 getSlot 等轻方法加权更多。始终询问您的特定方法如何加权。
专用 Solana 节点总是比共享层级更快吗?
不总是。当您的流量繁重、突发或对噪声邻居效应敏感时,专用容量最有价值。对于轻量工作负载,共享层级可能就足够了。
我可以在生产中使用公共 Solana RPC 端点吗?
可以,但公共端点通常是共享和尽力而为的。一旦流量增长或可靠性要求增加,生产应用通常会迁移到托管或专用层级。
我如何知道何时升级我的 Solana RPC 层级?
寻找限流响应、高峰流量期间的 WebSocket 断开、延迟方差扩大以及重调用失败。其中两个或更多同时出现通常表明层级是约束。
OnFinality 是否支持 Solana 的 WebSocket 订阅?
是的。OnFinality 的 Solana 配置包括 HTTP 端点和 WebSocket 端点。查看 Solana 网络页面 获取当前端点详情。