HyperLeger Fabric开发(四)——HyperLeger Fabric共识机制

HyperLeger Fabric开发(四)——HyperLeger Fabric共识机制

一、Fabric共识过程

1、Fabric共识过程

Fabric区块链的网络节点本质上是互相复制的状态机,节点之间需要保持相同的账本状态。为了实现分布式节点的一致性,各个节点需要通过共识过程,对账本状态的变化达成一致性的认同。
Fabric区块链的共识过程包括3个阶段:背书、排序和校验。

2、背书

在背书(endorsement)阶段中,背书节点对客户端发来的交易提案进行合法性校验,然后模拟执行链码得到交易结果,最后根据设定的背书逻辑判断是否支持该交易提案。如果背书逻辑决定支持交易提案,会把交易提案签名后发回给客户端。
客户端通常需要根据链码的背书策略,向一个或者多个成员的背书节点发出背书请求。背书策略会定义需要哪些节点背书交易才有效,例如需要5个成员的背书节点中至少3个同意;或者某个特殊身份的成员支持等。客户端只有在收集足够多的背书节点的交易提案签名,交易才能被视为有效。

3、排序

排序(ordering)阶段就是由排序服务对交易进行排序,确定交易之间的时序关系。排序服务把一段时间内收到的交易进行排序,然后把排序后的批量交易打包成数据块(区块),再把区块广播给通道中的成员。采用排序共识方式,各个成员收到的是一组发生顺序相同的交易,从而保证了所有节点的数据一致性。
Fabric 1.0中的排序服务支持可插拔的架构,除了提供的SOLO和Kafka 模式外,用户可以添加第三方的排序服务。SOLO是单机模式,仅适合开发测试中使用。Kafka模式是基于Kafka开源的分布式数据流平台,具有高扩展性和容错能力,适合用在生产系统。Kafka模式只提供了CFT类型的容错能力,即仅可对节点的一般故障失效容错,缺乏对节点故意作恶的行为进行容错的能力。
排序服务是共识机制中重要的一环,所有交易都要通过排序服务的排序才可以达成全网共识,因此排序服务要避免成为网络上的性能瓶颈。

4、校验

校验(Validation)阶段是确认节点对排序后的交易进行一系列的检验,包括交易数据的完整性检查、是否重复交易、背书签名是否符合背书策略的要求、交易的读写集是否符合多版本并发控制MVCC(Multiversion Concurrency Control)的校验等。当交易通过了所有校验后,将被标注为合法并写入账本中。因为所有的确认节点都按照相同的顺序检验交易,并且把合法的交易依次写入账本中,因此不同确认节点的状态能够始终保持一致。

二、Fabric共识机制

1、Fabric共识模式

在所有Peer节点中,交易信息必须按照一致的顺序写入账本(区块链的一致性基本原则)。例如,比特币通过POW机制竞争记账权,由最先完成数学难题的节点获取记账权并生成区块,决定本区块中的信息顺序,并广播给全网所有节点,以此来达成账本的共识。而Hyperledger Fabric采用了更加灵活、高效的共识算法,以适应企业场景下对高TPS的要求。目前,Hyperledger Fabric有三种交易排序算法:Solo、Kafka、SBFT。
Solo:只有一个排序服务节点负责接收交易信息并排序,是最简单的一种排序算法,一般用于开发测试环境中。Solo共识模式属于中心化的处理方式,不支持拜占庭容错。
Kafka:Kafka是Apache的一个开源项目,主要提供分布式的消息处理/分发服务,每个Kafka集群由多个服务节点组成。Hyperledger Fabric利用Kafka对交易信息进行排序处理,提供高吞吐、低延时的处理能力,并且在集群内部支持节点故障容错,但不支持拜占庭容错。
SBFT:简单拜占庭算法,支持拜占庭容错的可靠排序算法,包括容忍节点故障以及一定数量的恶意节点。目前,Hyperledger Fabric社区正在开发SBFT算法。

2、Solo共识模式

Solo共识模式指网络环境中只有一个排序节点,从Peer节点发送来的消息由一个排序节点进行排序和产生区块;由于排序服务只有一个排序节点为所有Peer节点服务,没有高可用性和可扩展性,不适合用于生产环境,通常用于开发和测试环境。Solo共识模式调用时序图如下:

Solo共识模式调用过程说明:
? ?A、Peer节点通过gPRC连接排序服务,连接成功后,发送交易信息。
? ?B、排序服务通过Recv接口,监听Peer节点发送过来的信息,收到信息后进行数据区块处理。
? ?C、排序服务根据收到的消息生成数据区块,并将数据区块写入账本(Ledger)中,返回处理信息。
? ?D、Peer节点通过deliver接口,获取排序服务生成的区块数据。

3、Kafka共识模式


共识集群由多个排序服务节点(OSN)和一个Kafka集群组成。排序节点之间不直接通信,仅仅与Kafka集群通信。
在排序节点的实现里,通道(Channel)在Kafka中是以主题topic的形式隔离。
每个排序节点内部,针对每个通道都会建立与Kafka集群对应topic的生产者及消费者。生产者将排序节点收到的交易发送到Kafka集群进行排序,在生产的同时,消费者也同步消费排序后的交易。

原文地址:http://blog.51cto.com/9291927/2316045

时间: 2024-10-30 10:39:37

HyperLeger Fabric开发(四)——HyperLeger Fabric共识机制的相关文章

HyperLeger Fabric开发(三)——HyperLeger Fabric架构

HyperLeger Fabric开发(三)--HyperLeger Fabric架构 一.HyperLeger Fabric架构简介 1.通道简介 商业应用的一个重要的需求是私密×××易,为此Fabric设计了通道(Channel)来提供成员之间的隐私保护.通道是部分网络成员之间拥有独立的通信渠道,在通道中发送的交易只有属于通道的成员才可见,因此通道可以看作是Fabric的网络中部分成员的私有通信子网.通道由排序服务管理.在创建通道的时候,需要定义通道的成员和组织.锚节点(anchor pee

HyperLeger Fabric开发(五)——HyperLeger Fabric账本存储

HyperLeger Fabric开发(五)--HyperLeger Fabric账本存储 一.HyperLeger Fabric账本简介 Fabric里的数据以分布式账本的形式存储.账本由一系列有顺序和防篡改的记录组成,记录包含着数据的全部状态改变.账本中的数据项以键值对的形式存放,账本中所有的键值对构成了账本的状态,也称为世界状态(World State).?每个通道中有唯一的账本,由通道中所有成员共同维护着账本,每个记账节点上都保存了所属通道的账本的一个副本,因而是分布式账本.对账本的访问

HyperLeger Fabric开发(一)——HyperLeger简介

HyperLeger Fabric开发(一)--HyperLeger简介 一.HyperLeger简介 1.HyperLeger简介 Hyperledger(超级账本)是Linux基金会于2015年发起的推进区块链数字技术和交易验证的开源项目,目标是让成员共同合作,共建开放平台,满足来自多个不同行业各种用户案例,并简化业务流程.由于点对点网络的特性,分布式账本技术是完全共享.透明和去中心化的,故非常适合于在金融行业的应用,以及其它的例如制造.银行.保险.物联网等行业.通过创建分布式账本的公开标准

HyperLeger Fabric开发(九)——HyperLeger Fabric部署实战(单机)

HyperLeger Fabric开发(九)--HyperLeger Fabric部署实战(单机) 系统环境:RHEL 7.3操作系统Fabric release 1.3 一.crypto-config.yaml文件 1.Orderer节点组织 (1)单节点 OrdererOrgs: - Name: Orderer Domain: example.com Specs: - Hostname: orderer (2)多节点 OrdererOrgs: ??- Name: Orderer ????Do

HyperLeger Fabric开发(七)——HyperLeger Fabric链码开发

HyperLeger Fabric开发(七)--HyperLeger Fabric链码开发 一.链码开发模式 1.链码开发模式简介 Fabric的链码开发调试比较繁琐.在不使用链码开发模式的情况下,链码不能在本地测试,必须部署到docker,install和instantiate后,Peer节点会在新的容器中启动链码.但只能通过docker logs查看链码日志,通过打印日志的方式进行链码调试.如果对链码进行了修改,需要重新开始上述流程.为了简化Fabric链码开发的调试过程,Fabric引入了

HyperLeger Fabric开发(十)——资产交易平台实例

HyperLeger Fabric开发(十)--资产交易平台实例 一.资产交易平台需求分析 1.资产交易平台的功能 A.用户开户.销户功能B.资产登记,即资产上链,资产绑定到用户C.资产转让,即资产所有权的变更D.查询功能,包括用户查询.资产查询.资产历史变更查询 2.业务实体 A.用户,属性包括名字.标识.资产列表.B.资产,属性包括名字.标识.特殊属性列表C.资产变更记录,属性包括资产标识.资产源所有者.资产变更后所有者 3.交互方法 A.用户注册,参数包括用户名称.用户标识B.销户,参数包

HyperLeger Fabric开发(二)——HyperLeger Fabric入门

HyperLeger Fabric开发(二)--HyperLeger Fabric入门 本文使用RHEL 7.3 workstation版本操作系统. 一.HyperLeger Fabric环境部署 1.Go语言开发环境部署 (1)Go语言环境安装Go语言环境安装包下载地址:https://golang.org/dl/https://golang.google.cn/dl/将下载的源码包解压至/usr/local目录sudo tar -C /usr/local -xzf go1.10.1.lin

HyperLeger Fabric开发(六)——HyperLeger Fabric智能合约(链码)

HyperLeger Fabric开发(六)--HyperLeger Fabric智能合约(ChainCode) 一.链码(Chaincode)简介 1.链码简介 在Fabric中,智能合约也称为链码(chaincode),分为用户链码和系统链码.系统链码用来实现系统层面的功能,包括系统的配置,用户链码的部署.升级,用户交易的签名和验证策略等:用户链码用于实现用户的应用功能,开发者编写链码应用程序并将其部署到区块链网络上,终端用户通过与网络节点交互的客户端应用程序调用链码.链码被编译成一个独立的

HyperLeger Fabric开发(八)——HyperLeger Fabric链码开发测试

HyperLeger Fabric开发(八)--HyperLeger Fabric链码开发测试 一.链码实例 SACC项目链码实例如下: package main import ( "fmt" "github.com/hyperledger/fabric/core/chaincode/shim" "github.com/hyperledger/fabric/protos/peer" ) // SimpleAsset implements a si