链客,专为开发者而生,有问必答!node
此文章来自链客区块链技术问答社区,未经容许拒绝转载。算法
区块链系统是一个分布式架构,交易帐本信息由各个节点管理,组成一个庞大的分布式帐本。在分布式系统中,各个节点收到的交易信息的顺序可能存在差别(例如,网络延迟、主机处理性能),这会致使帐本信息的状态不一致,例如,小王帐户只有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更加高效,节能环保,并且提供容错机制,保证系统稳定运行。