返回基准页

RPC 基准方法论

本页会准确说明基准运行如何执行、测量哪些信号、如何生成结论,以及结果代表什么和不代表什么。

在实际环境中,端点性能会受到提供商路由、链数据新鲜度、重复请求行为、缓存状态和限流影响。这个基准通过一次短时、同服务器、仅限 mainnet 的对比运行来隔离这些信号。

基准信号

这个基准衡量什么

快速了解每次结果背后的关键信号:速度、稳定性、方法支持、限流、新鲜度和生产风险。

性能
p50p95p99

速度分布

衡量端点在常规请求和尾部请求中的响应速度。

方法
eth_blockNumber98%
eth_getLogs74%

方法级拆解

按方法查看性能、兼容性和失败情况。

限制
429

限流检测

在限流成为生产流量问题之前提前发现它。

可靠性

0.8%

错误

1.2%

超时

JTR

稳定性

失败行为

把超时率、错误类型和一致性归纳成一个可靠性视图。

生产

你的 RPC

18.4M

vs

GetBlock

18.4M

节点更新更快、滞后更低、生产判断更清晰

新鲜度与就绪度

把 freshness、sync lag 和生产就绪度转化为决策依据。

核心规则

两个端点在相同条件下测试

你的端点与 GetBlock 基线会从同一台基准服务器、在同一时间窗口、使用相同超时和同一条生成的请求序列进行测试。后端会根据实际执行基准测试的服务器区域选择 GetBlock 基准端点,而不是根据访问者浏览器所在地选择;如果该区域端点不可用,报告会在元数据中标记 fallback 区域。为你的端点选中的每一个采样方法也会发送给 GetBlock,因此方法组合和请求数量保持一致。这样可以保证对比公平,但也意味着它不是多区域的合成基准测试。

必须匹配 mainnet 协议

公开工具只测试 mainnet 端点。只有当粘贴的端点属于所选协议的 mainnet 时,对比才有效,例如 Ethereum mainnet 对 GetBlock Ethereum mainnet。Testnet 和 devnet 端点会被阻止,因为它们与 mainnet 基线对比会产生误导性的延迟、新鲜度和方法级结果。

仅使用只读请求

该基准只使用只读 JSON-RPC 调用。它不会请求私钥、助记词、钱包密钥、交易签名或写方法。目标是在不产生链上副作用的前提下测试速度与可靠性。

短时点状基准

这次运行是有意保持短时的。它的目标是揭示延迟、可靠性、兼容性、限流和新鲜度方面的明显差异,而不是为 SLA 背书,也不是精确预测生产吞吐。

延迟测量

如何测量每个请求的延迟

从 benchmark 服务器测量

延迟在后端 benchmark 服务中测量,而不是在访问者的浏览器中测量。计时会在 benchmark 服务器发送 HTTP RPC 请求前立即开始,并在收到并解析响应后结束。

往返响应时间

测得的值是 RPC 往返时间:从 benchmark 服务器到提供商的网络传输、提供商处理时间,以及响应返回的网络传输。只有当你的应用运行在相似区域时,这个值才接近应用会看到的延迟。

成功延迟与失败分开计算

只有成功样本会用于 p50、p95、p99、平均延迟、抖动和最大延迟。失败请求会单独计入错误率、超时率、方法兼容性和 findings。

相同请求编号,相同方法

两个端点会收到同一条生成的请求序列。如果第 18 个请求对你的端点是 `eth_getBlockByNumber`,那么第 18 个请求对 GetBlock 也是 `eth_getBlockByNumber`。这种成对模式保证了按方法对方法比较。

Profile 与方法

“What are you building?” 如何改变测试

所选 profile 会改变只读方法组合和方法权重。它不会让任何一方获得优势:生成的请求序列是共享的,因此你的端点和 GetBlock 会收到相同的方法、参数、超时和请求数量。

General dApp

面向常见前端和后端 dApp 流量的均衡轻量读取。

eth_blockNumbereth_getBlockByNumbereth_getBalanceeth_call

Wallet / portfolio app

优先测试余额、最新区块以及轻量合约或账户读取。

eth_getBalanceeth_calllatest block readsSolana balance reads

Data indexer / analytics

强调索引器和分析管道依赖的区块密集型与日志密集型读取。

eth_getBlockByNumbereth_getLogsblock height readsmethod compatibility checks

DEX / trading bot

关注新鲜状态、低尾延迟,以及交易流程会反复调用的方法。

eth_blockNumbereth_callfresh state readslatest block / slot

NFT marketplace

测试 NFT 风格读取模式,其中方法支持和一致性比单一平均延迟更重要。

eth_calleth_getLogsmetadata-related readscollection state reads

协议支持很重要。EVM 链可以使用合约和日志方法,Solana 使用 Solana JSON-RPC 方法,Tron 使用兼容 EVM 的 JSON-RPC 读取,Bitcoin 类协议使用安全的节点状态和高度方法。如果某个方法无法为某个协议安全生成参数,就会被跳过。

基准流程

1. 输入校验与安全检查

  • 仅允许 `http` 和 `https` RPC URL。
  • 工具会阻止 localhost 以及常见私有或内部地址范围,例如 `127.0.0.1`、`10.0.0.0/8`、`172.16.0.0/12`、`192.168.0.0/16` 和 `169.254.0.0/16`。
  • 在基准启动前,会先检查粘贴的端点是否属于所选协议的 mainnet。EVM 类端点会检查 `eth_chainId`;Solana 使用 `getSlot`;Bitcoin 类协议使用 `getblockcount`;其他受支持协议会使用最安全可用的只读身份或状态方法。
  • 公开基准启动前需要通过 Cloudflare Turnstile 验证。这用于保护 benchmark API 免受自动化滥用,同时保持测试无需注册即可运行。
  • 如果端点返回的协议不一致,或返回的不是 mainnet 网络,运行会在基准开始前被阻止。
  • 支持 URL 中包含 API key 的私有端点。为了存储和报告安全,工具不会明文保存完整 URL,而是只保存遮蔽后的形式和 SHA-256 哈希。

2. 预热阶段

  • 验证通过后,用户端点和 GetBlock 端点都会先收到一次预热请求,然后才开始计时采样。
  • 预热请求用于降低一次性冷启动噪声,使正式测量更接近真实应用在首个请求之后看到的行为。
  • 预热本身不属于基准结果。它的作用是尽量把 DNS、TLS 或首请求开销等初始化影响与正式计时阶段分开。

3. 请求配置选择

  • 基准通过加权随机方式选择方法。所选 developer profile 决定使用哪些方法以及每种方法出现的频率。
  • 引擎内部支持的 profile 包括 `general`、`wallet`、`indexer`、`trading` 和 `nft`。UI 中显示为 General dApp、Wallet / portfolio app、Data indexer / analytics、DEX / trading bot 和 NFT marketplace。
  • 对于 EVM 链,profile 可能包含 `eth_chainId`、`eth_blockNumber`、`eth_getBlockByNumber`、`eth_getBalance`、`eth_call`,以及某些 profile 下带安全范围的 `eth_getLogs`。
  • 对于 Solana,profile 可能包含 `getHealth`、`getSlot`、`getLatestBlockhash` 和 `getBalance`。
  • 对于 Bitcoin、Tron 和其他受支持的非 EVM 协议,基准会使用适合各协议的安全只读方法,并跳过无法安全生成参数的方法。

4. 成对计时采样循环

  • 运行期间,引擎会根据所选加权 profile 创建一条共享请求序列。
  • 对于序列中的每一项,相同的只读方法和参数会同时发送到你的端点和 GetBlock 端点。这两个调用作为一组执行,因此两个提供商收到相同的方法组合和相同数量的采样请求。
  • 如果其中一个提供商返回 error、timeout 或 rate-limit 响应,成对 sample 仍会被记录。这样请求数量保持一致,避免某个端点收到不同的工作负载。
  • 引擎会持续发送成对请求直到达到截止时间。每个 sample 都会记录提供商、方法、时间戳、延迟、成功状态、状态码和错误分类。
  • 这个基准用于比较短时稳定采样下的端点行为,而不是模拟大规模并发压测器。
  • 因此 UI 中显示的请求速率是这次基准运行实际产生的流量,而不是保证的最大容量数字。

5. 延迟与错误分类

  • 每个请求的延迟会在 `fetch()` 调用之前开始计时,在 HTTP 响应被接收并解析后立即结束。
  • 只有当 HTTP 响应成功且 JSON-RPC 响应体不包含 `error` 字段时,请求才会被标记为成功。
  • 如果请求超过配置超时并触发 abort signal,则会被标记为 timeout。
  • JSON-RPC 错误、无效 JSON、网络失败、鉴权失败和其他非超时失败都会被标记为 error。
  • HTTP 429、401 和 403 会被保留为独立信号,因为它们对生产诊断很重要。

测量信号

平均延迟

平均延迟是成功请求延迟的均值。它有参考价值,但会掩盖慢尾请求,所以报告同样强调尾延迟。

p50 延迟

p50 延迟是成功延迟的中位数。50% 的成功请求比这个值更快,另外 50% 更慢。

p95 延迟

p95 延迟表示 95% 的成功请求会落在这个响应时间以内。它非常适合反映真实用户体验,因为它能捕捉常见但较慢的尾部行为。

p99 延迟

p99 延迟展示了正常成功行为里最慢的边缘。如果平均延迟看起来正常,但 p99 很高,用户依然会感受到不稳定的加载时间。

成功率、错误率与超时率

成功率表示所有采样请求中成功完成的比例。错误率表示因任意原因失败的比例。超时率表示在基准超时前未完成的比例。

抖动与一致性

延迟标准差和抖动用于描述一致性。在这个工具中,抖动计算为 `p95 - p50`,可作为简单的尾部扩散信号。若中位延迟低但抖动高,通常说明端点有时很快,但并不稳定可预测。

观测 RPS

观测 RPS 按 `requestCount / durationSec` 计算,用来描述这次基准实际产生了多少流量。它不应被理解为合同级吞吐上限,也不是完整生产压测结论。

结论逻辑

方法级结论

方法级结论会对比两个提供商上的相同方法。如果一侧完全没有成功响应而另一侧成功,该方法会被标记为该提供商失败。如果一侧错误率或超时率很高,则会标记为不稳定。否则由 p95 决定胜负;如果差异低于 10%,则记为相近。

提供商评分

提供商评分综合平均延迟、p95、p99、成功率、超时率和协议感知的 freshness。评分会敏感反映延迟差异,但可靠性仍然重要:一个很快但大量失败的端点不应被视为生产就绪。这个分数不是协议标准,而是这个工具使用的紧凑比较信号。

生产就绪标签

生产就绪标签基于测得结果生成。示例包括方法兼容性问题、陈旧节点风险、高超时风险、可能限流、快速且稳定、较慢但可靠、表现相近等。这个标签的目标是概括最可能在真实使用中先出问题的地方。

可执行发现

可执行发现基于明确的基准证据生成,并在报告中按照“问题 → 为什么重要 → 下一步怎么做”的结构呈现。重复出现的 HTTP 429 会形成限流发现,401/403 会形成访问受阻发现,高超时率会形成超时风险发现,方法级失败会形成兼容性发现,高抖动会形成一致性发现,而区块滞后会形成区块新鲜度发现。

新鲜度规则

如何检测同步滞后

  • 对于 EVM 和 Tron 风格的 RPC 端点,基准会在运行接近结束时比较最新区块号。
  • 对于 Solana,会比较最新 slot。
  • 对于 Bitcoin 类和其他受支持的非 EVM 协议,会比较该协议能安全返回的最新 height、slot、ledger 或状态值。
  • 高度差会按照所选协议配置的标称出块节奏换算为估算时间延迟。快速链相差一个区块可能只是轻微差异,而 Bitcoin 等慢速链相差一个区块可能就是显著延迟。
  • 等效时间差不超过 6 秒时视为相近。因此快速链相差一个区块通常影响很小,而 Bitcoin 相差一个区块则是显著延迟。
  • 区块新鲜度评分会随估算时间延迟下降,并占提供商总分的 10%。用户端点超过容差时,会被标记为陈旧节点风险。

限制说明

这个基准不声称什么

  • 这不是地理基准。公开工具目前只从一台基准服务器运行,而不是从多个全球探针运行。
  • 这不是高并发压测实验室。工具测量的是短时自动请求循环下的对比行为,而不是完整生产流量回放。
  • 性能会随着请求来源、提供商路由方式、缓存是否预热以及当时基础设施负载不同而变化。
  • 公共端点在少量请求下可能表现不错,但随后会退化、超时或限流。换个时间重新运行基准通常很有价值。
  • 缓存、提供商套餐等级、临时网络拥堵和后端路由都可能让不同运行之间的结果发生变化。
  • 公开基准仅面向 mainnet。Testnet 和 devnet 端点需要单独的基线,不应与 mainnet 对比结果混用。
  • 基准在存储前会遮蔽用户 RPC URL,并且返回给 UI 的 benchmark metadata 只包含遮蔽值或派生值。