摘要
Solana 上的分析工作负载由请求量和数据形态决定,而不仅仅是原始吞吐量。索引器、仪表盘和回填任务往往依赖 getSignaturesForAddress、getTransaction 和 getProgramAccounts 等方法,这些方法可能比钱包或交易机器人进行的调用更重、更频繁。经济实惠的 Solana RPC 提供商是指其定价模型、方法支持和归档深度与这种模式匹配,而不是为不会使用的容量收费。
本文介绍如何评估用于分析的 Solana RPC 和 API 选项:在承诺之前要衡量什么,共享和专用基础设施在读取密集型任务上有何不同,以及随着数据管道增长如何保持成本可预测。OnFinality 提供 Solana RPC API 访问和专用节点选项,您可以在 RPC 定价页面上比较计划。
Solana 上的分析与大多数链上工作负载不同。索引器、投资组合仪表盘或回填任务不会发送一笔交易并等待确认。它会批量、重复地读取历史数据,并且通常同时跨多个账户或程序。当您比较 Solana RPC 提供商和分析 API 时,这改变了“经济实惠”的实际含义。
如果您正在为数据管道选择基础设施,最便宜的标价很少是最便宜的结果。重要的是提供商的定价模型、方法支持和归档深度是否与分析任务实际调用网络的方式一致。
何时 Solana RPC 提供商适合分析工作负载
在比较供应商之前,确定您的工作负载匹配以下三种模式中的哪一种。每种模式对提供商施加不同的压力。
- 实时仪表盘和监控。 频繁轮询最近的 slot、账户余额和交易状态。每次调用数据量低,调用频率高,对延迟敏感。
- 索引器和回填任务。 使用
getSignaturesForAddress、getTransaction和getBlock进行大规模历史扫描。数据量大,突发性强,通常作为批处理任务运行而非稳定流量。 - 程序和账户分析。 针对程序拥有的账户进行查询,有时使用
getProgramAccounts和过滤器。这些调用在节点端可能很昂贵,并且最有可能触及提供商特定的限制。
如果您的工作负载主要是第一种模式,共享 RPC API 通常就足够了,并且是最经济实惠的起点。如果主要是第二种或第三种,您需要在查看价格之前检查归档可用性和方法支持,因为无法服务您查询的便宜计划并不便宜。
快速框定决策的方法:
| 工作负载模式 | 通常适合什么 | 首先验证什么 |
|---|---|---|
| 实时仪表盘轮询 | 共享 RPC API | 速率限制和 WebSocket 支持 |
| 索引器 / 历史回填 | 具有归档访问的共享 API,或专用节点 | 归档深度和 getBlock / getTransaction 支持 |
| 程序账户分析 | 专用节点或更高层级的 API | getProgramAccounts 支持和计算限制 |
| 混合生产管道 | 共享 API 加上用于重任务的专用节点 | 故障转移行为以及使用量如何计量 |
Solana 分析管道中成本驱动因素
分析管道中的成本是三个因素的函数:您发送多少请求、每个请求有多重,以及提供商必须在已经繁忙的节点上完成多少工作。
请求数量。 一个每隔几秒刷新数十个账户的仪表盘每天可能比交易机器人产生更多调用。如果您的提供商按请求计量,这个数字决定了您的账单。
请求权重。 Solana RPC 方法并不相等。getSlot 调用微不足道。针对大型程序的 getProgramAccounts 调用可能返回大量数据并消耗大量节点资源。一些提供商按方法权重而非原始调用次数定价或限速,这取决于您的组合可能更好或更差。
计算和数据量。 拉取完整区块和交易的回填会移动真实字节。如果您的计划包含数据传输配额,大规模历史扫描可能很快消耗它。
重试。 失败或被限速的调用,您重试时在时间上支付两次,有时在金钱上也是。返回清晰错误和稳定限制的提供商减少了隐藏的重试成本。
这就是为什么“经济实惠”应被理解为每有用结果的成本,而非每次调用的成本。一个费率稍高但失败查询更少、方法支持更好的提供商,在一个月内可能是更便宜的选择。
分析 API 的提供商评估矩阵
在比较用于数据管道的 Solana RPC 提供商时,将此作为检查清单。OnFinality 作为与其他选项一起评估的一个选项列在首位。
| 提供商选项 | 要检查的定价模型 | 分析相关优势 | 要问的问题 |
|---|---|---|---|
| OnFinality | 共享 RPC API 层级加上专用节点选项 | 通过 HTTP 和 WebSocket 的 Solana RPC API,用于更重任务的专用节点基础设施 | 包含哪些方法,使用量如何计量,专用节点如何界定 |
| 共享公共端点 | 免费或社区资助 | 适合原型和轻量轮询 | 速率限制,无归档保证,无支持路径 |
| 通用 RPC 市场 | 按请求或按计算单元 | 广泛的网络覆盖,易于注册 | 方法级限制,归档深度,重试行为 |
| 自托管节点 | 基础设施成本加运维时间 | 完全控制方法和数据 | 硬件、存储增长、升级和监控负担 |
对于分析,有两列比其他列更重要:方法支持和归档深度。在承诺计划之前,以书面形式或通过测试查询确认两者。
在承诺之前测试提供商
比较提供商最快的方法是对每个提供商运行相同的小脚本并测量实际发生的情况。从公共 Solana 端点开始确认您的工具正常工作,然后转向候选提供商。
curl -s https://solana.api.onfinality.io/public \
-X POST -H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "getSignaturesForAddress",
"params": ["<ACCOUNT_ADDRESS>", {"limit": 100}]
}'
运行几个变体并记录结果:
- 一个最近 slot 调用,如
getSlot,以检查基线延迟。 - 一个历史调用,如带限制的
getSignaturesForAddress,以检查读取密集型方法的吞吐量。 - 对较旧签名进行
getTransaction调用,以检查归档深度。 - 带过滤器的
getProgramAccounts调用,以查看该方法是否被允许以及它在负载下的行为。
对于 JavaScript 管道,相同的检查可以放入一个可以在提供商之间重用的小探针中:
const providers = [
{ name: "onfinality", url: "https://solana.api.onfinality.io/public" },
// add candidate endpoints here
];
async function probe({ name, url }) {
const started = Date.now();
const res = await fetch(url, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
jsonrpc: "2.0",
id: 1,
method: "getSlot",
params: [],
}),
});
const body = await res.json();
console.log(name, Date.now() - started, "ms", body.result ?? body.error);
}
providers.forEach(probe);
记录延迟、错误率以及每个方法是否被允许。当您试图保持成本可预测时,这些数据比任何营销页面都更有用。
共享 RPC 与专用节点用于读取密集型任务
共享 RPC API 是经济实惠的默认选择。您为访问付费而非硬件,无需管理升级,可以立即开始。对于仪表盘、轻量索引器和大多数应用后端,共享 API 是正确的首选。
当您的工作负载足够重以至于共享限制成为障碍,或者您需要大规模扫描的一致行为时,专用节点才有意义。使用专用 Solana 节点,您可以控制资源范围,这在运行长时间回填或频繁 getProgramAccounts 查询时很有帮助。权衡是成本和运维责任,因此通常只有在测量到共享访问是瓶颈后才值得转向专用基础设施。
一个实用的中间路径是在共享 API 上运行稳定、低量的流量,并将重批处理任务路由到专用节点。这保持了日常成本低廉,同时为昂贵的任务提供了运行空间。您可以查看专用节点选项和RPC 定价,了解这种拆分对您的管道会是什么样子。
保持分析成本可预测
一些习惯可以防止 Solana RPC 支出随着管道增长而上升。
- 积极缓存。 不会改变的 slot 数据、账户状态和交易结果可以本地存储,而不是重新获取。
- 批处理和分页。 在历史调用上使用限制和分页,而不是一次性拉取所有内容。
- 分离热路径和冷路径。 实时仪表盘和历史回填有不同的需求;如果可能,不要在同一计划上运行它们。
- 关注错误率。 错误率上升通常意味着您触及了限制,重试正在悄悄增加成本。
- 设置预算警报。 每周跟踪使用情况,以免失控的任务在月底让您措手不及。
如果您的管道正在增长,值得重新审视共享计划是否仍然适合,或者专用节点是否通过消除重试和限流来降低总成本。Solana RPC 网络页面列出了可用的端点和传输详细信息,支持的 RPC 网络显示了如果您的分析跨越多个链还有哪些可用。
仅根据价格选择时的常见陷阱
大多数后悔选择提供商的 analytics 团队犯了同样的几个错误。
- 假设所有方法都包含在内。 一些计划限制像
getProgramAccounts这样的重方法。在注册前确认支持。 - 忽略归档深度。 如果您的回填需要旧交易而提供商只保留最近历史,无论价格如何该计划都不可用。
- 忘记 WebSocket 需求。 实时仪表盘通常需要订阅,因此检查 WebSocket 传输是否可用。
- 低估重试。 限制严格的便宜计划在工程时间上的成本可能比限制稳定的稍贵计划更高。
- 没有规划故障转移。 单个端点是单点故障;知道如果它降级您将如何切换。
关键要点
- 对于 Solana 分析,每有用结果的成本比每次调用的成本更重要。
- 在比较价格之前,将您的工作负载模式(仪表盘、索引器或程序分析)匹配到正确的基础设施层级。
- 在承诺之前验证方法支持,特别是
getProgramAccounts,以及归档深度。 - 共享 RPC API 是经济实惠的默认选择;当重任务触及共享限制时,专用节点有帮助。
- 使用相同的探针脚本测试提供商,以便比较真实行为而非营销声明。
- 通过缓存、分页和使用警报保持成本可预测。
常见问题
共享 Solana RPC API 对于分析管道足够吗? 对于仪表盘和轻量索引器,通常是的。对于大规模历史回填或频繁的程序账户查询,一旦您测量到共享限制在哪里减慢您的速度,专用节点可能更合适。
哪些 Solana RPC 方法对分析最重要?
历史和账户方法,如 getSignaturesForAddress、getTransaction、getBlock 和 getProgramAccounts,是分析任务最依赖的,也是最可能被提供商限制的。
如何比较提供商而不多付钱? 对每个候选运行相同的小探针,记录延迟和错误率,并检查方法支持和归档深度。然后根据您测量的使用量而非标价比较定价。
我可以混合共享和专用基础设施吗? 可以。许多团队在共享 API 上运行稳定流量,并将重批处理任务路由到专用节点,这保持了日常成本低廉,同时为大规模扫描提供了运行空间。
在哪里可以看到 OnFinality 的 Solana 端点和计划? Solana RPC 网络页面列出了端点和传输详细信息,RPC 定价涵盖了计划选项。