浅析Hyperledger Fabric共识算法

昕阳小编 108 0

区块链系统是分布式架构,交易账本信息由各个节点管理,形成一个庞大的分布式账本。在分布式系统中,每个节点接收交易信息的顺序可能不同(例如,网络延迟、主机处理性能),这将导致账簿信息的状态不一致。比如小王的账户里只有10元,但是他把这两条交易信息同时转到小李和小张的10元上,并把这两条交易信息分别发送给这两个分布式节点。如果这两笔交易没有进行排序和核对,那么小王实际消费了20元(所谓双花问题)。因此,在区块链体系中,我们需要一套机制来保证交易的秩序。尚力财经小编2022这种机制通常被称为“共识算法”。

在比特币中,POW算法用于解决上述双花问题。例如,小王仍然向两组节点分别发送两个转账事务,这两组节点将一个事务打包写入区块链。然后整个系统生成两个区块链,一个包含小王转账10元给小李的交易信息,另一个包含小王转账10元给小张的交易信息(即所谓的fork)。随后,两组节点继续打包生成自己的区块链,两个区块链继续增长。但是,这两组节点的计算能力是不同的。最后,一组节点总会有一个较长的区块链。然后,另一组节点将本地同步较长的区块链作为有效链。最终,小王的一个重复交易被丢弃。

Hyperledger Fabric的共识算法和比特币有很大不同。首先,前者是由有权限的节点组成的分布式系统,所有记账节点都是可信的(无恶意篡改交易信息)。因此,不需要证明计算能力。同时,Hyperledger Fabric各节点的交易信息由orderer服务节点统一处理,保证了各节点上的交易顺序一致,自然避免了分叉问题。目前Hyperledger Fabric提供了SOLO和Kafka两种排序算法,其中SOLO模式只有一个订单服务节点负责接收交易信息和排序。这是最简单的排序算法,不适合大规模的实际生产环境,一般用于实验室测试环境。接下来重点介绍卡夫卡算法。

排序服务由一组订购者服务节点(OSN)组成。OSN在网络中的角色是代理节点,多个osn会连接到Kafka集群,使用Kafka完成共识功能。

客户端APP通过SDK将验证后的交易信息发送给OSN。然后由OSN对消息进行初步验证后,封装成Kafka消息格式,发送到Kafka集群,对交易信息进行统一排序。

浅析Hyperledger Fabric共识算法-第1张图片-昕阳网

核心共识算法kafka

Hyperledger Fabric是通过Kafka cluster实现的。简单来说,就是通过Kafka对所有的交易信息进行排序(如果系统中有多个通道,则对每个通道分别排序)。Kafka最初由Linkedin开发,后来成为Apache的开源项尚力财经小编2022目。

Kafka是一个分布式流信息处理平台。其目标是为实时数据提供统一的高吞吐量和低延迟性能。Kafka由以下角色组成:

Broker:消息处理节点,主要任务是接收生产者发送的消息,然后写入对应主题的分区,将排序后的消息发送给订阅主题的消费者。大量的代理节点提高了数据吞吐量,并对分区数据进行冗余备份(类似于RAID技术)。

Zookeeper:为代理提供集群管理服务和共识算法服务(paxos算法),比如选举一个领袖节点处理消息并将结果同步到其他追随者节点,移除失败节点,加入新节点,将最新的网络拓扑同步发送给所有代理。

生产者:消息生产者,应用程序通过调用生产者API将消息发送给代理。

消费者:消息消费者。应用程序通过消费者API订阅主题,并接收p 浅析Hyperledger Fabric共识算法-第2张图片-昕阳网

Broker上的消息布局

Kafka将消息保存到多个主题中,每个主题包含多个分区,消息不断添加到分区中,形成目录结构。一个主题可以被多个消费者订阅。简单来说,partition就是一个FIFO消息管道,一端由生产者写,另一端由消费者取(注意这里的取并不是删除消息,而是移动消费者的位置指针)。

Hyperledger Fabric中的每个通道对应一个主题(主题(主题的名称为channelID),每个主题只有一个分区(分区号为0),没有利用多分区负载平衡功能。每条交易信息对应一条分区记录信息记录,形成有序的交易信息链。最后,经过分割和打包,形成一个区块链,写入提交对等节点。尚力财经小编2022浅析Hyperledger Fabric共识算法-第3张图片-昕阳网

浅析Hyperledger Fabric共识算法-第4张图片-昕阳网

Hyperledger Fabric作为企业级的区块链项目,更注重TPS吞吐量和部署成本。因此,采用卡夫卡共识算法。与POW一致性算法相比,Kafka更高效、节能、环保,并提供容错机制,保证系统稳定运行。

参考:

http://kfka.apache.org/intro http://cloudurable.com/blog/kafka-architecture/index.html 3359github.com/yeasy/hyperledger _代码_结构/blob/主/过程/订购者_工作流. md

标签: 2022

抱歉,评论功能暂时关闭!

微信号已复制,请打开微信添加咨询详情!