dfuse for EOSIO 架构剖析:deepmind & dfuse 数据模型

dfuse 之所以能够提供这么详细的链上信息,是因为它必须把所有数据通过启用了 deepmind 的 nodeos 处理。 它会去构建一个 protobuf 区块对象,然后通过 gRPC 端点流入所有其他微服务中。Alex 讲解了 deepmind,以及 dfuse 的数据模型是怎么帮开发者给应用的提供它所需的,更据深度的信息的。

bilibili 视频链接  

dfuse for EOSIO 架构剖析:manageos & mindreader

 

文字转录:

大家好,在这期 dfuse 架构的视频中,我们将深入地了解 deepmind 工具和 dfuse 地数据模型。

好,快速介绍一下 deepmind。deepmind 是我们所作的修改, 记住,这就是 dfuse 的秘方,是我们对 nodeos 所做的修改。让它能够将数据从 nodeos 的 节点中取出, 输入进 dfuse 平台。也就是的 dfuse 数据模型和服务中,所有这些都流经 gRPC 端点,而且都用了 protobuf 定义, 我们会深入讲解这个。

好,如果你运行的 nodeos 启用了 --deepmind。你会看到很多信息喷涌而出, 让我来具体给你展示下。因为它看着好像挺吓人的, 但是我会告诉你(这些数据)有什么用。你看一下我这个 Terminal, 这是个输出的示例。这往下滚着看更吓人, 我都能想象你的表情。但基本上这每一行展露的是操作在执行的时候所发生的事情,所有的交易痕迹、数据库更改。它们都通过叫 “mindreader” 的这个读取进程接入到了标准输出,被读取,然后我们慢慢地,但也是以最快速度, 建立一个 protobuf 对象或 Go 对象。我们将这些东西缝合在一起。

我给你看看这部分的代码, 叫 ConsoleReader。这个 ConsoleReader 慢慢地建立一个区块, 读取这些行数据累积所有交易痕迹 ,并将它们按区块顺序排列。然后,这个区块对象通过 gRPC 进入整个系统,走的是 protobuf 定义,每个系统都是一个 gRPC 流端点。所以 merger、relayer、mindreader 是从 eosws、FluxDB、查询索引器等等中出来的第一个区块服务器。每个都被输入这种 protobuf 格式的区块信息。这种处理方式很利落,它还能有很多延展性的工具。你还可以把它接入到不同的语言中。

这是数据模型,我再给你快速看下这里的 proto 定义。这是在 proto-eosio 软件包里的, dfuse 的堆栈中所有针对 EOSIO 特有的东西和。不同的(协议)部署之间也有一些共同点, 比如搜索引擎调用,还有 bstream 机制,这我们会在另一个视频中具体讲。但是 proto-eosio 是针对 EOSIO 特定的东西。你知道,区块,对于那些熟悉 EOSIO 的人, 你会看到那些出块节点签名。这是已知的东西,比如块状态。

还有一些其他的东西,比如交易,隐藏的交易, 这个你通常是看不到的。这么多提取出来的东西,还有限速变量,这些信息通常不是节点能输出的。(原生的)API 不可以读取这些内容,但是有了我们搭建的仪器,我们就可以拿到这个信息了,做出通常你没有足够信息去做的决定,比如速率上的限制。

这里最重要的是交易痕迹,这些都是链执行的实际痕迹。而在这里面,重要的是操作痕迹。我们可以在这里看到你之前可能看到过的信息:receiver、action、(操作)所用的时间, 还有它可能造成的任何副作用。交易的痕迹其实也是一个树状的结构。所有出现的操作、谁触发了什么,等等。这是查询 GraphQL 端点时能得到的信息。你在 eosq 上看到那些嵌套的数据(也是这么获取的)。这是交易痕迹, 里面有交易痕迹列表和一个区块,而区块是流经系统是顶层组件。

希望这帮助你更好的理解了 deepmind 是什么。还有,让我给你们看看这个 PR 这是直接合并到 nodeos 内部的一个 PR。它会在2.几的版本中发布 应该会在2.0以上。它不在 Block.one 发布的 2.0 版中, 但确实在我们的存储库中发布了。这样你就可以拿到 debian,或 Mac 和 Linux 版本。发布的版本中已经结合了 deepmind, 现已合并到 nodeos 的代码中了。你会在下一个修订版中看到它,我不确定要 Block.one 会把它发布在哪个版本中, 让我们试目以待吧。但是,它确实是直接把 deepmind 部署在内部的, 你不需要再去专门安装它。而且,你可以在它之上再加上 dfuse, 得到所有的好处。

好的,希望这会有所帮助。如果你有任何意见都可以通过我们的电报群(和微信群)找到我们。我们下次见。

 


 

你能在以下平台上找到 dfuse 哦!

dfuse 中文官网:dfuse.io/zh

Github 源码库:github.com/dfuse-io

微信公众号:dfuse API(通过【社区资源】菜单加入 dfuse 开发者群)

微博:weibo.com/dfuseio

Bilibili:space.bilibili.com/596090399

Telegram:t.me/dfuseAPI

Twitter:twitter.com/dfuseio

YouTube:youtube.com/channel/UCT_wVH42n6jv-IG8C7QsHGg

CSDN:dfuse.blog.csdn.net

币乎:bihu.com/people/1460622786

链节点:chainnode.com/forum/333