LOADING...
LOADING...
LOADING...
当前位置: 玩币族首页 > 新闻观点 > 如何启动区块链:提升测试网络并评估性能

如何启动区块链:提升测试网络并评估性能

2020-05-14 wanbizu AI 来源:区块链网络

在启动主网络之前,您需要确保不间断的运行以及对特定攻击的抵抗力。否则,在分散的环境中修复错误可能会非常昂贵。

为了帮助项目避免此类错误,MixBytes研究部门负责人Sergey Prilutsky编写了有关如何启动测试网和评估其性能的分步指南。

因此,您选择了区块链引擎并实现了自己的区块链的第一个版本。现在,为了测试不断变化的网络的稳定性,将需要进行全面测试。为了使将来的用户和验证者可以为实际情况提前准备其服务,需要一个测试网络(或testnet)-主网络的最完整副本。

没有测试网,您将无法定性地测试开发的代码,并且用户将无法在“实验室”条件下尝试您的服务。

区块链测试与监控

我已经多次写过关于区块链测试的文章(在这里和这里阅读),所以我建议关注实际问题。在主网络上使用区块链时,您可能会遇到许多应事先解决的问题。我将举例说明可能的技术问题:

区块链通过存储大量数据的交易进行操作。启动和维护节点可能需要过多的磁盘空间,并且拥有用于验证程序的节点的成本可能非常高。 您正确地评估了一切,有效地压缩了交易数据,并且在开发人员的测试机上,区块链的增长变得令人满意。但是,数据压缩需要来自节点的大量处理器资源,这大大降低了整体网络性能。 您已经找到了交易处理的大小和复杂性之间的最佳平衡,并且区块链在开发人员机器上工作得很好。但是,它们之间有一个局域网,在全球网络中启动后,这些块开始缓慢传输,并且网络速度显着下降。 您可以通过更有效的共识来优化网络,但是现在块的确定已经开始滞后。

你可以永远继续下去。这只是冰山一角-仍然存在经济和组织问题。它们中的许多可以通过胜任的设计和算法选择来解决,但是最好使用集成方法。

由于每一行代码都是在数十台服务器上执行的,因此即使很小的更改也会导致一系列的结果和错误。为了避免这种情况,必须对项目团队进行定期测试,主动监控和适当组织工作。

监控方式

几乎所有现代区块链都提供了连接外部监控以及时发现错误的功能。这不仅是报告关键问题的通知系统,而且还从节点收集重要指标。指标收集系统的目标是通知您组件之一的突然更改,并帮助您快速找到网络降级的原因。

必须同时监视标准系统参数(CPU和硬盘负载,RAM消耗,网络流量)以及特定指标(共识和处理逻辑)。

如果您更改网络共识,则重要指标将是与其内部逻辑相关的指标。对于最终的小工具,重要的是最后确定的区块在链中的最后区块之后要多少。如果网络p2p层发生更改,则活动对等方的数量可能是有用的度量标准(对等方是网络中的平等参与者)。对于复杂的事务,您可以衡量将它们打包成一个块所需的时间和资源。

不幸的是,不存在一套通用的指标。确保将指标添加到监视中(例如,事务处理时间或最后完成的块的延迟),以使您能够看到组件中的问题-这样可以节省时间并及时发现错误。这样做并不难,因为在所有现代区块链引擎中,您都可以将数据发送到监视服务器(通常是Prometheus + Grafana复合体)。要添加新指标,只需复制几行代码。

您是否有负责项目开发的产品经理?在达成共识或建立大型合同系统的情况下,他很难跟踪和评估结果。但是他可以看看客户在交易陷入困境时所期望的时间表。监控,指标和彩色图形并不是完美主义者的琐事,而是评估项目发展的必要工具。提前照顾好他们-促进同事的工作。

测试中

从测试的角度来看,区块链看起来像具有主-主类型复制机制的数据库。对于测试分布式数据库,有一组基准说明。例如,在测试新的复制算法时使用TPC或YCSB。

尚无类似的区块链标准。在区块链中,可以在接收多个交易(添加新交易或排除旧交易)时更改验证者的数量。就像我已经说过的那样,即使某些验证器被攻击者断开连接或捕获,区块链是必须在大规模攻击和串通期间仍可运行的网络。

为了测试负载下的网络稳定性,每次更改主要交易的共识或逻辑时,都必须运行测试。例如,如果将新的批量元数据添加到事务中,或者使用了新算法。测试的可重复性很重要-仅启动一个小型测试网络,更新节点上的代码并运行发送交易的脚本还不够。如果不重现所有初始条件,则外部因素会干扰测试。磁盘缓存就是一个很好的例子。在第一个测试中,数据将以一种速度被读取和写入磁盘,而在第二个测试中将以更快的速度被写入磁盘,您可能会误认为这种加速会改善区块链的性能。

测试的交易顺序的选择也很重要。例如,在2个帐户之间转移一定数量的令牌的1000个事务与在1000个不同帐户之间转移令牌的事务完全不同。后者引起节点上内存,磁盘和处理器的不同行为。为了获得良好的测试结果,该模式应使系统在易受攻击的地方最小限度地“帮助”加速它。为了测试支付交易,合理的做法是使用N个随机帐户(每次都是新的)和传输随机数量的令牌的交易以及具有随机内容的文件来存储文件。

对于区块链和智能合约,涉及多个参与者与服务器交互的测试驱动开发(TDD)范例是最合适的。交互方案有很多,其中一个较小的错误可能导致另一个严重的后果。同样,从开始的第一天开始,TDD将迫使您自动化区块链的部署,并在后续阶段节省大量时间。

测试网络部署自动化

从头开始启动区块链的自动化使开发人员和项目团队能够:

节省共识开发时间。 不要浪费时间启动自己的测试环境。 及时注意到一项更改,该更改“破坏”了区块链另一部分中的某些内容。 重现仅在特定条件下重复出现的错误更容易。 将来,可以使用开发的脚本与主网络的服务器一起使用。

区块链的部署与启动数据库集群的脚本没有太大区别,在某些地方,由于点对点网络,部署起来甚至会更加容易。以下是一些部署带有引导节点的Polkadot测试网络的方案,以基于Parity Substrate引擎进行大规模网络性能测试。用于测试Haya引擎的相同方案为我们节省了大量启动网络的时间。

部署验证器的方案可能要求您对所有验证器的对等ID进行硬编码。因此,它们将永远不会彼此从列表中排除,并且在网络出现问题的情况下,它们将仅等到恢复与网络的连接。

自动创建帐户

此过程可以在测试的早期阶段开始。为了分配余额用于测试,分配资源或执行配置程序,将需要在区块链上使用大客户帐户。通常,验证者帐户用于这些任务。

通过自动执行此类任务,您不可避免地会遇到将验证者和测试帐户的地址和私钥发送到公共存储库的需求。这没什么大不了的,甚至很方便-您的产品经理将能够使用并向投资者展示相同的可用钱包,并且所有测试脚本都将能够使用现成的帐户。

启动并运行测试网络

测试网络启动中最重要的阶段即将到来。该项目证明了该代码是可行的,网络可以长期存在而不停,任何人都可以使用它。这种区块链与集中式系统截然不同-从现在开始,将很难掩盖错误和缺点。

对于不使用现有引擎编写自己的区块链的项目,启动测试网比启动主网络更为重要。如果在此之前您可以轻松地“重置”区块链并从第一个块开始,那么当testnet已经具有测试人员,审计人员和外部团队正在研究的某些服务时,这是极不希望的。

为了方便起步,有一个或多个具有公共固定地址的引导节点是有意义的。新节点将不会搜索网络中的testnet节点,但会联系固定地址,接收对等体的最新列表,并能够与网络快速同步。维护相关引导节点的任务由项目团队承担。

当testnet运行时,可以使用重播脚本-从创世块开始,所有节点都“重播”事务。如果事务处理的逻辑发生了变化,并且从一开始就重建所有节点的状态而又不丢失用户事务,则这是必需的。在出现严重错误的情况下,主网络上也可能出现这种情况,因此值得在测试中对其进行调试。

有时,测试网络可能需要比主要网络更多的关注。在主网上,一个项目只能容纳一个或两个验证器并监视支持服务。 Testnet可能需要更新大量节点。此时,所有先前创建的自动化软件更新将派上用场。

Testnet也可以由计划为您的区块链构建解决方案并成为网络验证者的团队来运行。这是理想的,因为从测试网络切换到主网络将是最简单的,不会有任何令人不愉快的惊喜。祝您启动顺利!

阅读有关ForkLog的系列中的先前文章:

如何启动区块链:任务和架构。 如何启动区块链:选择共识算法。 如何启动区块链:选择一个引擎。

—-

原文链接:https://forklog.com/kak-zapustit-svoj-blokchejn-podnimaem-testovoj-set-i-otsenivaem-proizvoditelnost/

原文作者:pland

编译者/作者:wanbizu AI

玩币族申明:玩币族作为开放的资讯翻译/分享平台,所提供的所有资讯仅代表作者个人观点,与玩币族平台立场无关,且不构成任何投资理财建议。文章版权归原作者所有。

LOADING...
LOADING...