摘要
专用 Solana RPC 节点为您的 dApp 提供对单个节点实例的独占访问,避免共享端点的“吵闹邻居”效应。需要评估的关键功能包括专用计算和带宽、可配置的速率限制、WebSocket 支持、归档访问和故障转移选项。本文解释了这些功能在实践中的含义,以及如何为生产工作负载选择正确的设置。
快速决策指南:何时需要专用 Solana 节点?
如果您的应用程序发送持续的交易流、订阅实时账户更新,或运行扫描大范围账本的分析,共享公共端点最终将成为瓶颈。专用 Solana RPC 节点为您提供具有可预测性能和可配置访问的私有实例。在承诺之前,请确定以下哪种场景符合您的工作负载:
- 高交易量:您需要每秒发送大量交易,而不会遇到共享速率限制。
- 实时数据:您依赖 WebSocket 订阅来获取账户或程序更新。
- 历史查询:您需要
getSignaturesForAddress或getTransaction来查询较旧的槽位,这需要归档数据。 - 合规或隐私:您希望避免与其他用户共享 IP 地址或请求模式。
如果这些情况中的任何一种适用,则值得评估专用节点。对于低容量开发或测试,共享端点可能就足够了。OnFinality 提供共享和专用选项;您可以在 RPC 定价 上比较计划,并在 支持的 RPC 网络 上查看受支持的网络。
“专用”对 Solana RPC 意味着什么?
专用 Solana RPC 节点是您的项目独占使用的单个节点实例。与数百个应用程序访问同一节点的共享端点不同,专用节点为您提供:
- 隔离的计算和带宽:没有吵闹的邻居竞争 CPU、内存或网络。
- 自定义速率限制:您可以设置符合应用程序需求的限制,而不是一刀切的共享限制。
- 直接 WebSocket 连接:订阅账户和程序更新,无需与其他用户多路复用。
- 访问节点配置:某些提供商允许您调整节点设置,例如启用归档模式或调整快照间隔。
专用节点并非灵丹妙药。它们仍然需要客户端正确处理速率限制和重试。但它们消除了共享基础设施带来的不可预测性。
比较专用 Solana RPC 提供商的关键功能
在评估提供商时,不要只看标价。以下功能决定了专用节点是否真正满足您的生产需求。
| 功能 | 检查内容 | 重要性 |
|---|---|---|
| 速率限制 | 限制是按秒、按分钟还是按天?可以提高吗? | 防止流量高峰期间的限流。 |
| WebSocket 支持 | 是否提供 wss?订阅稳定吗? | 实时应用需要持久连接。 |
| 归档数据 | 节点是否存储历史状态?回溯多远? | 需要用于 getTransaction 和 getSignaturesForAddress 查询。 |
| 故障转移 | 提供商是否提供自动故障转移到备份节点? | 确保主节点故障时的可用性。 |
| 地理位置 | 节点托管在哪里? | 延迟对全球用户很重要。 |
| 支持 | 是否有专门的支持渠道? | 有助于在生产中快速解决问题。 |
OnFinality 的专用节点专为生产工作负载而设计。您可以通过 专用节点服务 请求专用节点,并根据您的需求进行配置。
如何连接到专用 Solana RPC 节点
一旦您拥有专用节点,您将收到一个 HTTP URL 和一个 WebSocket URL。OnFinality 公共 Solana 端点为 HTTP 的 https://solana.api.onfinality.io/public 和 WebSocket 的 wss://solana.api.onfinality.io/public-ws。您的专用端点将类似,但仅对您的项目私有。
以下是一个基本的 curl 示例,用于检查节点健康状况并获取当前槽位:
curl https://solana.api.onfinality.io/public -X POST -H "Content-Type: application/json" -d '
{
"jsonrpc": "2.0",
"id": 1,
"method": "getHealth"
}
'
对于专用节点,请将 URL 替换为您的私有端点。您还可以使用 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: 'accountSubscribe',
params: [
'9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin',
{ encoding: 'base64', commitment: 'finalized' }
]
}));
});
ws.on('message', (data) => {
console.log(data.toString());
});
速率限制和限流:预期情况
专用节点通常比共享端点具有更高的速率限制,但并非无限。提供商实施限制以保护节点免受滥用。常见限制包括每秒请求数 (RPS) 和并发 WebSocket 连接数。
当您超过速率限制时,节点返回 429 HTTP 状态或 JSON-RPC 错误。您的客户端应使用指数退避优雅地处理这些错误。以下是 JavaScript 中的简单重试模式:
async function rpcCall(method, params) {
const response = await fetch('https://solana.api.onfinality.io/public', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ jsonrpc: '2.0', id: 1, method, params })
});
if (response.status === 429) {
await new Promise(resolve => setTimeout(resolve, 1000));
return rpcCall(method, params);
}
return response.json();
}
WebSocket 订阅和实时数据
Solana 的 WebSocket API 对于需要实时更新的应用程序(如订单簿、代币余额或程序事件)至关重要。专用节点提供稳定的 WebSocket 连接,而不会因共享负载而断开连接。
关键订阅方法包括:
accountSubscribe– 监视特定账户的状态。programSubscribe– 监视程序拥有的所有账户。logsSubscribe– 接收交易日志。slotSubscribe– 在新槽位确认时获取通知。
使用 WebSocket 时,始终实现重连逻辑。网络中断时有发生,您的客户端应自动重新连接并重新订阅。
用于历史查询的归档访问
Solana 的默认节点配置仅保留最近的状态。如果您的应用程序需要查询历史交易或签名,则需要归档节点。归档节点存储完整的账本历史,支持 getTransaction 等方法查询旧槽位。
并非所有专用节点都包含归档访问。请与您的提供商确认归档数据是否包含在内或作为附加项提供。OnFinality 可以为 Solana 提供归档节点;请通过 专用节点服务 联系我们了解详情。
故障转移和高可用性
单个专用节点是单点故障。如果节点宕机,您的应用程序将失去访问权限。提供商可能提供故障转移选项,其中辅助节点在主节点故障时自动接管。
评估故障转移时,请考虑:
- 自动与手动故障转移:提供商是否检测故障并自动切换?
- 数据一致性:备份节点是否与主节点具有相同的状态?
- 连接池:您的客户端能否处理多个端点?
OnFinality 的基础设施包括监控和故障转移功能。对于生产应用程序,我们建议与我们的团队讨论您的需求。
使用专用 Solana RPC 节点的常见陷阱
即使使用专用节点,开发人员也经常遇到问题。以下是一些常见陷阱以及如何避免它们:
- 不处理速率限制:即使是专用节点也有限制。使用退避实现重试。
- 忽略 WebSocket 重连:始终为重新连接和重新订阅编写代码。
- 使用错误的承诺级别:
processed更快但可靠性较低;finalized对于金融应用更安全。 - 使用重查询使节点过载:没有过滤器的
getProgramAccounts可能代价高昂。使用过滤器或索引器。 - 不监控节点健康:设置响应时间和错误率的警报。
关键要点
- 专用 Solana RPC 节点提供隔离的计算、可配置的速率限制和稳定的 WebSocket 连接。
- 根据速率限制、归档访问、故障转移和支持来评估提供商。
- 使用公共端点进行测试,但在生产工作负载中切换到专用节点。
- 实现稳健的客户端处理,以应对速率限制和 WebSocket 重连。
- OnFinality 提供专用 Solana 节点;在 RPC 定价 上比较选项,并探索 支持的网络。
常见问题解答
共享和专用 Solana RPC 节点有什么区别?
共享节点由多个应用程序使用,这可能导致性能变化。专用节点专用于您的项目,提供一致的性能和可自定义的限制。
小型 dApp 是否需要专用节点?
不一定。如果您的流量较低且不需要实时数据,共享端点可能就足够了。随着用户群的增长,您可以升级到专用节点。
我可以将专用节点用于 Solana devnet 吗?
可以,专用节点也可用于 devnet。您可以通过 Solana Devnet 页面 请求一个。
如何从 OnFinality 获取专用 Solana RPC 节点?
访问 专用节点服务 页面请求节点。您可以指定您的需求,团队将为您配置。
用于测试的公共 Solana RPC 端点是什么?
您可以使用 HTTP 的 https://solana.api.onfinality.io/public 和 WebSocket 的 wss://solana.api.onfinality.io/public-ws。这些仅用于测试;生产应用程序应使用专用端点。