摘要
共享 Solana RPC 将许多用户集中到公共端点后面,因此你可以快速设置且成本低廉,但会在吞吐量、速率限制和 WebSocket 插槽方面产生竞争。专用 Solana 节点为你的工作负载提供专属资源、可预测的容量,以及支持归档、追踪和订阅密集型模式的空间。本文详细分析了权衡取舍、推动你选择某种模型的工作负载信号,以及如何评估像 OnFinality 这样的提供商在两种路径下的表现。
Solana 的吞吐量特性使得 RPC 访问与 EVM 链上的问题不同。区块快速生成,交易密集,客户端通常需要同时进行 HTTP 轮询和 WebSocket 订阅。这就是为什么专用与共享的问题如此频繁出现:答案不仅改变你支付多少,还改变你能构建什么。
快速推荐
在阅读其余内容之前,请使用这个简短指南。它将最常见的情况映射到起始模型。
- 原型、黑客松构建和低流量仪表板: 从共享访问开始。你可以立即获得一个可用的端点,并在花费基础设施费用之前验证产品逻辑。
- 具有稳定读取流量和偶尔突发的生产应用: 从共享开始,但要进行测量。如果你在高峰时段看到限流、错误率升高或订阅中断,请计划迁移。
- 交易机器人、索引器以及任何依赖 WebSocket 可靠性的应用: 倾向于专用。共享池在负载下可能会丢弃或轮换订阅,这从客户端很难调试。
- 归档查询、大型
getProgramAccounts扫描或繁重的getSignaturesForAddress分页: 支持归档的专用节点通常是合适的选择,因为这些调用开销大且运行时间长。 - 需要为特定 SLA 提供可预测容量的团队: 专用,并制定清晰的容量计划和故障转移端点。
如果你不确定,实用的路径是在预发环境中运行共享访问,对其进行监控,并使用这些数据来证明专用容量的合理性。OnFinality 提供两种模型,因此你可以在相同的工具下进行比较。查看 RPC 定价 和 支持的 RPC 网络 了解当前选项。
在 Solana 上,“共享”和“专用”实际意味着什么
共享访问意味着你的请求发送到许多客户使用的 Solana 节点池。提供商处理负载均衡、健康检查和节点升级。你获得一个端点、一个速率限制以及提供商暴露的任何传输方式。好处是零运维工作。缺点是你的流量与其他所有人的流量竞争,提供商决定如何优先处理它。
专用访问意味着一个节点(或一个小集群)为你的工作负载保留。你不与无关租户共享 CPU、磁盘 I/O 或网络带宽。这在 Solana 上很重要,因为某些 RPC 方法确实很重:带过滤器的 getProgramAccounts、长范围的 getSignaturesForAddress 以及大 slot 上的 getBlock 可能消耗大量内存和磁盘。在共享池上,这些调用通常受到速率限制或限制。在专用节点上,它们是容量规划问题,而不是策略问题。
一个有用的心智模型:共享访问优化广度和成本,专用访问优化深度和可预测性。
共享访问在哪些方面会出问题
共享 Solana RPC 不是玩具。对于许多应用来说,它在很长一段时间内是正确的选择。但随着你的成长,会出现可识别的故障模式。
| 你观察到的症状 | 共享访问上可能的原因 | 下一步做什么 |
|---|---|---|
| 高峰时段出现 HTTP 429 响应 | 跨租户共享的池级速率限制 | 添加退避、缓存读取,或将重调用移到专用节点 |
| WebSocket 订阅静默停止 | 共享池上的连接轮换或插槽限制 | 重连逻辑加上专用 WebSocket 端点 |
getProgramAccounts 返回错误或超时 | 方法在共享层上受限或设上限 | 将扫描移到具有归档数据的专用节点 |
| 没有代码更改但延迟飙升 | 共享池上的嘈杂邻居负载 | 测量 p95/p99,然后评估专用容量 |
旧 slot 的 getBlock 结果不一致 | 节点修剪了较旧的账本数据 | 使用支持归档的专用节点 |
这些都不是完全避免共享访问的理由。它们是你的工作负载已经超出该模型的信号。
证明专用 Solana 节点合理性的工作负载信号
与其猜测,不如查看你自己的遥测数据。这些是最可靠地指向专用容量的信号:
- 持续请求量接近你的速率限制。 如果你经常达到允许量的 60-80%,你就没有应对流量峰值的余量。
- 订阅密集型架构。 如果你的应用保持数百或数千个 WebSocket 订阅打开,共享池可能会限制或轮换它们。
- 繁重的读取模式。 索引器、分析仪表板和钱包后端通过分页遍历签名或扫描程序账户,受益于专用磁盘和内存。
- 延迟敏感。 交易和清算逻辑关心尾部延迟,而不是平均值。专用节点消除了嘈杂邻居的差异。
- 合规或隔离要求。 一些团队需要确切知道哪个节点为他们的流量提供服务。
如果其中两个或更多适用,专用访问通常比围绕共享限制进行工程处理所花费的时间更便宜。
连接到 Solana RPC:快速参考
在比较提供商之前,确认你的客户端配置正确。Solana 使用基于 HTTP 的 JSON-RPC 加上用于订阅的单独 WebSocket 端点。
# HTTP request against a Solana RPC endpoint
curl https://solana.api.onfinality.io/public \
-X POST -H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "getLatestBlockhash",
"params": [{"commitment": "confirmed"}]
}'
// WebSocket subscription with @solana/web3.js
import { Connection } from "@solana/web3.js";
const connection = new Connection(
"https://solana.api.onfinality.io/public",
{ wsEndpoint: "wss://solana.api.onfinality.io/public-ws" }
);
const subId = connection.onSlotChange((slotInfo) => {
console.log("slot", slotInfo.slot);
});
这些公共端点适用于开发和轻量流量。对于生产环境,你通常会转向带密钥的端点或专用节点。Solana 网络页面 列出了 OnFinality 支持的当前端点和传输方式,如果你需要测试环境,可以使用 Solana Devnet。
如何评估两种模型的提供商
当你比较提供商时,问题因你购买的模型而异。使用这个矩阵作为清单。
| 评估领域 | 共享访问要问什么 | 专用访问要问什么 |
|---|---|---|
| 速率限制 | 每秒和每种方法的请求数,以及如何处理突发 | 节点规格、预期吞吐量以及容量如何确定 |
| 方法支持 | 哪些重方法被允许、设上限或阻止 | 是否启用归档、追踪和完整方法集 |
| WebSocket 行为 | 连接和订阅限制、轮换策略 | 专用 WS 端点和订阅容量 |
| 故障转移 | 池后面是否有冗余节点 | 冗余选项以及如何配置故障转移 |
| 可观测性 | 状态页面、错误报告和使用仪表板 | 每节点指标以及访问日志或警报 |
| 支持 | 响应渠道和升级路径 | 指定支持和入门帮助 |
| 定价模型 | 按请求或分层计划 | 按节点或预留容量定价 |
OnFinality 出现在两列中:通过 API 服务 的共享 RPC API 访问,以及通过 专用节点 的预留容量。该领域的竞争对手通常提供类似的分割,因此差异点通常是方法支持、WebSocket 处理以及容量模型的透明度。
成本和风险权衡
共享访问具有低固定成本和可变性能。专用访问具有较高的固定成本和更可预测的性能。决策很少是关于原始价格的;而是关于一个坏请求会给你带来什么损失。
考虑一个交易机器人。如果一个丢弃的 WebSocket 订阅导致错过清算,该失败的代价使共享和专用之间的月度差异相形见绌。现在考虑一个只读分析仪表板。如果一个慢查询只是意味着多转两秒钟,共享访问就足够了,专用容量是过度的。
一个实用的中间路径:将共享访问作为默认,只将昂贵或延迟敏感的调用路由到专用节点。这可以降低成本,同时保护重要的路径。
迁移检查点
如果你决定从共享迁移到专用,请将其视为受控迁移而不是切换。
- 清点你的方法。 列出你的应用调用的每个 RPC 方法以及频率。标记重方法。
- 建立指标基线。 记录共享访问上的 p50、p95 和 p99 延迟、错误率和订阅稳定性。
- 配置专用节点。 在切换前确认归档需求、WebSocket 容量和传输支持。
- 并行运行。 将一定比例的流量指向专用节点,并与基线进行比较。
- 按工作负载切换。 先移动最重或延迟最敏感的调用,然后移动其余部分。
- 保留回退。 保留一个共享端点作为故障转移目标,并记录切换逻辑。
一个简单的监控探针有助于确认新端点的行为符合预期:
# Lightweight health probe for a Solana RPC endpoint
for i in $(seq 1 5); do
curl -s -o /dev/null -w "%{http_code} %{time_total}s\n" \
https://solana.api.onfinality.io/public \
-X POST -H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"getHealth"}'
done
关键要点
- 共享 Solana RPC 是大多数团队的合适起点:设置快速、固定成本低,并且足以应对稳定的读取流量。
- 当你达到速率限制、依赖 WebSocket 可靠性、运行重扫描或需要可预测的尾部延迟时,专用 Solana 节点就很重要。
- 最清晰的迁移信号是你自己的遥测数据,而不是提供商的营销。关注 p95/p99 延迟、429 率和订阅中断。
- 你可以混合模型:共享用于一般读取,专用用于昂贵或延迟敏感的调用。
- 评估提供商的方法支持、WebSocket 行为、故障转移、可观测性以及其容量模型的透明度。
- OnFinality 为 Solana 提供共享 RPC API 访问和专用节点容量,因此你可以在相同的工具下进行比较。
常见问题
共享 Solana RPC 对生产环境足够好吗?
对于许多读取密集型应用来说,是的。当你接近速率限制、依赖长寿命 WebSocket 订阅或运行像 getProgramAccounts 这样的重方法时,它就会成为问题。
专用和共享 Solana 节点之间的主要区别是什么? 共享节点从公共池为许多租户服务;专用节点为你的工作负载保留资源。实际区别体现在速率限制、方法支持、WebSocket 稳定性和尾部延迟上。
我需要专用节点来进行 WebSocket 订阅吗? 不一定,但订阅密集型应用会受益于一个。共享池可能会限制或轮换连接,这从客户端很难诊断。
我可以同时使用两种模型吗? 可以。一种常见模式是共享访问用于一般读取,专用节点用于昂贵或延迟敏感的调用。
我如何知道何时迁移? 当你的指标显示持续高利用率、频繁的 429、订阅中断或延迟峰值与负载相关而不是与你自己的代码相关时。
OnFinality 支持共享和专用 Solana 访问吗? 是的。你可以从共享 RPC API 开始,随着工作负载增长转向专用容量。查看 RPC 定价 和 Solana 网络页面 了解当前详情。