摘要
Solana RPC 提供商运营为集群提供 HTTP JSON-RPC 和 WebSocket 流量的节点。本页说明如何为生产工作负载评估提供商,涵盖承诺级别、共享与专用访问、归档深度、速率限制、故障转移以及常见故障模式。
使用决策清单和评估表快速比较选项,然后决定共享端点、专用节点还是不同的基础设施模型适合您的 Solana 应用。
Solana 的 JSON-RPC API 是您的应用与集群之间的网关。Solana RPC 提供商运营处理这些请求的节点,因此您的选择会影响延迟、可靠性以及您的团队需要管理的基础设施数量。Solana 文档中列出的公共端点适合实验,但生产应用通常需要一个具有承诺吞吐量、WebSocket 支持和明确公平使用政策的提供商。
本文是一份实用的评估指南,供比较 Solana RPC 提供商的团队使用。您将找到一份决策清单、最重要的标准、一个端点请求示例,以及值得规划的故障模式概述。
Solana RPC 提供商决策清单
在购买任何服务之前,请使用此清单:
- 确定读写组合。您主要是发送交易,还是读取账户、区块和签名?
- 确认提供商以一致的方法支持覆盖 mainnet-beta、devnet 和 testnet。
- 测试承诺行为:processed、confirmed 和 finalized 必须映射到您的应用期望的状态。
- 选择访问模式:早期阶段使用共享端点,可预测工作负载使用专用节点。
- 在基于它们构建实时 UI 之前,验证 WebSocket 订阅和重连行为。
- 检查归档深度:提供商能返回多久以前的交易、区块和账户历史?
- 查看速率限制、429 处理方式,以及限制是通过请求量还是节点租用提高。
- 规划故障转移:您能否跨多个端点、区域或提供商路由流量?
本文的其余部分将结合上下文解释每一点。
Solana RPC 提供商的作用
每个 Solana 应用都依赖 RPC 节点。当钱包请求代币余额、DEX 获取报价或机器人提交交易时,它会向节点发出 HTTP JSON-RPC 调用。有些调用是简单的读取,如 getBalance 或 getLatestBlockhash。其他调用则模拟和提交交易。WebSocket 方法推送账户变更、日志和插槽转换的实时更新。
Solana 提供多个公共集群:mainnet-beta、devnet 和 testnet。官方端点便于一次性检查,但属于共享基础设施。Solana 自己的文档警告说,公共端点不适用于生产应用,当超出速率限制时会返回 429,当流量被阻止时会返回 403。商业 Solana RPC 提供商运营托管节点群,添加负载均衡,并经常提供额外服务,如 Geyser 流式传输或交易投递辅助。
向提供商发送的基本请求如下:
curl "YOUR_SOLANA_RPC_URL" \
-X POST \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"getLatestBlockhash","params":[{"commitment":"confirmed"}]}'
响应返回一个 blockhash 和最后一个有效区块高度,您的应用随后使用这些信息来构建和提交交易。
共享与专用 Solana RPC 访问
大多数提供商提供两种连接方式:共享端点或专用节点。
共享端点是一个负载均衡的 URL,将请求分发到许多客户。它价格低廉且易于入门,但您与其他团队共享容量。当其他客户发送大量请求时,延迟可能会飙升,速率限制通常按 API 密钥强制执行。
专用的 Solana RPC 节点让您的团队独占访问节点资源。这对于高频交易、NFT 发布、数据索引以及任何需要可预测吞吐量的工作负载都很重要。您仍然可以获得提供商的维护、监控和故障转移,但无需自己运行 Solana 软件。
OnFinality 以两种模式提供 Solana。共享的 RPC API 服务 适用于标准的 dApp 流量,而 专用节点 为要求苛刻的应用隔离容量。Solana 网络页面 描述了可用的访问类型,完整支持的网络列表 显示了您可以从同一平台访问哪些其他链。
如何评估 Solana RPC 提供商
下表总结了区分有用的 Solana RPC 提供商与导致生产事故的提供商的标准。
| 标准 | 检查内容 | 重要性 |
|---|---|---|
| 吞吐量 | 每秒请求数、突发与稳态限制、负载下的插槽滞后 | 落后于集群的节点会返回过期数据,并可能导致交易就绪检查失败 |
| 承诺级别 | 支持 processed、confirmed 和 finalized,且响应一致 | 误解承诺级别可能使用户看到后来被回滚的交易 |
| 方法覆盖 | 完整的 JSON-RPC 方法,包括 getSignaturesForAddress、getProgramAccounts、sendTransaction | 缺少方法会迫使您运行额外基础设施或使用不可靠的变通方案 |
| WebSocket 行为 | 订阅类型、ping/pong 间隔、重连策略 | 损坏的订阅会导致实时仪表板和交易机器人错过事件 |
| 归档深度 | getTransaction、getBlock 和 getSignaturesForAddress 能返回多早的数据 | 钱包、分析和合规工作流需要深层历史数据 |
| 速率限制 | 429 处理、并发上限、提高限制的成本 | 硬性上限可能使应用在流量高峰时停滞 |
| 故障转移 | 多个端点、健康检查、过期节点检测 | 单一端点会造成单点故障 |
| Devnet/testnet 一致性 | 与 mainnet 相同的方法支持和功能 | CI 和暂存环境可能遗漏仅在真实集群上出现的问题 |
吞吐量与插槽滞后
插槽滞后是当前 leader 插槽与您的 RPC 节点已处理的插槽之间的差异。如果节点滞后,读取会返回过期状态,交易提交可能因 blockhash 过期而失败。提供商会监控插槽滞后,但他们使用的阈值并不总是有文档说明。询问提供商的过期节点策略,并对照独立来源测试 getSlot 响应。
承诺级别是 Solana 特有的陷阱
Solana 有三个承诺级别:processed、confirmed 和 finalized。已处理的交易如果集群未确认,仍可能被回滚。许多提供商默认使用 confirmed 以减少 UI 闪烁,但读取密集型应用有时使用 processed 来查看最新状态。无论您选择什么,提供商都必须为同一承诺级别一致地返回相同状态。
方法覆盖与归档访问
生产级 Solana 应用通常依赖 getSignaturesForAddress、getTransaction 和 getProgramAccounts。这些方法对 RPC 节点来说代价较高。getProgramAccounts 可以读取程序拥有的每个账户,这对 DEX 余额很有用,但在繁忙网络上可能超时。检查提供商是否强制执行最大响应大小、是否提供归档节点,以及是否为高容量数据提供 Geyser 或 gRPC 流式传输。
Solana RPC 端点配置与 WebSockets
Solana 的 RPC 分为用于请求-响应调用的 HTTP API 和用于订阅的 WebSocket API。在评估提供商时,请测试这两个层面。
用于插槽更新的 WebSocket 订阅如下所示:
const WebSocket = require('ws');
const ws = new WebSocket('wss://YOUR_SOLANA_RPC_URL');
ws.on('open', function open() {
ws.send(JSON.stringify({
jsonrpc: '2.0',
id: 1,
method: 'slotSubscribe'
}));
});
ws.on('message', function incoming(data) {
console.log(data.toString());
});
实际应用还会订阅账户变更、程序日志和签名。确认提供商支持您需要的订阅方法,而不仅仅是常见的钱包 RPC。如果您正在构建索引器,请寻找 Geyser 插件或 gRPC 流,而不是循环轮询 getProgramAccounts。
Solana RPC 提供商的常见故障模式
了解可能出现的问题有助于您在提供商试用期间提出更好的问题。
- 429 Too Many Requests。 共享端点强制执行速率限制。检查提供商是否返回
Retry-After标头,以及客户端在配额耗尽时应如何处理。 - 403 Forbidden。 某些提供商阻止来自特定区域的流量或要求白名单。如果您的用户遍布全球,这可能会导致访问中断。
- 过时的插槽响应。 落后于集群的节点会为
getSlot、getBalance和其他读取返回过期值。您的应用需要一种检测并故障转移的方法。 - BlockhashNotFound。 您用于签署交易的 blockhash 已过期或接收节点从未观察到。使用新的
getLatestBlockhash重试。 - 交易模拟失败。 您的交易可能引用了自读取状态以来已更改的账户。提交前使用当前数据重新模拟。
- WebSocket 断开连接。 订阅会无预警地断开。客户端必须重新连接、重新订阅,并从 HTTP 调用中补充丢失的数据。
- 大型响应超时。
getProgramAccounts和getSignaturesForAddress可能返回大量记录。提供商会限制响应大小或流式传输结果。
一个好的提供商应记录这些行为,并提供重试、负载均衡端点和监控。避免那些将所有失败都描述为客户端错误而不公开操作细节的提供商。
自建与购买:运行您自己的 Solana RPC 节点
运行带有 RPC 端口的 Solana 验证器软件并非易事。mainnet RPC 节点需要现代 CPU、大量 RAM、快速的 NVMe 存储,以及多天的账本同步才能投入使用。同步之后,您需要监控插槽滞后、应用更新、保持快照新鲜,并管理故障转移。这是一个完整的运营角色,与您正在构建的任何应用都是分开的。
托管基础设施将这些工作转移给提供商。OnFinality 在共享 RPC API 和 专用节点 产品上都支持 Solana,并提供 透明的 RPC 定价,将请求量与节点租用分开。已经为多条链运营基础设施的团队还应阅读通用的 RPC 提供商选择指南,以获得跨链比较框架。对于暂存和集成测试,还可以查看 Solana devnet 端点。
关键要点
- Solana RPC 提供商是您的应用与集群之间的网关。公共端点不适合作为生产目标。
- 在做出承诺之前,测试承诺级别、方法覆盖、WebSocket 可靠性和归档深度。
- 共享端点适合早期阶段;专用节点提供隔离容量和可预测的性能。
- 提供商故障转移、重试行为和过期节点检测对用户体验的影响不亚于原始延迟。
- 确保提供商覆盖您的团队使用的集群,包括用于暂存的 devnet 和用于验证型实验的 testnet。
常见问题
什么是 Solana RPC 提供商?
一种运营 Solana RPC 节点并将其作为托管的 HTTP 和 WebSocket 端点公开的服务。它让您可以读取链上状态并向集群提交交易,而无需自己运行 Solana 基础设施。
公共 Solana RPC 端点足以用于生产吗?
不能。像 api.mainnet.solana.com 这样的公共端点是为开发和测试设计的。它们是共享基础设施,可能会限制速率或阻止流量。生产应用应使用具有明确限制、冗余和支持的提供商。
什么是插槽滞后,为什么它很重要?
插槽滞后是当前 leader 插槽与您的 RPC 节点已处理的插槽之间的差异。如果您的节点落后,读取会返回过期状态,交易提交可能失败,因为 blockhash 可用性与节点对集群的视图相关。
我们应该使用共享还是专用的 Solana RPC 端点?
共享端点更便宜、更简单,是一个很好的起点。专用节点提供隔离资源,更适合高吞吐量工作负载、数据索引或需要可预测延迟的应用。