1

我正在寻找可以充当以太坊节点的服务器(或服务器集合),我可以向该节点发送大量请求,每秒最多查看 100 个请求,以从区块链获取数据,例如帐户余额、交易等(如 Etherscan)。如果我错了,请纠正我,但我认为这样的系统不可能使用在单个服务器上运行的常规奇偶校验或 geth 客户端以及 SSD 上的链数据,所以我想做的是如下:

  1. 在服务器 A 上使用 SSD 配置奇偶校验客户端,它将充当常规节点
  2. 将链数据同步到服务器 B 上的另一个 SSD
  3. 在未连接以太坊网络的服务器 B 上设置奇偶校验客户端,并使用从服务器 A 复制的链数据。不处理交易。
  4. 交易、余额等可以在 Server B RPC 套接字上查询。

这种设置的原因是服务器 B 的开销尽可能小,这样它就可以处理更多的查询。

我想知道使用这个设置是否有意义,或者是否有可能。一个更简单的解决方案将是最好的,但我找不到太多关于如何运行大容量区块链服务的信息。我真的很感激任何指示。

4

2 回答 2

2

如果我错了,请纠正我,但我认为这样的系统不可能通过在单个服务器上运行的常规 Parity 或 Geth 客户端以及 SSD 上的链数据来实现。

我很高兴纠正您:Parity 可以在消费级硬件上轻松处理每秒 1_000 个 RPC 请求。

如果您每秒需要 10_000 个请求,您仍然可以在具有 128GB+ RAM 和 Raid-0 冗余闪存存储的高端企业服务器上使用单个 Parity 实例来实现这一点,请确保使用 Parity 配置巨大的缓存大小:

parity --cache-size 65536

您甚至可以通过将整个区块链设置--data-dir为 tmpfs 来进一步优化。

如果您仍然需要更多,我会像上面描述的那样运行多个设置,并在设置前面放置一个负载平衡器,将按类型排序的请求定向到后面的可用机器。

披露:我为 Parity 工作。不过,我认为 Geth 也有类似的统计数据。

于 2018-02-08T09:52:44.357 回答
1

我认为最好的选择是块预处理。运行以太坊客户端的实例,迭代所有块并对其进行预处理(提取您需要的所有信息并将其保存在数据库中)。这将为您的请求提供更大的灵活性。

假设您想要来自特定帐户的交易列表。这不能用当前的 ETH RPC API 来完成(我的意思是不是以优化的方式)。最好的办法是对所有块进行预处理,提取所有交易并将它们安排在数据库中,以便您能够查询来自特定地址的交易。

在您构建的数据库之上运行 API 将使您的服务器性能更高。

于 2018-02-07T11:29:31.613 回答