摘要
Solana 的高吞吐量设计给 RPC 基础设施带来了不寻常的压力:共享端点可能在突发工作负载下受到限制,而企业应用通常需要可预测的容量、归档访问和 WebSocket 可靠性。专用节点让单个团队拥有自己的节点资源,而不是在共享池中竞争。本文解释了何时适合使用专用 Solana 基础设施、如何评估提供商,以及在迁移生产流量之前需要检查什么。OnFinality 提供 Solana RPC API 访问和专用节点基础设施,作为与您当前设置进行比较的一个选项。
Solana 处理交易的速度远快于大多数 EVM 链,这种速度改变了“RPC 容量”的实际含义。一个对钱包或小型 dApp 来说运行良好的共享端点,在企业应用开始轮询账户、流式传输日志或运行批处理作业时,可能立即成为瓶颈。本文背后的查询是一个实际问题:团队何时从共享 Solana RPC 迁移到专用节点,以及如何评估这一决策而不过度购买?
本页直接回答这个问题,然后逐步介绍权衡、评估标准和迁移步骤。
何时适合使用专用 Solana 节点
当您的工作负载具有共享基础设施难以处理的形态时,专用节点就有意义。最明显的信号:
- 突发性、高容量读取。 索引器、投资组合跟踪器和分析管道在紧密循环中调用
getProgramAccounts、getSignaturesForAddress或getTransaction。 - 持久订阅。 交易系统、清算机器人和实时仪表板依赖于
accountSubscribe、logsSubscribe或slotSubscribe保持连接。 - 归档和历史查询。 合规报告、回填和审计工具需要旧 slot,而不仅仅是最近的。
- 为已知用户群提供可预测的吞吐量。 如果您的产品对其客户有承诺的 SLA,您需要可以推理的容量。
当您仍在验证产品市场契合度、流量确实很低且每天仅一次尖峰,或者尚未测量当前端点实际失败的位置时,专用节点通常不是第一步。从托管 RPC API 开始,对其进行监控,让数据告诉您何时升级。
一个有用的规则:如果您可以将工作负载描述为“许多并发读取者加上少数长期订阅者”,那么专用基础设施值得定价。如果是“每天几百次调用”,那可能不值得。
共享 Solana RPC 上实际会出什么问题
Solana 的故障模式与 EVM 链不同,因此精确命名它们会有所帮助。
| 症状 | 可能原因 | 对您意味着什么 |
|---|---|---|
批处理作业期间出现 429 Too Many Requests | 共享池上的每密钥或每 IP 速率限制 | 您的吞吐量上限由他人的策略设定 |
| 负载下 WebSocket 断开连接 | 共享订阅扇出 | 您需要重连逻辑,或者一个不共享的节点 |
大型程序上 getProgramAccounts 缓慢 | 繁忙节点上的重扫描成本 | 具有更多余量的归档/专用节点有帮助 |
| 高峰时段延迟不一致 | 嘈杂邻居争用 | 容量是可变的,不是保证的 |
| 缺少旧 slot | 非归档节点 | 即使节点健康,历史查询也会失败 |
这些都不是 Solana 的 bug。它们是许多租户共享一个节点的自然结果。专用节点消除了租户共享部分;它们并没有消除对良好客户端工程的需求。
提供商评估矩阵
当您比较专用 Solana 节点提供商时,根据您的实际工作负载而不是通用功能列表来评分。OnFinality 是一个可以包含的选项;以下列适用于任何提供商。
| 评估领域 | 要问什么 | 为什么它决定结果 |
|---|---|---|
| 传输支持 | HTTP 和 WebSocket 都可用吗? | Solana 应用通常需要两者;在承诺之前确认 |
| 归档深度 | 历史查询可以回溯多远? | 决定回填和审计是否可行 |
| 方法覆盖 | 是否支持 getProgramAccounts、getSignaturesForAddress 和订阅方法? | 一些提供商限制昂贵的方法 |
| 容量模型 | 吞吐量是固定的、可突发的还是计量的? | 直接映射到您的成本和上限 |
| 故障转移 | 维护或节点重启期间会发生什么? | 决定您的真实可用性,而不是营销数字 |
| 可观测性 | 您能获得请求指标、错误率和日志吗? | 您无法调整看不到的东西 |
| 迁移路径 | 您可以先共享,然后稍后迁移到专用吗? | 避免在增长时进行昂贵的重新平台化 |
OnFinality 提供 Solana RPC API 访问和专用节点基础设施,因此团队可以从托管端点开始,并随着负载增长迁移到专用容量。您可以查看 RPC 定价 和 Solana 网络页面,在与任何人交谈之前了解可用内容。
端点和连接参考
对于开发和轻量测试,OnFinality 公开了一个公共 Solana 主网端点。它同时支持 HTTP 和 WebSocket。
# HTTP JSON-RPC
curl https://solana.api.onfinality.io/public \
-X POST -H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"getHealth"}'
HTTP: https://solana.api.onfinality.io/public
WebSocket: wss://solana.api.onfinality.io/public-ws
一个最小的 JavaScript 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: "slotSubscribe"
}));
});
ws.on("message", (data) => {
console.log("slot update:", data.toString());
});
公共端点在设计上就是共享的。它们适用于开发、原型设计和低容量读取。对于有承诺用户的生产流量,请计划使用托管或专用端点。如果您需要测试环境,请参阅 Solana devnet 网络页面。
不猜测的容量规划
团队最常犯的错误是根据他们曾经看到的一次峰值而不是他们理解的分布来购买专用容量。在确定任何规模之前,收集两周的数据:
- 按方法划分的每秒请求数。
getProgramAccounts的成本远高于getSlot。聚合计数隐藏了这一点。 - 并发性,而不仅仅是容量。 每秒十个请求分散开来很容易;同时十个是另一个问题。
- 订阅数量和生命周期。 有多少 WebSocket 连接保持打开,持续多长时间?
- 按小时划分的错误率。 如果 429 集中在特定时间,那就是您真正的瓶颈。
- 历史查询深度。 您的应用实际请求的最旧 slot 是什么?
有了这五个数字,您可以与任何提供商(包括 OnFinality)进行具体对话,而不是要求“足够的容量”。如果您仍在决定共享还是专用,RPC 提供商选择指南 涵盖了更广泛的标准。
迁移检查点
从共享端点迁移到专用节点不是重写,但也不是一行更改。按顺序完成这些检查点。
- 先双运行。 将一定比例的读取流量指向新端点,同时旧端点保持活跃。比较错误率和延迟。
- 最后迁移订阅。 WebSocket 迁移最具破坏性;在 HTTP 流量稳定之前,将它们保留在旧端点上。
- 重新测试昂贵的方法。
getProgramAccounts和归档查询在专用节点上的行为不同。验证结果匹配。 - 确认故障转移行为。 故意重启或故障转移,观察您的客户端如何处理。
- 更新监控。 您的仪表板现在应该显示新端点的指标,而不仅仅是旧端点的。
- 保留回滚路径。 在新配置至少运行一个完整的流量周期之前,不要删除旧配置。
如果您的应用使用钱包或客户端配置,更改通常只是 RPC URL:
const connection = new Connection(
"https://solana.api.onfinality.io/public",
{ commitment: "confirmed" }
);
对于专用部署,将该 URL 替换为您的提供商颁发的端点,并保持相同的 commitment 和重试逻辑。
比节点更重要的操作习惯
专用硬件不能修复重试糟糕的客户端。无论提供商如何,一些习惯都会带来回报:
- 带抖动的退避 在 429 和超时时,而不是立即重试。
- 幂等请求 ID 以便重试的调用不会重复计数。
- 连接池 用于 HTTP,并在可能的情况下使用单个多路复用 WebSocket。
- 健康检查 定期针对
getHealth和getSlot,而不仅仅是在出现问题时。 - 错误率告警,而不是单个故障,这样您不会因噪音而被呼叫。
这些实践让专用节点真正提供您所支付的扩展性。
关键要点
- Solana 的吞吐量使 RPC 容量成为一等设计关注点,而不是事后考虑。
- 专用节点适合具有许多并发读取者、长期订阅或归档需求的工作负载。
- 共享端点适用于开发和低容量读取;它们不适合承诺的生产流量。
- 根据传输支持、归档深度、方法覆盖、容量模型、故障转移和可观测性来评估提供商。
- OnFinality 提供 Solana RPC API 访问和专用节点基础设施,作为几个选项之一。
- 迁移主要是配置,但订阅和昂贵的方法需要明确测试。
- 客户端工程(退避、池化、健康检查)与节点本身一样重要。
常见问题
我从第一天就需要专用的 Solana 节点吗? 不。从托管 RPC API 开始,测量您的工作负载,当您可以指出特定瓶颈时再迁移到专用容量。
共享和专用 Solana 节点有什么区别? 共享节点从一个池中服务许多租户,因此您的吞吐量取决于他人的使用。专用节点为您的工负载保留,为您提供可预测的容量。
我可以在生产中使用公共 OnFinality Solana 端点吗? 公共端点是共享的,旨在用于开发和低容量使用。对于生产流量,请使用托管或专用端点。
专用节点包含归档数据吗? 不自动包含。归档深度是一个单独的问题;在依赖历史查询之前,请与您的提供商确认。
在切换之前如何测试新的 Solana 端点? 并行运行两个端点,将一定比例的读取流量路由到新端点,比较错误率和延迟,并最后迁移 WebSocket 订阅。
在哪里可以看到 OnFinality 的 Solana 选项? 查看 Solana 网络页面、专用节点 详细信息和 RPC 定价,然后使用上面的评估矩阵与您当前的提供商进行比较。