Logo
新用户订阅 RPC,首月享 6.5 折优惠查看优惠
RPC Assistant

如何为你的工作负载评估最快的 Solana RPC?

摘要

没有单一最快的 Solana RPC 端点,因为延迟取决于你的应用运行位置、调用的方法以及是否需要 WebSocket 或归档数据。实用的方法是从你自己的区域针对实际使用的方法测量往返时间,然后在共享 RPC 和专用 Solana 节点之间做出选择。OnFinality 提供 Solana RPC API 访问和专用节点基础设施,因此你可以从共享端点开始,当工作负载需要时再迁移到专用容量。

如何确定哪个 Solana RPC 对你来说最快

“最快”不是端点的固定属性。它是一种测量结果,取决于四件事:

  1. 你的应用在哪里运行。 与你的服务器位于同一区域的节点通常会胜过世界另一端的节点。
  2. 你调用哪些方法。 getLatestBlockhashsendTransaction 的行为与 getProgramAccounts 或长时间范围的 getSignaturesForAddress 非常不同。
  3. 你是否需要 WebSocket。 流式 slotSubscribelogsSubscribe 的延迟特性与一次性 HTTP 调用不同。
  4. 你是否共享端点。 共享 RPC 池会吸收许多用户的流量;专用节点为你的工作负载提供自己的容量。

快速决策方法:

你的情况首先尝试什么
原型开发、低流量、无严格延迟目标通过 HTTPS 的共享 Solana RPC
需要快速获取最新区块哈希的交易机器人或钱包共享 RPC,然后从你的区域进行基准测试
高请求量、大量 getProgramAccounts 或日志查询专用 Solana 节点
实时订阅(slot、日志、账户变更)支持 WebSocket 的端点
合规或隔离要求你控制的专用节点

如果你还不确定,先从共享端点开始,进行测量,只有当数据证明合理时才迁移到专用容量。OnFinality 同时提供 Solana RPC API 访问专用节点,因此你可以在不更换提供商的情况下完成过渡。

什么真正让 Solana RPC 变快

Solana 大约每 400 毫秒产生一个区块,因此对于大多数应用来说,网络本身不是瓶颈。你感受到的延迟通常来自你的代码与响应请求的验证者或 RPC 节点之间的路径。

关键因素:

  • 地理距离。 往返时间主要由物理距离决定。从法兰克福到东京节点的请求在任何处理发生之前就会增加几十毫秒。
  • 节点健康状况和负载。 落后于链尖或请求饱和的节点无论距离如何都会响应缓慢。
  • 方法成本。getBalance 这样的轻量方法返回很快。像 getProgramAccounts 这样的重量方法会扫描大量状态,可能需要更长时间。
  • 连接复用。 每个请求建立新的 TLS 连接会增加开销。Keep-alive 和连接池很重要。
  • WebSocket 与 HTTP。 订阅将数据推送给您,这可能比轮询更快,但需要稳定的连接和重连逻辑。

这就是为什么仅列出提供商的“最快 Solana RPC”列表不太有用。正确的问题是:从哪个区域,以什么量级,对哪些方法最快?

从你自己的环境对 Solana RPC 延迟进行基准测试

不要相信从别人的机器上测量的延迟数字。从你的应用实际运行的地方进行测量。

使用 curl 的简单 HTTP 计时循环:

# 替换为你自己的端点(共享或专用)
ENDPOINT="https://solana.api.onfinality.io/public"

for i in $(seq 1 20); do
  curl -s -o /dev/null -w "%{time_total}\n" \
    -X POST "$ENDPOINT" \
    -H "Content-Type: application/json" \
    -d '{"jsonrpc":"2.0","id":1,"method":"getLatestBlockhash","params":[{"commitment":"confirmed"}]}'
done

从每个候选区域运行此命令,并比较分布,而不仅仅是平均值。查看中位数和尾部(p95、p99),因为尾部延迟才是伤害交易机器人和面向用户钱包的因素。

要进行更真实的测试,请对你应用实际调用的方法进行基准测试:

# 更重的方法:单独测量
curl -s -o /dev/null -w "%{time_total}\n" \
  -X POST "$ENDPOINT" \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"getSlot","params":[{"commitment":"processed"}]}'

使用 fetchperformance.now() 的 JavaScript 版本:

const endpoint = "https://solana.api.onfinality.io/public";

async function timeCall(method, params = []) {
  const start = performance.now();
  const res = await fetch(endpoint, {
    method: "POST",
    headers: { "Content-Type": "application/json" },
    body: JSON.stringify({ jsonrpc: "2.0", id: 1, method, params }),
  });
  await res.json();
  return performance.now() - start;
}

(async () => {
  const samples = [];
  for (let i = 0; i < 20; i++) {
    samples.push(await timeCall("getLatestBlockhash", [{ commitment: "confirmed" }]));
  }
  samples.sort((a, b) => a - b);
  console.log("median ms:", samples[Math.floor(samples.length / 2)].toFixed(1));
  console.log("p95 ms:", samples[Math.floor(samples.length * 0.95)].toFixed(1));
})();

从同一台机器、在一天中的同一时间,对每个你正在考虑的端点运行相同的脚本。在高峰和非高峰时段重复。

共享 RPC 与专用 Solana 节点

一旦你有了数据,下一个决定是共享端点是否足够,还是需要专用容量。

维度共享 Solana RPC专用 Solana 节点
设置工作量连接即可使用需要配置和设置
成本模型基于使用量,入门成本较低固定容量,高流量下可预测
负载下的延迟随其他租户变化对你的工作负载保持一致
重量方法(getProgramAccounts、日志范围)可能受限或较慢根据你的需求调整大小
WebSocket 订阅共享端点支持支持,拥有自己的连接预算
隔离性共享基础设施隔离到你的项目
最适合原型、钱包、中等流量交易系统、索引器、高吞吐量应用

OnFinality 的 RPC API 服务 涵盖共享访问,专用节点 在共享性能不足时为你提供隔离容量。查看 RPC 定价 了解两种模型在你的流量下的比较。

链设置和连接详情

对于 Solana 主网,标准连接详情为:

设置
链名称Solana Mainnet
原生货币SOL(9 位小数)
HTTP RPChttps://solana.api.onfinality.io/public
WebSocket RPCwss://solana.api.onfinality.io/public-ws
区块浏览器https://explorer.solana.com

JavaScript 中的钱包或应用网络配置:

const solanaMainnet = {
  name: "Solana Mainnet",
  rpcUrl: "https://solana.api.onfinality.io/public",
  wsUrl: "wss://solana.api.onfinality.io/public-ws",
  explorer: "https://explorer.solana.com",
  nativeCurrency: { name: "SOL", symbol: "SOL", decimals: 9 },
};

如果你在主网之前进行测试,请使用 Solana Devnet 并通过 Solana CLI 或钱包从 devnet 水龙头请求空投。Devnet 端点与主网分开,不应用于生产流量。

WebSocket 订阅及其对延迟的重要性

在紧密循环中轮询 getSlotgetLatestBlockhash 会浪费请求,并且仍然落后于链尖。订阅会在更新发生时推送。

// 使用 ws 端点获取 slot 更新
const ws = new WebSocket("wss://solana.api.onfinality.io/public-ws");

ws.onopen = () => {
  ws.send(JSON.stringify({
    jsonrpc: "2.0",
    id: 1,
    method: "slotSubscribe",
    params: [],
  }));
};

ws.onmessage = (event) => {
  const data = JSON.parse(event.data);
  if (data.method === "slotNotification") {
    console.log("new slot:", data.params.result.slot);
  }
};

WebSocket 连接需要重连逻辑和心跳处理。如果你的应用无法容忍连接断开,请为关键读取(如 sendTransaction 之前的区块哈希获取)保留 HTTP 回退。

追求 Solana RPC 速度时的常见故障模式

  • 过期的区块哈希。 如果你的 RPC 落后于链尖,sendTransaction 会因区块哈希过期而失败。在签名前立即获取新的区块哈希。
  • 共享端点上的速率限制。 大量轮询或大型 getProgramAccounts 调用可能触及限制。批量请求或迁移到专用容量。
  • 错误的区域。 错误区域的快速提供商对你来说很慢。始终从你自己的基础设施进行基准测试。
  • 忽略尾部延迟。 良好的中位数但糟糕的 p99 仍会导致超时。同时跟踪两者。
  • 没有故障转移。 如果你唯一的端点发生事故,你的应用就会停止。配置辅助端点和健康检查。

你可以定期运行的最小监控探针:

#!/usr/bin/env bash
ENDPOINT="https://solana.api.onfinality.io/public"
START=$(date +%s%3N)
RESP=$(curl -s -X POST "$ENDPOINT" \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"getHealth"}')
END=$(date +%s%3N)
echo "latency_ms=$((END-START)) response=$RESP"

当延迟超过阈值或 getHealth 不再返回 ok 时发出警报。

关键要点

  • “最快”的 Solana RPC 是一种测量结果,而不是标签。从你自己的区域针对实际调用的方法进行基准测试。
  • 共享端点适合原型和中等流量;专用节点为高流量或重量方法工作负载提供一致的延迟和隔离。
  • 使用 WebSocket 订阅获取实时数据,但为关键写入保留 HTTP 回退。
  • 关注尾部延迟(p95、p99),而不仅仅是平均值。
  • 始终配置辅助端点并监控健康状况,这样单个事故不会导致应用宕机。
  • OnFinality 提供 Solana RPC API 访问和专用节点基础设施;详情请参阅 支持的 RPC 网络RPC 定价

常见问题

是否有一个 Solana RPC 端点总是最快的? 不。延迟取决于你的区域、调用的方法和端点负载。从你自己的环境进行测量。

我需要专用 Solana 节点吗? 只有当共享端点无法满足你的延迟、流量或隔离需求时才需要。从共享开始,进行基准测试,然后扩展。

OnFinality 支持 Solana WebSocket 吗? 是的。Solana 主网端点支持 HTTP 和 WebSocket 传输。连接详情请参阅 Solana 网络页面

如何快速测试 Solana RPC 速度? 从同一台机器对每个候选端点运行简短的 curlfetch 循环,并比较中位数和 p95 延迟。

devnet 呢? 使用 Solana Devnet 进行测试,使用主网端点进行生产。不要混用。

在哪里可以比较提供商选项? 评估标准请参阅 如何选择 RPC 提供商,成本模型请参阅 RPC 定价

RPC 知识库

相关 RPC 内容

网络 RPCSolana

Solana Public RPC Endpoints

Solana public RPC endpoints are free, shared JSON-RPC gateways that let developers read network state, send transactions, and subscribe to updates wit...

区块链基础设施

加密节点托管:何时租用基础设施而非自行运行

加密节点托管是指在第三方基础设施上运行区块链节点,而非自行托管。本文解释了构建与购买的权衡,帮助您评估托管选项,并提供决策清单,以便在自管理服务器、VPS提供商和OnFinality等托管节点服务之间做出选择。...

网络 RPCArbitrum

什么是 Arbitrum 节点,你应该如何运行或访问它们?

Arbitrum 节点是维护 Arbitrum 链(如 Arbitrum One 和 Arbitrum Sepolia)状态的软件客户端。你可以运行自己的全节点或归档节点来独立验证链,或者使用托管的 RPC 提供商来访问,而无需操作基础设施。本指南解释了节点类型、运营权衡,以及如何决定是自托管还是使...

RPC 提供商选择Solana

如何为区块链项目选择最佳的 Solana RPC

选择合适的 Solana RPC 提供商对于您的 dApp、交易机器人或索引服务的性能和可靠性至关重要。本指南解释了公共、共享和专用 Solana RPC 端点之间的主要区别,并提供了一个实用的评估框架,帮助您将基础设施与项目的工作负载、延迟和数据需求相匹配。 我们涵盖了吞吐量、WebSocket ...

网络 RPCBittensor

什么是 Bittensor 网络,如何连接它?

Bittensor 是一个去中心化的机器智能网络,其中独立的子网生产数字商品,如计算、推理和存储,贡献者赚取 TAO。本文解释了网络的架构、如何通过 RPC 端点连接,以及在 Bittensor 上构建时选择基础设施的注意事项。...

网络 RPCSolana

什么是面向生产级 dApp 的最佳 Solana RPC 提供商?

# 什么是面向生产级 dApp 的最佳 Solana RPC 提供商? 最佳 Solana RPC 提供商之所以重要,是因为 Solana 应用依赖稳定的端点访问来执行读取、交易、仪表盘和后端工作流。合适的提供商应匹配你的工作负载,支持你所需的网络和测试网,使限制透明可见,并在共享 RPC 不再够用...

永远不用担心基础设施

OnFinality 消除了 DevOps 的繁重工作,让您能够更聪明、更快地构建。

开始