EOSIO

适用于:

  • EOSIO 主网
  • Worbli
  • WAX
  • EOSIO 测试网
  • CryptoKylin 测试网
  • 你的专属网络

以太坊(内测版)

适用于:

  • Ethereum 主网
  • Ropsten

Solana

Coming soon...

dfuse for EOSIO 架构剖析:架构总览

2020-6-9 22:45:31 / 作者 dfuse

自从我们发布了开源和二进制程序“ dfuse for EOSIO”以来,许多人请我们来解释它其中所包含的基础架构。 Alex 会带你了解“ dfuse for EOSIO”的17个微服务以及它们各自的作用。 每一个微服务都会有专门的视频讲解,所以请关注我们,跟进我们的更新!

 

Bilibili 视频链接

 

内容转译:

大家好。很高兴今天要开始一个讲解 dfuse 架构的系列视频。在这个系列中,我们会介绍所有构成 dfuse 实例的组件,dfuse 的设置。现在大家都可以用 dfuseeos。它其中包含所有这些组件,可以在笔记本电脑上运行,还可以部署在某些集群上,每个集群然后可以分别部署组件,独立扩展。我将介绍所有这些组件,让大家更好地了解 dfuse 体系结构的总体思路。

在这第一集中,我先列出每一个组件,之后位我们会一集一集地讲解各个组件。所以这集只是一个基本概述。那我们就先开始吧。

当我们想用 dfuse 启动新项目时,输入 `dfuseeos init`。确认弹出的问题(输入 `y`)。它会为本地实例启动完全版配置。这的配置基本上就是说:当你启动它时,
你是在一个进程种同时启动所有的这些组件。他们都用 config 标志中的默认值,
都是互连的,但是他们之间用的是 TCP 接口,你可以轻松地将它们拆分。直接更改 flag 就可以让他们相互交流。再然后,就可以开始扩展部署了。这里你看到的就是每个组件,你可以用 `dfuseeos start` 命令调出所有可用组件的列表。你可以单独启动其中一个,或者两个,或者全部。然后,这还有各种 flag,特定于不同程序,apiproxy 什么的,各种 flag 那里供你配置这个实例。那我就先把每个组件过一遍,告诉你它的大致功能,然后再分别做视频细讲每一个,ok?

这里的第一个元素,我跟你把它组合着说吧,搜索系统是由四个部分组成的:search live(实时搜索)、search-forkresolver(分叉处理器)、search-indexer(搜索索引器),search-archive(搜索存档)。索引器是从链上获取数据的。我们会在另一集中讲数据的产生。好,(索引器)提取数据,对其进行索引和归纳,以便搜索存档可以使用它。实时搜索就是实时地索引区块,再实时地进行查询。分叉处理器可以让你在分叉出现后重新再观察它,也就是 dfuse 提供的高度保证的方式。那这几个就组成了(dfuse 的)搜索功能。

然后还有 mindreader(读心器),跟 node-manager(节点管理器)基本上是一起工作的。这两个组件会包裹 nodeos,执行并操控它。我会专门给 mindreader 做个视频。它们一个会在出块节点上运行,一个在读取节点上运行。它的设置让你在同步另外的一个链的时候不用运行出块节点,但是功能却都在那。这我们在另一个视频里再细讲。

再有就是这个 merger (合并器)。merger(合并器)存在的意义是为了提供高可用度的设置。它会把 mindreader(读心器)生成的区块融合在一起并在一旁存储起来,以便任何进程可以访问区块数据,在某种意义上类似于 state-history(状态历史)的功能。但是这个东西包含了所有的分叉,所以让你总能准确的观测它。之后我们再深入介绍一下这个。

trxdb-loader(交易数据库读取器)是会从 nodeos 提取所有的信息,将其写入成简单的键值存储模型。它基本上就是是对区块、交易、交易痕迹,以及所有这些东西的存储。trxdb-loader 会把它们输入进去。

然后我们还有eosq,eosq 是一个你会爱上的区块浏览器。(提供的信息)最深度,还很丰富。基本上就是个区块链的放大镜。它是内置于 dfuseeos 的,启动本地实例它也会跟着启动。有所有的流读取功能、所有用于调试的深度数据,很酷的。

好,apiproxy 就很简单了,我们把它放在前面只是为了你可以路由到不同的进程,还让它同时看起来像一个真实的 dfuse 部署。当我们给出一个 dfuse 的端点时:比如 mainnet.eos.dfuse.io,这时有了apiproxy,它会给你个类似的东西,同时可以路由到不同的组件,不需要在它前面再运行运行 Nginx 或其他东西。这样即使你需要把各个服务分离开也是可行的。就是内置了一个小的 nginx。

fluxdb,我认为,是一项做的非常不错的工程,非常特别,它与区块链紧密交织在一起。它就是那个数据库,为你提供历史上任何高度的区块链状态。是经过精心设计的,通过特殊的索引策略去读取各个区块高度上的状态。

blockmeta 像是整个架构的脊柱,blockmeta 始终了解的区块链的状态,帮助不同的系统判断:”我是不是同步的?“所以,blockmeta 是一项简单服务,(通过它我们可以知道)那个区块是可逆的吗?最高的区块是什么?小东西,但是是脊柱,同步所有信息去了解网络的状态。

然后,dgraphql 是 GraphQL 接口。它去调用其他系统。基本上它就是接口和调用。

这里的 relayer(中继器)组件是帮助你扩展你的基础架构的。我们会在 mindreader(读心器)来自第一层的数据。relayer(中继器)是一种展开的机制,
用于区块的传播——就是一个拓扑的概念。我们会专门做视频讲。

然后 abicodec 是专门对 ABI 的 JSON blob 编码和解码的。它知道任何高度的 ABI,能够解码和编码。小巧的专属服务,在你需要时可以用上,我们可以把它分开扩展。abicodec,编码器,解码器,对吧。

eosws 是我们最早做 dfuse 时做的的项目之一。它拥有所有的 websocket 机能,
还会转发一些信息到其他服务中。它包含所有交易推送保障功能,也还有好多其它的地方。我们专门做视频给大家讲解哈。

这里的仪表板是专门 dfuseeos 的,二进制文件。这不是我们在生产中交付的东西,只是在运行过程中为了帮助你了解这些应用的。他们在运行吗?处于什么状态?等等。单个二进制文件的调试工具。

我希望这是能帮助大家弄清,揭开一点组件的神秘面纱。而且我们会在这一系列视频中
对每个提到的组件进行深入。谢谢你与我们同在,再见。

话题 视频, 教程, 开源, dfuse for EOSIO, 架构