摘要
专用 Solana 节点为你的应用提供专属的 RPC 容量,而不是共享公共资源池。当你依赖高请求量、WebSocket 订阅或持续访问账户和程序数据时,这一点尤为重要。本文介绍如何评估提供专用节点的 Solana RPC 提供商、在承诺前需要测试哪些内容,以及如何规划故障转移。OnFinality 提供 Solana RPC API 访问和专用节点基础设施,因此你可以从共享端点开始,随着工作负载增长迁移到专用节点。
当 RPC 成为瓶颈时,Solana 应用会以特定方式失败。交易模拟返回过时的账户数据,WebSocket 订阅静默停止推送,或者 getProgramAccounts 在突发流量期间超时。如果你正在寻找提供专用节点的最佳 Solana RPC 提供商,你很可能已经过了共享公共端点就足够的阶段,你需要知道哪些提供商真正提供隔离容量以及如何验证。
本页面是一份实用的评估指南。它涵盖专用 Solana 节点带来的变化、如何比较提供商、签约前需要测试什么,以及如何在不破坏生产环境的情况下迁移。OnFinality 提供 Solana RPC API 访问和专用节点基础设施,因此示例在相关处会使用它,但这些标准适用于你入围的任何提供商。
专用 Solana 节点的提供商评估矩阵
使用此表在真正影响生产 Solana 工作负载的方面比较提供商。为你考虑的每个提供商对每一行评分,然后根据你的流量模式对行进行加权。
| 评估领域 | 向提供商询问什么 | 为什么影响你的应用 |
|---|---|---|
| 专用容量模型 | 节点是专属于你,还是共享集群中的保留切片? | 决定在拥塞期间是否可能出现吵闹邻居效应 |
| 方法覆盖 | 专用计划是否支持 getProgramAccounts、getSignaturesForAddress 和 simulateTransaction? | 许多 Solana 应用依赖这些进行索引和预检 |
| WebSocket 支持 | 支持多少并发订阅,重连时会发生什么? | 交易机器人、仪表盘和钱包依赖 accountSubscribe 和 logsSubscribe |
| 归档和历史数据 | 可以查询多久之前的交易和账户历史? | 回填、分析和审计工具需要更早的 slot |
| 速率和突发行为 | 每秒请求数和突发上限是多少? | 尖峰工作负载会触及固定费率计划隐藏的限制 |
| 故障转移选项 | 能否获得辅助端点或区域? | 当一个节点或区域降级时减少影响范围 |
| 可观测性 | 是否获得请求、错误和延迟指标? | 无法测量就无法调优 |
| 迁移路径 | 能否在不更改代码的情况下从共享开始并迁移到专用? | 降低从小规模开始的成本 |
OnFinality 属于专用节点类别:你可以从共享 Solana RPC API 开始,当工作负载证明合理时迁移到专用节点。本文的其余部分解释如何用证据而非营销声明来填写每一行。
专用 Solana 节点实际改变了什么
共享 RPC 端点在许多用户之间汇集容量。这高效且便宜,对于低流量应用通常是正确选择。专用节点为你的工作负载提供自己的 RPC 进程和资源,这改变了三件事。
首先,容量变得可预测。你的请求不会与其他租户竞争同一个连接池,因此吞吐量更接近你购买的计划。其次,你可以根据访问模式调优节点,例如如果你依赖 getProgramAccounts,可以启用更广泛的账户索引。第三,你获得更清晰的运维边界:当出现降级时,你可以判断是你的流量还是提供商的基础设施。
专用节点不能做的是消除 Solana 自身的限制。Slot 时间、承诺级别和集群拥塞是网络的属性,而不是提供商的。专用节点帮助你保持在自己的预算内;它不会让链更快。
暴露提供商质量的 Solana RPC 方法
大多数提供商在 getSlot 和 getBalance 上看起来相同。差异出现在更重的方法上。评估提供商时,专门测试这些:
- 带过滤器的
getProgramAccounts,这很昂贵且在共享层通常受限。 - 在繁忙地址上的
getSignaturesForAddress,这会压力测试历史查询。 - 负载下的
simulateTransaction,这对钱包和机器人的预检至关重要。 - 带重试行为的
sendTransaction,你想知道提供商如何处理 blockhash 过期。 - 通过 WebSocket 的
accountSubscribe和logsSubscribe,其中重连语义很重要。
如果提供商无法告诉你专用计划支持其中哪些,将其视为缺口。你还可以查看 Solana 网络页面 了解 OnFinality 暴露的端点和传输细节。
在承诺前测试 Solana 端点
你可以在一个下午了解很多关于 Solana 端点的信息。从简单的 JSON-RPC 调用开始,确认端点响应并报告最近的 slot。
curl https://solana.api.onfinality.io/public \
-X POST -H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "getSlot",
"params": [{"commitment": "confirmed"}]
}'
然后运行反映你真实工作负载的更重调用。对于索引器,可能是带数据大小过滤器的 getProgramAccounts。对于钱包,可能是对代表性交易进行 simulateTransaction。
curl https://solana.api.onfinality.io/public \
-X POST -H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 2,
"method": "getSignaturesForAddress",
"params": ["<ADDRESS>", {"limit": 100}]
}'
对于 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: "accountSubscribe",
params: ["<ACCOUNT_PUBKEY>", { encoding: "base64", commitment: "confirmed" }]
}));
});
ws.on("message", (data) => console.log(data.toString()));
ws.on("close", () => console.log("closed, plan reconnect with backoff"));
在这些测试期间跟踪错误率和延迟百分位数,而不仅仅是成功或失败。平均速度快但在突发时飙升的提供商对生产来说比数字更稳定的提供商更差。
生产就绪检查清单
在将真实流量迁移到专用 Solana 节点之前,确认以下每一项:
- 你的客户端库配置了主端点和备用端点。
- 每次调用中承诺级别都是明确的,而不是留给默认值。
- WebSocket 客户端实现带指数退避的重连和重新订阅。
- 你对错误率和订阅间隙有告警,而不仅仅是对 HTTP 状态。
- 你知道峰值时的预期每秒请求数,而不仅仅是平均值。
- 如果专用节点行为异常,你有回滚到共享端点的计划。
如果缺少任何一项,在迁移前修复它们。大多数 Solana RPC 事件是客户端配置问题,而不是提供商中断。
专用节点在哪些场景值得,哪些不值得
专用节点并不自动是正确答案。使用这个作为快速过滤器。
| 工作负载 | 共享 RPC 通常足够 | 专用节点值得评估 |
|---|---|---|
| 原型和测试网 | 是 | 否 |
| 低流量 dApp | 是 | 仅当你需要特定方法时 |
| 稳定流量的钱包 | 有时 | 是,用于预检和订阅 |
| 交易机器人和做市商 | 否 | 是,用于延迟和突发余量 |
| 索引器和分析 | 否 | 是,用于 getProgramAccounts 和历史 |
| 高流量后端 | 否 | 是,用于可预测容量 |
模式很简单:你的应用越依赖重方法、WebSocket 订阅或突发容量,专用节点就越值得其成本。如果你仍在第一列,留在共享端点,以后再考虑。
迁移检查点
从共享端点迁移到专用 Solana 节点不必是重写。将其视为一系列检查点。
- 在预发环境交换端点。 将预发环境指向专用端点,并运行完整测试套件,包括 WebSocket 路径。
- 影子流量。 将生产读取的副本发送到专用节点,并将响应和延迟与当前提供商进行比较。
- 部分切换。 先迁移一个服务或一个区域,保留旧端点作为备用,并观察一个完整流量周期的错误率。
- 带故障转移的完全切换。 将专用节点提升为主节点,并将共享端点配置为备份。
- 退役。 只有在经历至少一个高峰时段后,才移除旧提供商。
在每个检查点,确认承诺级别、重试逻辑和订阅处理仍按预期运行。如果你想要这种决策的更广泛框架,请参阅如何选择 RPC 提供商。
常见故障模式及如何发现
大多数 Solana RPC 问题属于几种可识别的模式。
- 过时读取。 你的应用以落后于预期的承诺级别读取账户数据。通过对齐读写中的承诺级别来修复。
- 订阅静默死亡。 WebSocket 关闭且客户端不重新订阅。通过显式重连逻辑和间隙检测来修复。
- Blockhash 过期。 交易使用旧 blockhash 构建并在提交时失败。通过在发送时间附近获取新 blockhash 来修复。
- 速率限制突发。 批处理作业或回填超过计划上限。通过限制批处理作业或将其移至专用节点来修复。
- 方法不支持。 重方法在测试中有效,但在你购买的计划中受限。通过在迁移前确认方法覆盖来修复。
对于这些中的每一个,修复通常在你的客户端代码或计划选择中,而不是链本身。
关键要点
- 专用 Solana 节点为你的工作负载提供隔离容量,这对重方法、WebSocket 订阅和突发流量最重要。
- 在方法覆盖、WebSocket 限制、归档深度、突发行为、故障转移和可观测性方面比较提供商,而不仅仅是标题延迟。
- 使用你的应用实际使用的方法进行测试,包括
getProgramAccounts、simulateTransaction和accountSubscribe。 - 按检查点迁移:预发、影子流量、部分切换、带故障转移的完全切换,然后退役。
- 即使迁移到专用节点后,也保留共享端点作为备用。
- OnFinality 提供 Solana RPC API 访问和专用节点基础设施;你可以从共享开始并扩展到专用。查看 RPC 定价 和 支持的 RPC 网络 了解当前选项。
常见问题
小型应用需要专用 Solana 节点吗?
通常不需要。共享 Solana RPC 端点能很好地处理低到中等流量。当你依赖重方法、WebSocket 订阅或共享层限制的突发容量时,迁移到专用节点。
如何知道提供商的专用节点是否真正专用?
直接询问节点是专属于你,还是共享集群中的保留切片,并询问在拥塞期间适用什么隔离保证。无法清楚回答的提供商值得降低优先级。
切换 Solana RPC 提供商时最大的风险是什么?
客户端配置。承诺级别、重试逻辑和 WebSocket 重连处理是迁移期间事件的常见来源。在切换生产之前,在预发环境中测试这些。
我可以使用 OnFinality 进行 Solana RPC 吗?
可以。OnFinality 通过 HTTP 和 WebSocket 提供 Solana RPC API 访问,以及专用节点选项。从 Solana 网络页面 和 专用节点页面 开始,看看什么适合你的工作负载。