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

如何评估用于性能监控的以太坊 RPC 服务

摘要

选择用于性能监控的以太坊 RPC 服务,需要超越单纯的吞吐量。你需要一致的延迟、可靠的 WebSocket 连接,以及访问 debug 或 trace 方法以诊断问题。本文概述了需要跟踪的关键指标、重要的方法,以及如何构建一个能在用户发现问题之前捕获问题的监控设置。

在选择以太坊 RPC 提供商之前要衡量什么

如果你正在寻找用于性能监控的最佳以太坊 RPC 服务,你可能不仅仅是在寻找一个返回区块的端点。你可能运行着索引器、监控仪表板或数据管道,这些依赖于对以太坊状态的一致、低延迟访问。真正的问题是:哪家提供商能为你提供早期发现问题所需的可见性和可靠性?

以太坊 RPC 的性能监控不是单次速度测试。它是关于了解提供商在不同工作负载下的行为:高频轮询、长时间运行的 WebSocket 订阅以及昂贵的 trace 调用。本文为你提供了一个评估提供商的实用框架、要跟踪的具体指标,以及如何构建一个有效的监控设置。

快速建议:将提供商与你的监控工作负载匹配

在深入细节之前,这里有一个决策指南,可帮助你缩小选项范围:

  • 如果你需要面向用户的 dApp 的低延迟 JSON-RPC,请寻找具有多个区域端点和经过健康检查的负载均衡器的提供商。OnFinality 提供托管以太坊 RPC,支持 HTTP 和 WebSocket,你可以在 https://eth.api.onfinality.io/public 查看公共端点。
  • 如果你需要深层历史数据或 trace 级调试,你需要一个启用了 trace_ 和 debug_ 方法的归档节点。并非所有提供商都提供这些,因此在承诺之前请验证方法支持。
  • 如果你正在构建依赖 WebSocket 订阅的监控系统,请测试提供商如何处理重连和丢失消息。在负载下丢弃订阅的提供商将破坏你的监控。
  • 如果你需要保证生产环境的吞吐量,请考虑专用节点。共享公共端点适合开发,但它们可能受到速率限制或存在噪声。OnFinality 的 专用节点 服务为你提供隔离容量。

有关提供商选择的更广泛介绍,请参阅我们的 RPC 提供商选择指南。

以太坊 RPC 监控的重要指标

在比较以太坊 RPC 服务时,请在有意义的时间段(至少一周)内并在实际负载下跟踪以下性能指标:

指标检查内容重要性
延迟(p50、p95、p99)eth_blockNumber 和 eth_getBalance 的首字节时间高 p95 延迟表示抖动,可能破坏对时间敏感的监控
吞吐量无错误情况下持续每秒请求数确定提供商能否处理你的轮询频率
WebSocket 稳定性断开连接和丢失订阅事件的数量对实时事件监控至关重要
错误率HTTP 429、5xx 和 JSON-RPC 错误响应高错误率表示速率限制或服务器问题
方法支持trace_、debug_、eth_getLogs 大范围查询的可用性深度调试和历史分析所需
归档数据深度历史状态可追溯多远重放过去事件或调试旧交易所需

用于性能监控和调试的关键方法

不同的监控任务需要不同的 RPC 方法。以下是你在任何提供商处都应测试的方法:

  • eth_blockNumber:最简单的健康检查。如果此调用缓慢或失败,则说明有问题。
  • eth_getLogs:用于获取合约或主题的事件日志。提供商可能限制单次调用可查询的区块范围。
  • eth_subscribe:用于通过 WebSocket 进行实时事件流传输。测试提供商发送新事件的速度以及是否优雅地处理重连。
  • trace_transaction(或 debug_traceTransaction):重放交易以获取详细的执行跟踪。这对于调试失败交易或了解 gas 使用情况至关重要。
  • eth_getBlockByNumber(包含完整交易):对索引有用,但可能很重。检查提供商是否支持而不进行速率限制。

如何构建简单的 RPC 监控探针

你可以编写一个小型脚本,用于监控任何以太坊 RPC 端点的健康状态和延迟。以下是使用 Node.js 和 ethers 库的示例:

const { ethers } = require('ethers');

const url = 'https://eth.api.onfinality.io/public';
const provider = new ethers.JsonRpcProvider(url);

async function checkHealth() {
  const start = Date.now();
  try {
    const blockNumber = await provider.getBlockNumber();
    const latency = Date.now() - start;
    console.log(`Block: ${blockNumber}, Latency: ${latency}ms`);
  } catch (error) {
    console.error('RPC health check failed:', error.message);
  }
}

// Run every 10 seconds
setInterval(checkHealth, 10000);

此脚本为你提供基本的延迟趋势。对于生产环境,你需要跟踪 p95/p99、错误率和 WebSocket 连接。

WebSocket 监控:不要忽视实时数据

如果你的监控依赖于待处理交易或新区块,你需要稳定的 WebSocket 连接。以下是使用 ethers 测试提供商 WebSocket 支持的方法:

const { WebSocketProvider } = require('ethers');

const wsUrl = 'wss://eth.api.onfinality.io/public/ws'; // Replace with actual WebSocket endpoint
const provider = new WebSocketProvider(wsUrl);

provider.on('block', (blockNumber) => {
  console.log('New block:', blockNumber);
});

// Handle disconnects
provider.websocket.on('close', () => {
  console.log('WebSocket closed, reconnecting...');
  // Implement reconnect logic here
});

注意:上述 WebSocket URL 仅用于说明。请查看提供商的文档以获取确切的端点。OnFinality 在其以太坊网络上支持 WebSocket,你可以在 以太坊网络页面 找到正确的 URL。

比较以太坊 RPC 提供商:需要注意什么

当你比较提供商时,你不仅仅是在比较价格。你是在比较运营特性。以下是一个实用的比较框架:

  • OnFinality:提供托管以太坊 RPC 服务,支持 HTTP 和 WebSocket 端点。你可以从公共端点开始测试,然后迁移到专用节点用于生产环境。RPC 定价 页面显示了层级,支持的网络 页面列出了所有可用链。
  • 其他主要提供商(例如 Infura、Alchemy、QuickNode)也提供以太坊 RPC。它们在免费层级限制、归档数据可用性以及附加功能(如 Mempool 观察或增强 API)方面有所不同。

在评估任何提供商时,请问以下问题:

  1. 他们是否提供归档节点? 如果你需要历史状态,这是不可协商的。
  2. 速率限制是多少? 公共端点通常有严格限制。对于监控,你需要可预测的吞吐量。
  3. 是否有 WebSocket 端点? 它是否可靠地支持订阅?
  4. 正常运行时间 SLA 是什么? 虽然没有提供商能保证 100%,但明确的 SLA 表明信心。
  5. 扩展容易吗? 你能在不更改代码的情况下从共享端点升级到专用节点吗?

以太坊 RPC 监控中的常见陷阱

即使使用好的提供商,你也可能遇到问题。以下是常见陷阱以及如何避免它们:

  • 使用单一端点:如果你的监控依赖于一个 RPC URL,你就有一个单点故障。使用多个提供商或至少使用故障转移机制。
  • 忽略 WebSocket 重连:如果你的 WebSocket 断开,你可能会错过关键事件。实现带有退避的自动重连。
  • 不测试大范围的 eth_getLogs:一些提供商限制区块范围以防止滥用。使用你实际需要的范围进行测试。
  • 假设所有提供商都支持 trace 方法:Trace API 是资源密集型的。并非所有提供商都在共享计划上启用它们。在依赖它们之前进行验证。
  • 忘记速率限制:即使是付费计划也有限制。监控你的使用情况并在达到上限之前设置警报。

如何设置生产级监控堆栈

对于严肃的监控设置,你需要的不仅仅是一个简单的脚本。以下是一个建议的架构:

  1. 健康检查端点:每隔几秒使用轻量级调用(如 eth_blockNumber)来检测中断。
  2. 延迟跟踪:记录每个请求的时间,并随时间计算百分位数。
  3. WebSocket 订阅监控:订阅新区块,并测量区块时间戳与你收到它之间的延迟。
  4. 错误警报:设置错误率超过阈值或任何 429/5xx 响应的警报。
  5. 数据冗余:使用至少两个独立的 RPC 提供商来交叉检查数据并提供故障转移。

你可以使用 Prometheus 和 Grafana 等工具来收集和可视化这些指标。关键是有一个基线,以便检测异常。

关键要点

  • 以太坊 RPC 的性能监控涉及延迟、吞吐量、WebSocket 稳定性和方法支持,而不仅仅是单次速度测试。
  • 选择提供你所需方法的提供商,包括 trace 和归档数据(如果需要)。
  • 构建一个同时测试 HTTP 和 WebSocket 端点的监控探针,并随时间跟踪百分位数。
  • 使用多个提供商以实现冗余,并制定清晰的故障转移计划。
  • OnFinality 提供支持 HTTP 和 WebSocket 的以太坊 RPC,你可以根据需求增长从公共端点扩展到专用节点。

常见问题解答

问:用于性能监控的最佳以太坊 RPC 服务是什么?

答:最佳服务取决于你的具体需求。寻找提供低延迟、高吞吐量、WebSocket 支持以及你所需方法(如 trace)的提供商。OnFinality 是一个值得考虑的选项,你可以根据本文中的标准与其他提供商进行比较。

问:如何测量 RPC 延迟?

答:使用脚本对 eth_blockNumber 等方法进行计时。随时间跟踪 p50、p95 和 p99 延迟,以了解分布情况。

问:监控是否需要专用节点?

答:如果你运行大规模监控系统且请求量高,专用节点可提供可预测的性能。对于小型项目,共享端点可能就足够了。

问:什么是 trace 方法,为什么它们很重要?

答:像 trace_transaction 这样的 trace 方法可以让你查看交易的内部执行情况。它们对于调试复杂的合约交互以及某些监控工具至关重要。

问:如何避免速率限制?

答:选择具有明确速率限制且符合你使用情况的提供商,如果你需要更高吞吐量,请考虑专用节点。监控你的使用情况以保持在限制范围内。

RPC 知识库

相关 RPC 内容

网络 RPCSonic

选择 Sonic RPC 提供商时应该关注什么?

# 选择 Sonic RPC 提供商时应该关注什么? Sonic RPC 提供商之所以重要,是因为 Web3 应用依赖稳定的端点访问来进行读取、交易、仪表盘和后端工作流。正确的配置应匹配你的工作负载,支持你所需的网络和测试网,使限制可见,并在共享 RPC 不再足够时提供扩展路径。 对于 Sonic ...

网络 RPCMantle

Mantle RPC:链设置、端点和如何选择提供商

Mantle 是一个兼容 EVM 的第 2 层 rollup,采用模块化架构,利用以太坊保证安全性,并使用自己的数据可用性层。要连接钱包和 dApp,您需要正确的 Mantle RPC 端点、链 ID 和网络设置。本页涵盖必要的链设置、公共和私有端点选项,以及如何为生产工作负载评估 RPC 提供商。...

区块链基础设施

什么是区块链节点基础设施,何时应租用而不是自行运行?

区块链节点基础设施是维持区块链网络运行的硬件、软件和网络。它包括全节点、归档节点和验证器,每种都有不同的存储和计算需求。运行自己的节点可以让你掌控一切,但也带来了同步、监控和扩展等运维负担。像 OnFinality 这样的托管 RPC 服务提供了可靠的节点基础设施访问,而无需自行托管的负担。...

网络 RPCMonad

什么是 peaq 主网,如何连接?

peaq 主网是面向 DePIN(去中心化物理基础设施网络)经济的生产级 Layer 1 区块链,旨在支持现实世界的设备和机器工作负载。本文解释了 peaq 主网是什么、其主要功能,以及如何使用 RPC 端点、链设置和实际示例连接您的应用程序。...

RPC 提供商选择Solana

顶级 Solana RPC 提供商的速率限制选项如何比较?

Solana RPC 提供商在实施速率限制方面有所不同:有些按 IP 限制每秒请求数,有些按计算单元或积分计量,高级套餐提供更高吞吐量或专用节点。本文比较了主要提供商的速率限制模型,并帮助您为工作负载选择合适的方案。...

网络 RPCxx network

什么是 xx network,开发者如何与之交互?

xx network 是一个抗量子、注重隐私的区块链,具有去中心化的混合网络(mixnet)。它基于 Substrate 链,并为开发者提供 RPC 端点。本文解释了该网络的架构、如何通过 RPC 连接,以及在选择基础设施以在 xx 上构建时需要考虑的事项。...

永远不用担心基础设施

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

开始