摘要
Solana 的性能要求低延迟的 RPC 基础设施。最适合你的用例的最快 RPC 取决于工作负载类型、地理邻近性以及你是否需要共享或专用资源。本文解释了影响 Solana RPC 速度的关键因素以及如何评估提供商。
当开发者搜索“最快的 Solana RPC”时,他们通常意味着一件事:他们希望交易确认和数据获取的延迟尽可能小。但原始速度很少是一个单一数字。它取决于 RPC 节点的位置、提供商如何路由流量、你使用的是共享还是专用节点,以及你的应用程序发出哪种类型的请求。
本文分解了真正决定 Solana RPC 速度的因素,如何针对你自己的工作负载进行测量,以及如何选择在生产环境中(而不仅仅是在基准测试中)感觉快速的 RPC 设置。
快速建议:将 RPC 与你的工作负载匹配
在深入基准测试之前,决定你的应用程序需要什么。检查余额的钱包与每秒提交交易量的交易机器人具有不同的延迟要求。
| 工作负载 | 主要需求 | 推荐的 RPC 类型 |
|---|---|---|
| 简单的余额/账户查询 | 低延迟、高可用性 | 共享公共或托管 RPC |
| NFT 市场浏览 | 快速数据获取、用于更新的 WebSocket | 支持 WebSocket 的托管 RPC |
| DeFi 交易机器人 | 最小交易延迟、高吞吐量 | 具有低延迟路由的专用节点 |
| 索引/分析 | 高请求量、归档数据 | 具有归档访问权限的专用节点 |
如果你正在构建生产应用程序,共享公共 RPC 在轻量使用时可能很快,但在负载下可能成为瓶颈。像 OnFinality 这样的托管 RPC 服务提供优化的路由和专用节点选项,可以减少延迟并提高一致性。对于最苛刻的工作负载,专用 Solana 节点让你完全控制资源并避免嘈杂邻居效应。
什么真正使 Solana RPC 变快?
有几个因素影响感知的 RPC 速度。理解它们有助于你评估提供商并避免追逐错误的指标。
地理邻近性
你的应用程序与 RPC 节点之间的物理距离很重要。每个网络跃点都会增加延迟。如果你的用户在欧洲,新加坡的 RPC 节点会比法兰克福的感觉更慢,无论提供商的硬件如何。
在评估提供商时,询问他们的节点位于何处。一些提供商提供区域端点或允许你为专用部署选择节点位置。OnFinality 的全球节点网络有助于减少世界各地用户的网络延迟。
网络路径和路由
即使节点在地理上很近,你和节点之间的网络路径也可能不是最优的。使用优化路由(如 Anycast 或专用骨干连接)的提供商可以减少跃点数量并提高一致性。
节点硬件和配置
Solana RPC 节点的速度取决于其硬件。快速的 SSD、高带宽网络接口和足够的内存是必不可少的。但配置也很重要:未针对 Solana 的 gossip 和交易处理进行适当调整的节点可能会引入延迟。
托管提供商会为你处理这种调整。OnFinality 的基础设施旨在保持节点健康和响应迅速,因此你不必担心底层设置。
共享与专用资源
在共享 RPC 端点上,你的请求与其他用户竞争同一节点的资源。如果一个用户发送大量请求,你的延迟可能会飙升。专用节点隔离你的工作负载,提供更可预测的性能。
对于一致低延迟至关重要的应用程序,专用节点通常是正确的选择。OnFinality 提供专用的 Solana 节点,让你独占访问节点资源。
如何测量 Solana RPC 延迟
在选择提供商之前,测量你实际经历的延迟。一个简单的 curl 命令可以给你一个基线,但请记住,现实世界的延迟取决于你的位置和网络条件。
以下是使用 OnFinality 公共 Solana 端点的示例:
curl -X POST https://solana.api.onfinality.io/public \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"getHealth"}'
这将返回一个简单的健康状态。要测量往返时间,请使用 time:
time curl -X POST https://solana.api.onfinality.io/public \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"getHealth"}'
输出将显示总耗时。从你的生产环境多次运行此命令以获得平均值。但请注意,getHealth 是一个轻量级方法。对于更真实的测试,请尝试 getLatestBlockhash 或 getBalance。
随时间监控延迟
单次测量是不够的。网络条件会变化,中午很快的提供商可能在高峰时段变慢。设置定期检查延迟并记录结果的监控。
你可以使用一个简单的脚本每分钟 ping 端点并记录响应时间。这有助于你识别模式并在更长的时间内比较提供商。
WebSocket 连接的作用
许多 Solana 应用程序依赖 WebSocket 连接进行实时更新,例如账户变更或交易确认。WebSocket 延迟与 HTTP RPC 延迟同样重要。
OnFinality 为 Solana 提供 WebSocket 端点,允许你订阅更新而无需轮询。例如,你可以订阅账户变更:
const WebSocket = require('ws');
const ws = new WebSocket('wss://solana.api.onfinality.io/public-ws');
ws.on('open', function open() {
ws.send(JSON.stringify({
jsonrpc: '2.0',
id: 1,
method: 'accountSubscribe',
params: [
'Vote111111111111111111111111111111111111111',
{ encoding: 'base58' }
]
}));
});
ws.on('message', function incoming(data) {
console.log(data.toString());
});
在评估提供商时,测试 HTTP 和 WebSocket 延迟。提供商可能具有快速的 HTTP 响应,但 WebSocket 连接缓慢,这会损害实时功能。
比较 RPC 提供商:需要注意什么
在比较 Solana RPC 提供商时,关注影响应用程序性能的因素。以下是一个清单:
- 节点位置:节点在哪里?你能选择区域吗?
- 传输支持:提供商是否同时提供 HTTP 和 WebSocket?
- 速率限制:请求限制是什么?是否有明确文档?
- 专用选项:如果需要,你能获得专用节点吗?
- 归档数据:你需要历史状态吗?提供商是否提供归档节点?
- 正常运行时间记录:提供商的历史正常运行时间是多少?(查找发布的状态页面。)
- 支持:如果遇到问题,可获得什么级别的支持?
OnFinality 提供一系列 Solana RPC 选项,从共享公共端点到专用节点。你可以查看 Solana 网络页面 了解可用端点和功能的详细信息。
使你的 RPC 感觉缓慢的常见陷阱
有时瓶颈不是 RPC 提供商——而是你的应用程序如何使用 RPC。以下是常见错误:
过于频繁地轮询
如果你每秒轮询新块或账户状态,你可能会达到速率限制或产生不必要的负载。尽可能使用 WebSocket 订阅而不是轮询。
未高效使用 getLatestBlockhash
发送交易时,你需要一个最近的区块哈希。为每笔交易获取它会增加延迟。相反,获取一次并在其有效窗口内(通常为 150 个区块)为多笔交易重用。
忽略交易确认策略
Solana 交易可以在不同级别确认。如果你等待 finalized 确认,则比 confirmed 花费更长的时间。为你的用例选择适当的承诺级别。
使用没有故障转移的单一端点
如果你的 RPC 端点宕机,你的应用程序也会宕机。使用多个端点或提供故障转移的提供商以保持可用性。
何时考虑专用 Solana 节点
专用节点提供最高级别的性能和可控性。在以下情况下值得考虑:
- 你的应用程序具有高请求量,可能在共享端点上受到限制。
- 你需要对交易等时间敏感操作保持稳定低延迟。
- 你需要自定义配置或访问特定的 Solana RPC 方法。
- 你想避免其他用户影响你的性能的风险。
OnFinality 提供专用的 Solana 节点,可以部署在靠近用户的区域。你可以通过 OnFinality 平台管理它们,该平台处理监控和维护。
关键要点
- Solana RPC 速度受地理邻近性、网络路由、节点硬件以及资源是共享还是专用的影响。
- 使用简单的
curl命令从你的生产环境测量延迟,并随时间监控以获得真实情况。 - WebSocket 延迟对实时应用程序很重要;测试 HTTP 和 WebSocket 端点。
- 根据节点位置、传输支持、速率限制、专用选项和归档数据比较提供商。
- 避免常见陷阱,如过度轮询和低效的区块哈希使用。
- 对于苛刻的工作负载,专用 Solana 节点提供最可预测的性能。
常见问题解答
最快的 Solana RPC 端点是什么?
没有适合所有人的单一“最快”端点。对你来说最快的端点取决于你的地理位置和工作负载。使用上述测量技术从你自己的环境比较端点。
如何测试 Solana RPC 延迟?
使用 curl 命令测量往返时间,并从你的生产环境多次运行。对于更全面的测试,在更长时间内监控延迟。
专用 Solana 节点比共享 RPC 更快吗?
专用节点可以提供更一致的性能,因为你不与其他用户共享资源。然而,实际速度取决于节点位置和配置。
OnFinality 是否为 Solana 提供 WebSocket 支持?
是的,OnFinality 为 Solana 提供 WebSocket 端点。你可以在 Solana 网络页面 找到 WebSocket URL。
如何在共享和专用 Solana RPC 之间选择?
考虑你的请求量、延迟要求和预算。如果你需要一致的低延迟和高吞吐量,专用节点通常值得投资。对于较轻的工作负载,共享托管 RPC 可能就足够了。