浅析Hyperledger Fabric共识算法

news/2024/7/2 14:13:36

链客,专为开发者而生,有问必答!

此文章来自区块链技术社区,未经允许拒绝转载。

在这里插入图片描述

区块链系统是一个分布式架构,交易账本信息由各个节点管理,组成一个庞大的分布式账本。在分布式系统中,各个节点收到的交易信息的顺序可能存在差异(例如,网络延迟、主机处理性能),这会导致账本信息的状态不一致,例如,小王账户只有10元,但是他同时转账给小李和小张各10元,并且将这两条交易信息分别发送到两个分布式节点上,如果不对这两条交易进行排序校验,那么,小王实际消费了20元(所谓的双花问题)。所以,在区块链系统中,我们需要一套机制,来保证交易的先后顺序,这套机制就是人们常说的“共识算法”。

在比特币中,采用POW算法来解决上述双花问题,例如,小王还是将两条转账交易分别发给两组节点,这两组节点分别对其中一条交易打包后写入区块链,然后整个系统中产生了两条区块链,一条包含了小王转10元给小李的交易信息,另外一条包含了小王转10元给小张的交易信息(所谓的分叉)。随后,两组节点继续分别打包并生成各自的区块链,两条区块链继续增长。但是,这两组节点的算力各有差异,最后总会出现一组节点的区块链更长一些,那么,另一组节点就会将更长的区块链同步到本地,作为有效链。最终,小王的其中一笔重复的交易被丢弃。

Hyperledger Fabric的共识算法和比特币有很大不同,首先,前者是由permissioned节点组成的分布式系统,所有记账节点都是可信的(不会恶意伪造交易信息),所以,不需要POW算力证明。同时,Hyperledger Fabric的各个节点的交易信息统一由排序服务节点(orderer service node)处理,保证每个节点上的交易顺序一致,天然避免了分叉问题。目前,Hyperledger Fabric提供两种排序算法,SOLO和Kafka,其中SOLO模式只有一个order服务节点负责接收交易信息并排序,这是最简单的一种排序算法,不适合大规模的实际生产环境,一般用在实验室测试环境中。下面重点介绍Kafka算法。

排序服务原理

排序服务是由一组orderer节点(Ordering Service Node,简称OSN)组成,OSN在网络中的角色是代理节点,多个OSN会对接到Kafka集群,利用Kafka完成共识功能。

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

什么是kafka

Hyperledger Fabric的核心共识算法通过Kafka集群实现,简单来说,就是通过Kafka对所有交易信息进行排序(如果系统存在多个channel,则对每个channel分别排序)。Kafka最初由Linkedin公司开发,后来成为Apache的一个开源项目。

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

Broker:消息处理节点,主要任务是接收producers发送的消息,然后写入对应的topic的partition中,并将排序后的消息发送给订阅该topic的consumers。 大量的Broker节点提高了数据吞吐量,并互相对partition数据做冗余备份(类似RAID技术)。

Zookeeper:为Brokers提供集群管理服务和共识算法服务(paxos算法),例如,选举leader节点处理消息并将结果同步给其它followers节点,移除故障节点以及加入新节点并将最新的网络拓扑图同步发送给所有Brokers。

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

Consumer:消息消费者,应用程序通过Consumer API订阅topic并接收处理后的消息。

Broker上的消息布局

Kafka将消息分类保存为多个topic,每个topic中包含多个partition,消息被连续追加写入partition中,形成目录式的结构。一个topic可以被多个consumers订阅。简单来说,partition就是一个FIFO的消息管道,一端由producer写入消息,另一端由consumer取走消息(注意,这里的取走并不会移除消息,而是移动consumer的位置指针)。

Hyperledger Fabric中的每个channel对应一个topic(topic名称就是channelID),每个topic只有一个partition(0号分区),没有利用到多分区的负载均衡特性。每条交易信息对应partition中的一个record消息记录,形成一条有序的交易信息链,最后,经过分割打包后,形成区块链,写入committing peer节点。

总结

Hyperledger Fabric作为企业级的区块链项目,更加注重TPS吞吐量和部署成本,所以,采用的Kafka共识算法。相比于POW共识算法,Kafka更加高效,节能环保,而且提供容错机制,保证系统稳定运行。


http://lihuaxi.xjx100.cn/news/237195.html

相关文章

nlp文本数据增强_如何使用Texthero为您的NLP项目准备基于文本的数据集

nlp文本数据增强Natural Language Processing (NLP) is one of the most important fields of study and research in today’s world. It has many applications in the business sector such as chatbots, sentiment analysis, and document classification.Preprocessing an…

ubuntu16.04 ROS安转及RVIZ启动

1、软件中心配置 首先打开软件和更新对话框,打开后按照下图进行配置(确保你的"restricted", "universe," 和 "multiverse."前是打上勾的): 2、添加源 $ sudo sh -c echo &qu…

github README.md教程

github README.md教程 总结 github中README.md通过特殊字符标记和缩进来达到格式控制,也可以用HTML标签来实现格式控制。 教程一: Markdown 的目标是实现「易读易写」,兼容HTML。 但是,在 HTML 区块标签间的 Markdown 格式语法将不…

区块链的去中心化VS传统互联网的去中心化:技术与治理的双重困境

链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 区块链的去中心化VS传统互联网的去中心化:技术与治理的双重困境11 主要观点: 1、传统互联网经典的去中心化项目BitTorrent…

poj3009

一、题意:给定一个矩形区域,代表冰球场。每个单元格可有四种数值:2是冰球的起始位置;3代表冰球最后需要到达的位置;0代表空,球可通过;1代表障碍物,球碰撞一次后,1变成0&a…

如何设置Java Spring Boot JWT授权和认证

In the past month, I had a chance to implement JWT auth for a side project. I have previously worked with JWT in Ruby on Rails, but this was my first time in Spring. 在过去的一个月中,我有机会为辅助项目实现JWT auth。 我以前曾在Ruby on Rails中使用…

EOS共识机制——DPoS代理权益证明

链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 区块链共识机制与它的演进,是由于区块链式去中心化而且分布式的系统,必须要有一套放诸四海皆准类似宪法的规则,来…

docker的用法

Docker是开发人员和系统管理员构建,发布和运行分布式应用程序的开放平台,可以在笔记本电脑、数据中心、虚拟机还有云服务器上运行。 使用Docker工具来提高生产率的方法:本地依赖:你需要在本地系统上快速试用 magento 吗&#xff1…