摘要
Solana 公共节点是一个免费的、社区运营的 RPC 端点,允许开发者无需运行自己的基础设施即可与 Solana 集群交互。虽然方便用于原型设计和低流量测试,但公共节点有严格的速率限制且无 SLA,不适合生产级 dApp。本文解释了公共节点的工作原理、局限性以及何时升级到专用 RPC 提供商。
Solana 公共节点决策清单
在公共节点和专用 RPC 提供商之间做出选择之前,请评估以下因素:
| 标准 | 检查内容 | 重要性 |
|---|---|---|
| 请求量 | 估算每日 RPC 调用次数 | 公共节点有严格的速率限制(例如,每个 IP 每 10 秒 100 次请求) |
| SLA 要求 | 是否需要正常运行时间保证? | 公共节点无 SLA;专用提供商提供高正常运行时间 |
| 数据新鲜度 | 是否需要最新区块数据? | 公共节点可能落后于最新区块 |
| WebSocket 支持 | 是否需要实时订阅? | 公共 WebSocket 端点通常有更严格的限制 |
| 隐私 | 交易数据暴露 | 公共节点可以看到所有请求;专用节点隔离您的流量 |
| 地理延迟 | 您的用户在哪里? | 公共节点区域有限;专用提供商提供全球 PoP |
| 归档数据 | 是否需要历史状态? | 公共节点通常只提供最近的插槽 |
| 自定义配置 | 是否需要特定的 RPC 方法或标志? | 公共节点是固定的;专用节点可以调整 |
什么是 Solana 公共节点?
Solana 公共节点是由 Solana 基金会或第三方运营的 JSON-RPC 端点,任何人都可以无需认证即可使用。这些端点允许开发者发送交易、查询账户余额和获取区块数据,而无需运行自己的验证器或 RPC 节点。
Solana 目前提供三个公共集群:
- Mainnet Beta:
https://api.mainnet-beta.solana.com - Devnet:
https://api.devnet.solana.com - Testnet:
https://api.testnet.solana.com
这些端点是免费开放的,但它们有显著的约束,使其不适合生产应用。
公共节点如何工作
公共节点通常由 Solana 基金会或社区成员作为生态系统服务运行。它们接受传入的 HTTP 和 WebSocket 连接,并将其转发到 Solana 集群。由于它们被所有用户共享,因此会实施速率限制以防止滥用并确保公平使用。
与公共节点的典型交互如下所示:
curl https://api.mainnet-beta.solana.com -X POST -H "Content-Type: application/json" -d '
{
"jsonrpc": "2.0",
"id": 1,
"method": "getSlot"
}
'
这将返回当前的插槽号。虽然简单,但依赖此端点处理生产流量是有风险的。
速率限制和限制
公共 Solana 节点根据集群和端点实施不同的速率限制。截至撰写本文时,常见限制包括:
- Mainnet Beta 每个 IP 每 10 秒 100 次请求
- Devnet 每个 IP 每 10 秒 200 次请求
- Testnet 每个 IP 每 10 秒 500 次请求
这些限制可能会随时更改,恕不另行通知。超出限制将导致 HTTP 429 响应或连接断开。对于任何拥有超过少量用户的应用,这些限制将成为瓶颈。
此外,公共节点可能:
- 限制诸如
getProgramAccounts或getSignaturesForAddress等重型方法 - 不允许长时间 WebSocket 订阅
- 如果节点落后于集群最新区块,则提供过时数据
何时使用公共节点
公共节点适用于:
- 快速原型设计:在开发期间测试脚本或智能合约
- 低流量查询:手动检查账户余额或交易状态
- 学习和实验:在不投入基础设施的情况下了解 Solana 的 RPC API
- 黑客马拉松和演示:正常运行时间不关键的短期项目
例如,为一次性脚本获取最新区块哈希:
const web3 = require('@solana/web3.js');
const connection = new web3.Connection('https://api.mainnet-beta.solana.com');
connection.getRecentBlockhash().then(console.log);
这在本地测试中运行良好,但在生产环境中部署会很快达到速率限制。
何时升级到专用 RPC 提供商
如果您的应用服务真实用户、每天处理超过几百次请求或需要可靠性能,则需要专用 RPC 提供商。以下是需要切换的迹象:
- 速率限制错误:您的应用频繁收到 429 响应
- 延迟不一致:响应时间变化很大
- WebSocket 断开:订阅意外断开
- 数据过时:查询返回过时的插槽信息
- 无支持:端点宕机时无法获得帮助
专用提供商提供:
- 更高或明确的速率限制:根据您的流量定制
- 全局负载均衡:不同区域的多个节点
- SLA 支持的正常运行时间:保证可用性
- 专用基础设施:隔离节点以获得一致性能
- 归档和追踪数据:访问历史状态
- 自定义配置:根据您的用例调整 RPC 标志
如何选择 Solana RPC 提供商
评估提供商时,请考虑:
- 吞吐量:他们能否处理您的峰值请求量?
- 延迟:他们的节点相对于您的用户位于何处?
- 可靠性:他们的历史正常运行时间如何?是否发布状态页面?
- 数据访问:他们是否支持归档、WebSocket 和 gRPC?
- 定价:是否可预测且可扩展?
OnFinality 提供 Solana RPC 端点,包括共享和专用选项,支持 Mainnet、Devnet 和 Testnet。您可以从免费层开始,并根据需要扩展。查看我们的 RPC 定价 了解详情。
公共节点的常见陷阱
1. 假设可用性
公共节点可能在没有警告的情况下宕机。Solana 基金会的端点在网络拥塞期间曾出现过中断。始终准备一个备用端点。
2. 忽略速率限制
即使是简单的 dApp,如果频繁轮询,也可能超过每 10 秒 100 次请求。实施缓存和退避策略。
3. 在生产中使用公共节点
公共节点明确不适用于生产。Solana 文档警告:“这些端点受速率限制,且不保证可用。”
4. 不监控延迟
公共节点延迟在高流量期间可能飙升。使用监控工具跟踪响应时间,并在需要时切换提供商。
设置可靠的 Solana 连接
对于生产环境,配置您的应用使用带有备用逻辑的专用 RPC 端点:
const connection = new web3.Connection(
'https://solana.api.onfinality.io/public',
{
commitment: 'confirmed',
confirmTransactionInitialTimeout: 60000
}
);
此示例使用 OnFinality 的公共端点,它提供比默认 Solana 基金会端点更高的限制。为了获得更好的性能,请考虑 专用节点。
关键要点
- Solana 公共节点是免费的,但有严格的速率限制且无 SLA。
- 它们仅适用于原型设计和低流量测试。
- 生产应用需要具有保证吞吐量和正常运行时间的专用 RPC 提供商。
- 选择提供商时,评估吞吐量、延迟、可靠性和定价。
- 始终实施备用端点和缓存,以最小化对任何单个节点的依赖。
常见问题
问:我可以在生产 dApp 中使用 Solana 公共节点吗? 答:不建议。公共节点有速率限制、无 SLA,并且在网络拥塞期间可能不可用。请使用专用 RPC 提供商进行生产。
问:Solana 公共节点的速率限制是多少? 答:Mainnet Beta 大约为每个 IP 每 10 秒 100 次请求,但限制可能会更改。请查看官方 Solana 文档以获取最新信息。
问:如何找到 Solana 公共节点列表? 答:Solana 基金会为每个集群发布端点。社区维护的列表(如 extrnode GitHub 仓库)汇总了许多公共端点。
问:公共节点和专用节点有什么区别? 答:公共节点由所有用户共享,有速率限制且无保证。专用节点是为您独家使用而配置的,提供更高的吞吐量、更低的延迟和 SLA。
问:OnFinality 是否提供 Solana 公共节点? 答:是的,OnFinality 为 Solana Mainnet、Devnet 和 Testnet 提供公共端点。对于生产工作负载,我们推荐我们的专用节点服务。查看我们的 支持的网络 了解详情。