Flow 节点架构简要分享 - P1

Created
Apr 13, 2022 09:33 AM
作者
翻译
Tags
#Flow
Node
notion image

自我介绍

Hi!我叫Jan,目前是核心Flow协议组的工程经理。你或许知道Flow是由NFT的先驱团队创建的-就是那个因用Crypto Kitties搞坏以太坊而出名的团队。Flow是一条能让去中心化应用开发更简单且容易被更多的人使用的区块链。
 
这个博客是给那些有兴趣了解区块链技术的朋友准备的,欢迎来到Web3!
 
我在技术领域已经有超过15年的工作经验,先后就职于Cisco,亚马逊,AWS等公司。我21年秋天加入Dapper Labs的时候,我对Web3的发展深深着迷,但我对背后的技术却知之甚少。在接下来的博客系列中,我希望用我的方式尽可能尽可能简单的向大家解释。在某些情况下,我需要简化一些内容,否则这会变成一份白皮书。我会尽可能的简化。
 

Flow介绍

在Dapper Labs开发Crypto Kitties的时候,我们从中学到了很多。最重要的是,我们意识到那个时间点的技术还没有为这类的应用准备好。为了长远的发展,我们决定为我们接下来的计划打造更好的技术,也就是现在的Flow区块链。
 
区块链架构最大的困难之一是如何在最少的时间内处理最多的交易,也就是吞吐量。多数区块链会尝试提升运行网络中的单一节点的效率。Flow提出一种新颖的,从根本上提升吞吐量的方案,把传统上矿工做的工作分解成不同的角色,使得交易的选择和排序与执行脱离开来。
 

节点类型 & 数据流

Flow链有多种不同的主体称为节点,这些节点为Flow协议的运转工作,也是协议网络的一部分。下面是对5种节点类型的概括介绍。
 

Access Node 入口节点

Access Node 为外部客户端提供访问最新区块的入口,并且把交易从客户端发到收集节点群。Access Node会决定把这笔交易发往哪个收集节点群。
 

Collection Node 收集节点

收集节点会组成一个个的收集节点群(Collection Cluster)。在一个群里的收集节点会一起把交易整理到一个集合(collection)里。一个收集节点群会决定把哪组交易以集合保证(Collection Guarantee) 的格式发到网络。集合保证(Collection Guarantee) 会被用来获取有关这个交易集合及相关交易的完整信息。

Consensus Node 共识节点

共识节点会依照收集节点发来的交易集合信息来组织和提议区块。

Execution Node 执行节点

执行节点会执行交易,并且依照交易更新数据(比如一笔转款交易会改变余额)。执行节点会把执行收据(Execution Recipt)发到网络中。一个执行收据(Execution Recipt)包含一个执行结果,也就是当实行完成那一刻的数据的哈希值。

Verification Node 验证节点

验证节点会对执行节点的工作的准确度进行评估。验证节点会把结果许可(Result Approval)发到网络中。结果许可会与共识节点的执行结果进行比对来检测执行的正确性。
 
下面这个是数据在网络中如何流动的高度概括:
notion image
共识委员会使用的是HotStuff共识协议来为提议的区块达成共识。更详细的协议介绍可以参看这里: HotStuff协议白皮书
 
你也许会想问,为什么要有这么多种节点类型? 让我来解释下。我们的目标是打造一个不仅性能优秀且易于开发的区块链,不同于 Layer2或者分片这种以提高开发难度为代价的解决方案。我们采用的方案是把传统一个区块链节点的角色分成多个角色,这给予了我们扩大网络的灵活度。我们分成了不同的角色,交易的选择和排序,执行交易,区块打包和交易执行验证。这使得我们得以打造一个,不牺牲安全的,分布式的,同时还把多数的计算量集中到很少的高效节点的网络。
 
让我们再近距离的看一下这些实现了高效网络的数据和角色。
 
整个系统的交易吞吐量取决于共识算法的效率,也就是由共识节点运行的,四个主要节点类型之一。我们经常把共识节点称为共识委员会。在收集节点把用户发来的交易整理成集合之后,收集节点会把交易集合发到共识委员会。委员会中的节点必须快速的对区块中的交易集合的顺序达成共识。就像你能想象的,这项操作的速度非常受区块大小的影响,因为区块需要发到共识委员会中的所有节点。Flow协议通过不包含区块中交易的具体内容来实现高效率。取而代之的,区块只会包含收集节点对其能被网络接入的许可,称为集合保证(Collection Guarantee),简单说来,也就是一个集合的验证标签。集合保证由共识首领添加到区块中。因为他们只是简单的验证标签,而不是较大的交易,节点可以更快的处理和对其排序。
 
区块在被共识首领批准之后,它接下来就能交由执行节点处理了。执行节点会监听p2p网络中的活动并找到新的由共识委员会提交的要被处理的区块。一个执行节点会用区块中的集合保证去向收集节点索要集合中的内容从而处理其中的交易。区块的执行需要按次序进行来保证最终结果的正确性(改变交易的顺序会带来不同的结果,并行的交易处理会带来其他的挑战,本篇文章就先不提及)。因此,处理的速度对交易的吞吐量也是非常重要的。执行节点需要数据中心级别且具备非常强大的运算能力和内存。
 
当区块被执行之后,每个执行节点会发布一个交易结果,交易结果需要由验证节点验证从而确保执行是正确的。验证的意思是,执行交易并将结果与执行节点发布的结果对比。与区块执行不同,区块的验证可以并行进行,因为每笔交易的执行结果都可以独立的被验证。这也就是说验证的扩大规模是容易实现的(多个验证节点验证同步的验证不同的交易)。验证进程的同步进行是通过把一个区块分成若干小块实现的。一个验证节点会从一个区块中包含的执行结果确定小块的任务,并向执行节点索要小块的数据包。验证节点会把结果的许可发到网络中,共识节点会用结果的许可验证区块的执行并最终封装这个区块(我们会在接下来的文章中详细讨论这个流程)。
 
在2022年Flow协议的实现中,小块(chunks)和集合(collection)是一一对应的关系。集合是将来被处理的,小块是已经被处理过的。
 
notion image
 
希望你现在对数据流已经有了个大概的了解。在接下来的文章中,我们会更详细的探讨区块的具体的每个阶段,交易的声明周期还有数据存储。在那之前,我们会过一遍协议的时间点(Timing),我认为这对了解其他概念也会很有帮助。
 

其他链接