EOSIO

适用于:

  • EOS 主网
  • Worbli
  • WAX
  • CryptoKylin Testnet 测试网
  • Jungle 2.0 测试网
  • 你的专属网络

以太坊(内测版)

适用于:

  • Ethereum 主网
  • Ropsten

当区块链流量激增30倍时,如何保持 Dapp 的正常运行

2019-12-5 21:40:56 / 作者 dfuse

最近,EOS 主网上的空投已达到先前基准的30倍。 EOS dapp 依赖的各种基础架构服务都很费力的在想办法跟上这种变化,但是有的已经完全崩溃并保持崩溃。 dfuse 也受到了这种流量冲击的影响,但是我们保持继续运行,而且处理交易的速度能实时跟上网络上的频率(最近几天甚至能达到每秒 500 次转账)。

在本文中,我们将介绍 EOS 主网上具体发生的情况,以及随着 EOS 流量激增,dfuse 面临着存储、查询功能的计划和索引以及滥用管理所面临的挑战。

EIDOS 空投

自11月1日以来,EOS 上的流量从平均每秒5次转账达到了每秒500多个水平,而且突然而来的高峰期接近了每秒1000。这是由于 EIDOS 代币的独特空投方式。该空投利用名为  eidosonecoin 的智能合约,鼓励用户向其发送 EOS 代币,发送到 EIDOS 智能合约的 EOS 都会退回到原账户,并且还会收获少量的 EIDOS。因为这个 EIDOS 空投模式每次要求转账的 EOS 量很小(0.0001 EOS),并且 EIDOS 代币可以在多个交易所交易,因此大量用户被吸引参与 EIDOS 空投。

除了网络交易速率的急剧增加外,用户还寻求与 EIDOS 合约进行反复交互,每个交易中打包了大量操作,进一步增加了网络活跃度。

日常合约活跃性图表(基于 contract::action) - 来自 labs.eostitan.com

EOS 流量在11月11日飙升至每秒 1000 次转账。原因是一个恶意行为者利用了 eosio 系统帐户可用的无限 CPU 资源和 EOS 平台上命名空间拍卖中的 bidname bidrefund 操作中存在的 bug。使用户可以在不消耗自己的任何 CPU 资源的情况下挖 EIDOS,从而使网络饱和,超出了BP节点定义的限制。

该漏洞已在11月13日通过 Block.one 发布的一个补丁修正了,方法是向 bidname  帐户收取 CPU 资源费用。这之后交易量就稳定在每秒500次,而且看似在剩余14个月的 EIDOS 空投期内会保持在这个水平左右,直到 EIDOS 价格下降,人们对它不再感兴趣。

帐户CPU使用情况——图表由 EOS Rio 通过 Hyperion 提供

通过由红色标示的 eosio帐户可以看到攻击者正在使用多少资源

这个“新常态”代表每个区块现在都包含几MB的数据(EIDOS 空投开始之前为100-150KB,也就是说增加了10-15倍)。 EOS的出块时间快到0.5秒,这意味着 EOS 主网现在每天通过网络传输约25GB的区块链数据。对于像 dfuse 这样的服务而言,每天摄取大量数据并将其与已经很庞大的数据集集成在一起显然是一个巨大的挑战。

空投造成的影响

EIDOS 空投导致 EOS 网络进入并保持长时间处于拥塞模式。所有帐户都只能按比例分配总 CPU 资源。这直接影响账户抵押的 EOS 能够执行的交易数量。

10月18日至11月14日之间的平均CPU利用率——来自 labs.eostitan.com

此外,在需求超过供应的情况下,这个情况还促使 dapp 向 REX 借用 CPU 资源。当前, REX 处于“流动性紧缩”状态, 已经不能用作资源出租了

支付给 REX 的费用中反映出 REX 的使用情况——截图来自 eosauthority.com

这也影响了 dapp 的用量。EOS 网络上的活跃用户数量有所减少,因为许多用户发现他们缺乏执行交易所需的 CPU 资源。

还要注意,dapp 不是只在链上进行交易,而会去读取交易。由于原生 EOS 节点的搜索功能非常有限,因此通常可以借助 dfuse 和其它的 API 服务来满足相关需求。但是,这些服务大多数都无法维持当下的新日常流量,有一些已经完全停止服务了。

dfuse 所遇到的挑战与找到的解决方案

11月1日,我们的 dfuse 系统运行的负载与以往的正常水平一致。在我们的案例中,因为 dfuse 建立在专有的存储和查询层(dfuse DB)上,而不是简单地跨许多本机区块链节点进行负载平衡请求,这意味着我们拥有大量未使用容量的缓冲区。结果,我们的系统能够处理最初的5倍流量激增,而不会达到饱和和随之而来的故障级联。

然而,警报响起,我们的团队看到了流量的激增,意识到我们的闲置容量已变得低于最初定义的安全阈值以下了。

初步调查显示,不仅传入数据激增了5倍以上,而且传出流量(dfuse 用户查询和搜索的响应)也以相似的比例增长,因为许多用户查询返回的数据量很大。网络同时上的交易越来越大。

我们的团队立即开始与客户联系,以提醒他们的 API 调用正在产生更多的用量,会导致成本增加,并在某些情况下与客户合作微调他们的查询。其他客户确实需要所有数据,读取所有的 eosio.token 的转账。

此期间 dfuse API 反馈条目数的增长

幸运的是,我们的核心开发团队最近进行了一系列内部改进,对 dfusedb 中的核心数据结构进行了重新设计,使其空间利用率提高了4倍以上,而没有增加搜索时间。这有助于我们应对链上新的流量水平。

但是,由于我们的用户需要他们的搜索和查询的反馈保持高速,所以我们担心查询量的增长会影响性能。我们的核心工程团队把精力专注在解决此问题上,找到了进一步改善 dfuse DB 的针对区块链的查询计划程序组件的方法。

这促使团队找到了更分布式的索引策略,现在即使面对大量的数据集,用这个策略也保持了 dfuse 的性能水平不降低。这不仅是搭建更多节点的问题,而且还在于智能地分配搜索和索引任务。因此,dfuse 还是保持住了1秒内查询全链历史的性能。

随着区块链数据集规模的增加,响应规模更大,导致一些 dfuse 的“免费版套餐”用户可能会更快地耗尽其免费反馈条目数,我们也发现滥用率显着增加。我们检测到有用户每天都会创建新的帐户,然后立即就用尽了每个帐户的免费配额。我们的团队迅速改善我们服务的使用配额管理,从而更公平地在免费和付费用户之间分配资源。

如何保持 Dapp 的正常运转

为 dapp 选择 API 和基础结构服务时,需要选择即使在不利的网络条件下也能保持完全准确性和高性能的服务,并为您提供最强大和高表现力的服务,由公认的行业领导者运营并有一个充满激情和敬业精神的团队,致力于为我们的客户和整个生态系统创造价值。

Dfuse 为您的 dapp 提供了一个现代化的基础架构层,即:

  • 快速

  • 可扩展

  • 为您提供对区块链事件的高精度、细粒化的流式访问,

  • 支持主动的 Webhook 类型的回调,

  • 具有业内最高的可靠性。

立即注册免费帐户,尝试 dfuse。如有任何疑问/建议,请通过微信Twitter电报群与我们联系。我们想了解您的数据需求以及我们如何帮助您的 dapp 落地。

话题 dfuse API, 新闻动态, EIDOS, 交易, 空投