摘要
本文解释了如何为生产工作负载评估领先的 Solana RPC 提供商,涵盖最重要的标准:吞吐量、归档数据访问、WebSocket 支持、故障转移和运营可见性。它还展示了 OnFinality 的 Solana RPC API 和专用节点如何融入多提供商设置,并提供了实用的配置示例和决策框架。
提供商评估矩阵
当团队寻找领先的 Solana RPC 提供商时,他们通常需要做出具体决定:哪个端点(或端点集合)应该位于生产应用、交易机器人、索引器或钱包之后?答案较少取决于品牌名称,而更多取决于每个提供商如何处理你运行的特定 Solana 工作负载。
使用下面的矩阵作为起点。它将常见的 Solana 工作负载映射到最重要的提供商特征,以便你在进行任何基准测试之前筛选提供商。
| 工作负载 | 优先考虑什么 | 为什么在 Solana 上重要 |
|---|---|---|
| 钱包或消费者应用 | 可靠的共享 RPC、WebSocket 支持、合理的速率限制 | 用户会立即注意到丢失的确认和过时的账户数据 |
| 交易机器人 / 做市商 | 低延迟的 sendTransaction、专用容量、优先费用可见性 | Slot 时间紧张,共享端点可能增加不可预测的排队 |
| 索引器 / 分析 | 归档访问、getProgramAccounts、大型 getSignaturesForAddress 扫描 | 历史状态和广泛的账户扫描很重,且通常受到速率限制 |
| NFT 铸造或空投 | 突发容量、WebSocket 订阅、故障转移 | 流量峰值短暂但强烈,单个端点可能饱和 |
| 桥或预言机 | 确定性最终性检查、冗余提供商、监控 | 正确性取决于对已确认 slot 的一致视图 |
OnFinality 提供 Solana RPC API,涵盖共享和专用部署,支持 HTTP 和 WebSocket 传输。对于需要隔离容量的团队,专用节点消除了共享池可能引入的噪声邻居效应。
对于 Solana RPC,“领先”实际上意味着什么
Solana 不是 EVM 链,这改变了好的 RPC 提供商的样子。一些 Solana 特有的现实塑造了提供商选择:
- Slot 和区块生产速度很快。 提供商必须跟上持续的区块生产,落后的节点会迅速落后。
- 账户和程序查询成本高昂。 像
getProgramAccounts和getSignaturesForAddress这样的调用可能返回大量负载,并且在共享端点上经常受到速率限制或禁用。 - WebSocket 订阅很常见。
accountSubscribe、logsSubscribe和slotSubscribe被钱包、机器人和仪表板大量使用。 - 交易发送具有竞争性。
sendTransaction行为、优先费用处理和重试逻辑因提供商而异。 - 归档深度各不相同。 一些提供商只提供最近的 slot;其他提供商为索引器和分析保留更深入的历史。
一个在通用 RPC 比较页面上看起来很强的提供商,如果它限制 getProgramAccounts 或缺乏 WebSocket 支持,可能仍然不适合。这就是为什么工作负载匹配比单一头条数字更重要。
链设置和端点参考
在比较提供商之前,确认你将在客户端中配置的网络设置。对于 Solana 主网,相关值为:
| 设置 | 值 |
|---|---|
| 链名称 | Solana Mainnet |
| 原生货币 | SOL(9 位小数) |
| HTTP RPC(OnFinality 公共) | https://solana.api.onfinality.io/public |
| WebSocket RPC(OnFinality 公共) | wss://solana.api.onfinality.io/public-ws |
| 区块浏览器 | https://explorer.solana.com |
对于开发和测试,使用 Solana Devnet,这样你就不会花费真实的 SOL 或争夺主网容量。一个最小的 JSON-RPC 健康检查如下所示:
curl https://solana.api.onfinality.io/public \
-X POST \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "getHealth"
}'
健康的节点返回 {"jsonrpc":"2.0","result":"ok","id":1}。如果你看到错误或超时,该端点尚未准备好用于生产流量。
如何在不猜测的情况下比较提供商
比较领先的 Solana RPC 提供商的最快方法是对每个候选者运行相同的小型探测集。不要依赖营销页面;测量你的应用实际进行的调用。
1. 测量你依赖的方法。 对于大多数应用来说,这意味着 getLatestBlockhash、getAccountInfo、sendTransaction 以及至少一个订阅。一个在 getSlot 上很快但在 getProgramAccounts 上很慢的提供商会让索引器失望。
2. 在现实的并发下测试。 以你的生产应用产生的请求速率运行探测,而不是一次一个请求。共享端点通常在低负载下表现良好,但在突发下会退化。
3. 检查 WebSocket 稳定性。 打开一个订阅并让它运行一个小时。计算断开连接和错过通知的次数。钱包和机器人依赖于此保持运行。
4. 确认归档深度。 如果你需要历史数据,明确询问提供商提供多远的数据,以及归档访问是包含在内还是单独计费。
5. 验证故障转移行为。 将你的客户端指向两个提供商,并确认当主提供商失败时你的代码确实会切换。一个你从未使用的第二端点不是故障转移计划。
一个使用 @solana/web3.js 的简单 Node.js 探测如下所示:
import { Connection, PublicKey } from "@solana/web3.js";
const endpoints = [
"https://solana.api.onfinality.io/public",
// add your other candidate endpoints here
];
for (const url of endpoints) {
const connection = new Connection(url, "confirmed");
const start = Date.now();
try {
const slot = await connection.getSlot();
const blockhash = await connection.getLatestBlockhash();
console.log(url, "slot", slot, "ms", Date.now() - start, "blockhash", blockhash.blockhash);
} catch (err) {
console.error(url, "failed:", err.message);
}
}
按计划运行此操作并记录结果。几天后,你将获得比任何静态比较表更清晰的画面。
共享 RPC 与专用 Solana 节点
大多数团队从共享 RPC 开始,当出现特定症状时转向专用容量。下表将症状映射到可能的修复方法。
| 症状 | 可能原因 | 尝试什么 |
|---|---|---|
| 间歇性 429 响应 | 共享池速率限制 | 提高计划限制或将热路径移至专用节点 |
getProgramAccounts 超时 | 方法在共享端点上被限制 | 专用节点或允许该方法的提供商 |
| 高峰期间 WebSocket 断开 | 共享订阅容量 | 专用 WebSocket 端点 |
sendTransaction 结果不一致 | 排队和重试差异 | 具有可预测发送路径的专用节点 |
| 历史查询失败 | 无归档访问 | 支持归档的提供商 |
OnFinality 的 专用节点面向已经遇到上述症状之一并需要隔离容量的团队。对于仍在验证想法的团队,共享的 Solana RPC API通常是正确的起点。
实用的故障转移模式
Solana 上的故障转移应在你的客户端代码中明确。一种常见模式是主端点带一两个备份,加上在发送关键交易之前运行的健康检查。
const providers = [
"https://solana.api.onfinality.io/public",
"https://your-backup-endpoint.example.com",
];
async function withFailover(fn) {
for (const url of providers) {
const connection = new Connection(url, "confirmed");
try {
return await fn(connection);
} catch (err) {
console.warn("provider failed, trying next:", url, err.message);
}
}
throw new Error("all Solana RPC providers failed");
}
await withFailover((connection) =>
connection.sendRawTransaction(signedTx.serialize())
);
保持故障转移列表简短且经过测试。轮换五个你从未使用过的端点会增加延迟,而不会增加可靠性。
提交前的操作检查清单
在你签署合同或将生产流量路由到任何提供商之前,确认以下内容:
- 你的应用调用的方法得到明确支持,包括任何
getProgramAccounts或归档查询。 - 如果你的应用使用 WebSocket 订阅,则包含这些订阅。
- 速率限制和突发行为有文档记录,而不是推断的。
- 你至少配置并测试了一个独立的备份提供商。
- 你记录每个端点的延迟、错误率和 slot 滞后,以便在用户之前看到退化。
- 你知道在事件期间如何联系支持。
如果你仍在跨链比较提供商,如何选择 RPC 提供商文章涵盖了通用框架。对于 Solana 特定的容量和定价,请参阅 RPC 定价和完整的支持的 RPC 网络列表。
关键要点
- “领先的” Solana RPC 提供商是那些适合你工作负载的提供商,而不是那些营销最响亮的。
- Solana 特有的方法如
getProgramAccounts、sendTransaction和 WebSocket 订阅是提供商差异最大的地方。 - 用你的真实方法、在现实的并发下、持续几天测试候选者。
- 共享 RPC 对许多应用来说没问题;当你遇到速率限制、方法被限制或不稳定的订阅时,专用节点会有所帮助。
- 始终在需要之前配置并测试故障转移端点。
- OnFinality 提供 Solana RPC API和专用节点,作为更广泛的网络组合的一部分。
常见问题解答
共享和专用 Solana RPC 有什么区别? 共享 RPC 在多个用户之间池化请求,起步成本更低。专用节点为你的工作负载提供隔离容量,这在你遇到速率限制或需要共享端点限制的方法时很有帮助。
我需要归档 Solana 节点吗? 仅当你查询超出最近窗口的历史 slot、交易或账户状态时。索引器和分析管道通常需要归档访问;简单的钱包通常不需要。
WebSocket 支持在 Solana 上重要吗?
是的,如果你的应用使用像 accountSubscribe 或 logsSubscribe 这样的订阅。钱包、机器人和仪表板依赖这些,并且 WebSocket 稳定性因提供商而异。
我应该使用多少个 RPC 提供商? 两个通常就够了:一个主提供商和一个经过测试的备份。超过这个数量会增加复杂性,而可靠性收益不成比例。
我可以从公共端点开始吗? 公共端点对于开发和轻量测试很有用。对于生产流量,请转向具有文档化限制和支持的托管或专用端点。