摘要
比较 Solana RPC 提供商的“速率”意味着不能只看单一的每秒请求数。你需要区分请求速率限制、计算单元预算、响应负载上限,以及每个提供商如何处理突发流量、WebSocket 订阅和归档或历史调用。两个提供商可能宣传相同的标称 RPS,但在真实的 Solana 流量下表现截然不同。
本文提供了一种可重复的方法来比较提供商:收集哪些指标、如何解读公布的限额、如何安全地测试它们,以及何时共享端点足够,何时专用节点更合适。OnFinality 提供 Solana RPC API 访问和专用节点基础设施,你可以根据相同的标准进行评估。
是的,你可以比较 Solana RPC 提供商的速率,但有用的比较不是单一数字。Solana 上的“速率”涵盖多个相互影响的限制:每秒请求数、每个请求消耗的计算单元、响应大小上限、并发 WebSocket 订阅,以及提供商如何处理突发流量和历史调用。一个在某方面看起来慷慨的提供商可能在另一方面限制你。
本页向你展示如何根据真正影响生产应用的指标来比较提供商,如何解读公布的限额而不被误导,以及如何安全地测试限制。它还解释了何时共享 RPC API 是合适的,何时值得迁移到专用 Solana 节点。你可以使用相同的标准,将 OnFinality 的 Solana RPC API 和专用节点选项与任何其他提供商一起评估。
快速推荐:哪种速率模型适合你的工作负载
在比较供应商之前,先对你的工作负载进行分类。正确的提供商更多地取决于你的流量形态,而不是标称的 RPS 数字。
| 工作负载形态 | 什么会给端点带来压力 | 通常适合的提供商类型 |
|---|---|---|
| 钱包或 dApp 前端,中等流量 | getLatestBlockhash、sendTransaction、getAccountInfo 的突发 | 具有突发余量的共享 RPC API |
| 索引器或分析任务 | 持续的 getProgramAccounts、getSignaturesForAddress、大响应 | 专用节点或支持归档的计划 |
| 交易机器人或清算人 | 低延迟的 sendTransaction、频繁的 slot 读取 | 靠近你应用的专用节点、WebSocket 订阅 |
| NFT 铸造或空投 | 急剧峰值、大量并发写入 | 专用节点加上你侧的排队 |
| 开发和 CI | 偶尔调用,无 SLA 需求 | 共享 RPC API 或用于测试的公共端点 |
如果你的应用是突发性的但不是持续的,具有明确突发行为的共享 RPC API 通常就足够了。如果你运行持续的高容量读取或需要可预测的延迟,专用节点可以消除共享池变量。你可以在 RPC 定价 页面比较计划,并在 支持的 RPC 网络 上查看覆盖范围。
真正重要的五个速率维度
当有人问你是否可以比较 Solana RPC 提供商的“速率”时,他们通常指的是以下五件事之一。比较所有五个,而不仅仅是第一个。
- 请求速率(RPS 或 RPM)。 端点在返回 HTTP 429 或 JSON-RPC 错误之前接受的每秒或每分钟调用次数。这是大多数提供商公布的数字。
- 每个请求的计算单元。 Solana 按指令收取计算单元,一些提供商按计算量而非原始调用次数计费。一个繁重的
getProgramAccounts调用可能比数百个轻量getAccountInfo调用花费更多。 - 响应大小和负载上限。 即使你的请求速率很低,大型账户扫描或交易历史也可能触及负载限制。
- 并发和 WebSocket 订阅。 你可以同时保持多少个连接和
accountSubscribe或logsSubscribe流。 - 突发行为。 超出你计划的短时峰值是被吸收、排队还是直接拒绝。
一个 RPS 适中但计算和突发处理慷慨的提供商可能胜过 RPS 高但每次调用严格计量的提供商。这就是为什么单一的“速率”比较很少足够。
如何解读提供商公布的限额
公布的限额是起点,不是保证。阅读时请考虑以下问题:
- 限额是按秒、按分钟还是按计费周期表示的?
- 限额是按 API 密钥、按 IP 还是按项目应用的?
- 像
getProgramAccounts和getSignaturesForAddress这样的重型方法是否被区别计数? - WebSocket 订阅是否有单独的限制?
- 违反时会发生什么:硬拒绝、临时限流还是超额计费?
当提供商只公布一个数字时,假设其他维度在某个地方被强制执行,并直接询问支持。有关更广泛的框架,请参阅 如何选择 RPC 提供商。
在承诺之前安全地测试限制
你可以在不滥用端点的情况下测量真实行为。目标是找到你的工作负载开始降级的点,而不是猛击提供商。
从针对候选端点的小型脚本化探测开始。使用你自己的密钥,保持低并发,并逐渐增加。
# 探测请求速率并观察限流行为
for i in $(seq 1 20); do
curl -s -o /dev/null -w "%{http_code} %{time_total}s\n" \
-X POST https://solana.api.onfinality.io/public \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"getLatestBlockhash","params":[{"commitment":"confirmed"}]}'
done
注意三个信号:延迟上升、HTTP 429 响应和 JSON-RPC 错误代码。如果在遇到 429 之前延迟稳步攀升,那么端点比其公布的速率更早饱和。
对于 WebSocket 容量,打开少量订阅并观察是否有流被丢弃:
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",
params: []
}));
});
ws.on("message", (data) => {
const msg = JSON.parse(data.toString());
console.log("slot notification:", msg.params?.result?.slot ?? msg);
});
ws.on("close", (code) => console.log("closed:", code));
对每个候选端点运行相同的探测,并将结果记录在表格中。多次运行的一致性比任何单个峰值数字更重要。
Solana 速率比较的提供商评估矩阵
当你筛选提供商时,使用这样的矩阵。用你自己的测量结果填写,而不是营销文案。
| 评估领域 | 记录什么 | 为什么它改变你的决定 |
|---|---|---|
| 请求速率模型 | 每秒、每分钟、每个密钥 | 决定你如何分片或排队流量 |
| 重型方法处理 | 单独限制还是同一池 | 索引器的生死取决于 getProgramAccounts 行为 |
| 突发处理 | 吸收、排队或拒绝 | 铸造和空投峰值需要余量 |
| WebSocket 限制 | 允许的并发订阅数 | 实时应用依赖稳定的流 |
| 历史和归档访问 | 可用、额外费用或不存在 | 回填和分析需要旧 slot |
| 故障转移选项 | 多个区域或端点 | 降低单端点风险 |
| 可观测性 | 仪表板、日志、警报 | 你无法调整你看不到的东西 |
OnFinality 在这里排在第一位,因为它是本网站运营的选项:它提供具有 HTTP 和 WebSocket 传输的 Solana RPC API,以及为超出共享池的团队提供的专用节点基础设施。将其与你用于任何其他提供商的相同列进行比较。
共享 RPC API 与专用 Solana 节点
速率问题通常归结为关于容量的构建与购买决策。
当你的流量适中、突发或难以预测时,共享 RPC API 是正确的默认选择。你获得一个端点,按使用量或计划层级付费,提供商管理节点集群。权衡是你共享容量,因此你的有效上限取决于提供商如何隔离租户。
当你需要可预测的吞吐量、来自特定区域的低延迟、大量归档或跟踪式读取,或与其他租户流量隔离时,专用节点是正确的选择。权衡是成本和运营责任,尽管托管专用节点可以让节点本身不占用你的精力。
一个简单的规则:如果你的 429 率在请求量稳定的情况下上升,你已经超出了共享层级。如果你的延迟很好但账单不可预测,请重新审视你的计划形态。有关托管选项,请参阅 专用节点。
比较 Solana RPC 速率时的常见陷阱
- 在不同计量模型之间比较 RPS。 按计算量计费的提供商和按调用计费的提供商不能直接比较。
- 忽略 commitment 级别。
processed、confirmed和finalized具有不同的成本和延迟;用你实际部署的 commitment 进行测试。 - 从错误的区域进行基准测试。 网络距离主导延迟;从你的应用运行的地方进行测试。
- 忽视 WebSocket 波动。 重连风暴可能看起来像速率问题,而真正的问题是订阅处理。
- 将免费公共端点视为生产层级。 公共端点对测试和原型有用,但不适合持续负载。
监控你实际获得的速率
一旦你选择了提供商,对端点进行监控,以便在用户之前看到降级。跟踪请求延迟百分位数、429 计数、JSON-RPC 错误代码、WebSocket 重连频率和每个方法的调用量。定期进行轻量级探测可以为你提供一个基线,以便在任何提供商变更后进行比较。
async function probe(endpoint) {
const start = Date.now();
const res = await fetch(endpoint, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
jsonrpc: "2.0",
id: 1,
method: "getHealth",
params: []
})
});
return { status: res.status, ms: Date.now() - start };
}
setInterval(async () => {
console.log(await probe("https://solana.api.onfinality.io/public"));
}, 30000);
保持探测廉价且一致。价值在于趋势线,而不是任何单个样本。
关键要点
- Solana 上的“速率”是多维的:请求速率、计算单元、负载上限、并发和突发行为都很重要。
- 单个公布的 RPS 数字不足以比较提供商;询问重型方法和 WebSocket 如何计量。
- 用小型、渐进的探测测试候选端点,并记录延迟、429 和错误代码。
- 共享 RPC API 适合突发、中等流量;专用节点适合持续、延迟敏感或归档密集型工作负载。
- 对你选择的端点进行监控,以便及早发现限流和延迟漂移。
- 查看 RPC 定价 和 支持的 RPC 网络,将计划与你的工作负载匹配。
常见问题
我可以仅使用公布的 RPS 来比较 Solana RPC 提供商吗? 不。RPS 只是一个维度。计算单元计量、负载上限、WebSocket 限制和突发处理对实际工作负载通常更重要。
为什么两个具有相同 RPS 的提供商表现不同? 因为他们计量不同的东西,并以不同的方式隔离租户。按计算单元收费或在租户之间共享容量的提供商在负载下可能表现非常不同。
我如何知道何时从共享端点迁移到专用节点? 当你看到在请求量稳定时 429 或延迟上升,当你需要归档或大量历史读取,或者当你需要来自特定区域的可预测延迟时。
OnFinality 是否提供 Solana RPC 和专用节点? 是的。OnFinality 提供具有 HTTP 和 WebSocket 传输的 Solana RPC API,以及为需要更多控制的团队提供的专用节点基础设施。有关详细信息,请参阅 Solana 网络页面。
切换提供商后我应该监控什么? 延迟百分位数、429 计数、JSON-RPC 错误代码、WebSocket 重连频率和每个方法的调用量。将这些与切换前的基线进行比较。