#1.Fabric总体架构
Fabric架构主要包括三个模块:会员(Membership),区块链(Blockchan)和链码(chaincode)。

1.1成员服务

包含下列组件:注册、身份认证管理及审计。

成员服务通过公钥基础设施(Public Key Infrastructure (PKI))和去中心化的/共识技术使得不带权限的区块链变成带权限的区块链。成员必须被许可才能加入网络,通过实体注册来获得长时间的,可能根据实体类型生成的身份凭证(登记证书enrollment certificates)。在用户使用过程中,这样的证书允许交易证书颁发机构(Transaction Certificate Authority (TCA))颁发匿名证书。交易证书被用来对提交交易授权。交易证书存储在区块链中,并对审计集群授权,否则交易是不可链接的。

1.2区块链服务

包含下列组件:共识管理、分布式账本、点对点网络和分类存储

区块链服务通过HTTP/2上的点对点(peer-to-peer)协议来管理分布式总账。为了提供最高效的哈希算法来维护世界状态的复制,数据结构进行了高度的优化。每个部署中可以插入和配置不同的共识算法(PBFT, Raft, PoW, PoS)。

1.3链码服务

包含下列组件:安全容器 、安全注册中心

Fabric的智能合约smart contract称为链码chaincode,是一段代码,它处理网络成员所同意的业务逻辑。

链码可采用Go、Java、Node.js语言编写。链码被编译成一个独立的应用程序,fabric用Docker容器来运行chaincode,里面的base镜像都是经过签名验证的安全镜像,包括OS层和开发chaincode的语言、runtime和SDK层。一旦chaincode容器被启动,它就会通过gRPC与启动这个chaincode的Peer节点连接。

1.4账本

账本Ledger主要包含两块:blockchain和state。blockchain就是一系列连在一起的block,用来记录历史交易。state对应账本的当前最新状态,它是一个key-value数据库,Fabric默认采用Level DB, 可以替换成其他的Key-value数据库,如Couch DB。

1.5交易

Fabric上的transction交易分两种,部署和调用。

1.5.1部署:

把Chaincode部署到peer节点上并准备好被调用,当一个部署交易成功执行时,Chaincode就被部署到各个peer节点上。好比把一个web service或者EJB部署到应用服务器上的不同实例上。

1.5.2调用:

客户端应用程序通过Fabric提供的API调用先前已部署好的某个chaincode的某个函数执行交易,并相应地读取和写入KV数据库,返回是否成功或者失败。

1.6 APIs, Events, SDKs

Fabric提供API方便应用开发,对服务端的ChainCode,目前支持用Go、Java或者Node.js开发。对客户端应用,Fabric目前提供Node.js和Java SDK。未来计划提供Python 和Go SDK,Fabric还提供RESTAPI。对于开发者,还可以通过CLI快速去测试chaincode,或者去查询交易状态。在区块链网络里,节点和chaincode会发送events来触发一些监听动作,方便与其他外部系统的集成。

2.Fabric应用开发流程

开发者创建客户端应用和智能合约(chaincode),Chaincode被部署到区块链网络的Peer节点上面。通过chaincode来操作账本,当你调用一个交易transaction时,你实际上是在调用Chaincode中的一个函数方法,它实现业务逻辑,并对账本进行get, put, delete操作。客户端应用提供用户交互界面,并提交交易到区块链网络上。

3.Fabric网络

节点是区块链的通信实体,节点是一个逻辑概念,不同类型的节点可以运行在同一台物理服务器上。这些节点可能部署在云上面或者本地。可能来自不同的公司或者组织。在区块链网络中有两种类型的节点:Peer节点和Orderer节点,如下图所示。

Peer节点:chaincode部署在Peer节点上,它对账本进行读写操作。一个Peer节点可以充当多种角色,如背书者endorser,提交者committer。一个区块链网络中会有多个Peer节点。

Orderer节点:对交易进行排序,批量打包,生成区块,发给Peer节点。一个区块链网络中会有多个Orderer节点,它们共同提供排序服务。排序服务可以别实现为多种不同的方式,从一个中心化的服务(被用于开发和测试,如Solo),到分布式协议(如Kafka)。

排序服务提供了通向客户端和Peer节点的共享通信通道。提供了包含交易的消息广播服务(broadcast和deliver)。客户端可以通过这个通道向所有的节点广播(broadcast)消息。通道可以向连接到该通道的节点投递(deliver)消息。

排序服务支持多通道,类似于发布/订阅消息系统中的主题topic。客户端和Peer节点可以连接到一个给点的通道,并通过给定的通道发送和接收消息。多通道使得Peer节点可以基于应用访问控制策略来订阅任意数量的通道;也就是说,应用程序在指定Peer节点的子集中架设通道。这些peer组成提交到该通道交易的相关者集合,而且只有这些peer可以接收包含相关交易的区块,与其他交易完全隔离,实现数据隔离和保密。

此外,peers的子集将这些私有块提交到不同的账本上,允许它们保护这些私有交易,与其他peers子集的账本隔离开来。应用程序根据业务逻辑决定将交易发送到1个或多个通道。

例如,如上图所示,peer 1,2和N订阅红色通道,并共同维护红色账本; peer 1和N订阅蓝色通道并维护蓝色账本;类似地,peer 2和peer N在黑色通道上并维护黑色账本。

在这个例子中,peer N在订阅了所有通道,我们看到每个通道都有一个相关的账本。一般来说,我们称不涉及所有peer的账本为子账本,另一种是系统账本,即全账本。

4.Fabric交易流程

  • 第一步,客户端Client构造交易提案

client利用SDK(Node.js\java..)构造一个交易提案propose,该propose包含调用智能合约功能函数请求,用来确认哪些数据可以读取或者写入账本,client将交易提案propose发送给一个或多个peer节点,交易提案包含本次交易要调用的合约标识、合约方法和参数信息以及客户端签名等。

SDK将交易提案打包为可识别的格式(如gRPC上的protocolbuffer),并使用用户的加密凭证为该交易提案生成唯一的签名。

  • 第二步,背书节点模拟执行交易

背书节点endorser收到交易提案后,验证签名并确定提交者是否有权执行操作。背书节点将交易提案的参数作为输入,在当前状态KV数据库上执行交易,生成包含执行返回值、读操作集合和写操作集合的交易结果(此时不会更新账本),这些值的集合、背书节点的签名和背书结果(YES / NO)作为提案的结果返回给客户端SDK,SDK解析这些信息判断是否应用于后续的交易。

  • 第三步,客户端把交易发送到共识服务节点

应用程序(SDK)验证背书节点签名,并比较各节点返回的提案结果,判断提案结果是否一致以及是否参照指定的背书策略执行。客户端收到各个背书节点的应答后,打包到一起组成一个交易并签名,发送给Orderers。

  • 第四步,orderer节点共识排序,生成新区块,提交交易

Orderers对接收到的交易进行共识排序,然后按照区块生成策略,将一批交易打包到一起,生成新的区块,调用deliver API投递消息,发送给提交节点。

提交节点收到区块后,会对区块中的每笔交易进行校验,检查交易依赖的输入输出是否符合当前区块链的状态,完成后将区块追加到本地的区块链,并修改K-V状态数据库。

Fabric1.4 架构和原理的更多相关文章

  1. HBase的基本架构及其原理介绍

    1.概述:最近,有一些工程师问我有关HBase的基本架构的问题,其实这个问题仅仅说架构是非常简单,但是需要理解.在这里,我觉得可以用HDFS的架构作为借鉴.(其实像Hadoop生态系统中的大部分组建的 ...

  2. SQL Server AlwaysOn架构及原理

    SQL Server AlwaysOn架构及原理 SQL Server2012所支持的AlwaysOn技术集中了故障转移群集.数据库镜像和日志传送三者的优点,但又不相同.故障转移群集的单位是SQL实例 ...

  3. 爱莲(iLinkIT)的架构与原理

    随着移动互联网时代的到来,手机正在逐步替代其他的设备,手机是电话.手机是即时通讯,手机是相机,手机是导航仪,手机是钱包,手机是音乐播放器……. 除此之外,手机还是一个大大的U盘,曾几何时,我们用一根长 ...

  4. Hbase架构与原理

    Hbase架构与原理 HBase是一个分布式的.面向列的开源数据库,该技术来源于 Fay Chang所撰写的Google论文"Bigtable:一个结构化数据的分布式存储系统".就 ...

  5. [转帖]万字详解Oracle架构、原理、进程,学会世间再无复杂架构

    万字详解Oracle架构.原理.进程,学会世间再无复杂架构 http://www.itpub.net/2019/04/24/1694/ 里面的图特别好 数据和云 2019-04-24 09:11:59 ...

  6. HDFS架构及原理

    原文链接:HDFS架构及原理 引言 进入大数据时代,数据集的大小已经超过一台独立物理计算机的存储能力,我们需要对数据进行分区(partition)并存储到若干台单独的计算机上,也就出现了管理网络中跨多 ...

  7. Spark基本架构及原理

    Hadoop 和 Spark 的关系 Spark 运算比 Hadoop 的 MapReduce 框架快的原因是因为 Hadoop 在一次 MapReduce 运算之后,会将数据的运算结果从内存写入到磁 ...

  8. Oracle rac架构和原理

        Oracle RAC Oracle Real Application Cluster (RAC,实时应用集群)用来在集群环境下实现多机共享数据库,以保证应用的高可用性:同时可以自动实现并行处理 ...

  9. storm架构及原理

    storm 架构与原理 1 storm简介 1.1 storm是什么 如果只用一句话来描述 storm 是什么的话:分布式 && 实时 计算系统.按照作者 Nathan Marz 的说 ...

随机推荐

  1. CSS 学习第一天

    css的三种引入方式: 1.内嵌:直接在标签中添加style属性 格式:<标签名 style="样式1:样式值1:样式2:样式值2"> 2.内联:在head标签中添加& ...

  2. C#LeetCode刷题之#48-旋转图像(Rotate Image)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3668 访问. 给定一个 n × n 的二维矩阵表示一个图像. 将 ...

  3. 使用 VMware Workstation Pro 让 PC 提供云桌面服务——学习笔记(一)

    最终效果: 能够通过xshell等终端设备, 远程访问虚拟机 操作步骤 1. 安装VMware 网上自行下载VMware 软件,这里不给出详细操作 2. 下载安装系统 这里使用 Centos 的lin ...

  4. JS实例-DOM查询

    <!DOCTYPE html><html lang="en"><head> <meta charset="utf-8" ...

  5. SpringBoot---关于 WebMvcConfigurerAdapter 过时问题及解决方法

    SpringBoot---关于 WebMvcConfigurerAdapter 过时问题及解决方法 环境: IDEA :2020.1 Maven:3.5.6 SpringBoot: 2.3.2 在Sp ...

  6. sql server 查询表字段的说明备注信息

    SELECT 表名 = case when a.colorder= then d.name else '' end, 表说明 = case when a.colorder= then isnull(f ...

  7. 火题大战Vol.1 A.

    火题大战Vol.1 A. 题目描述 给定两个数\(x\),\(y\),比较\(x^y\) 与\(y!\)的大小. 输入格式 第一行一个整数\(T\)表示数据组数. 接下来\(T\)行,每行两个整数\( ...

  8. JVM的方法执行引擎-entry point栈帧

    接着上一篇去讲,回到JavaCalls::call_helper()中: address entry_point = method->from_interpreted_entry(); entr ...

  9. onlyoffice在线编辑

    一.安装ONLYOFFICE Document Server 二.集成onlyoffice的二次开发 三.故障排除: 四.缺陷 五.总结 ONLYOFFICE Document Server提供文档协 ...

  10. WARNING: The host 'db01' could not be looked up with /data/mysql/bin/resolveip. This probably means that your libc libraries are not 100 % compatible with this binary MySQL version......

    Linux系统安装MySQL,环境参数: 硬件配置:CPU: Xeon(R) CPU E5-2650 v4 @ 2.20GHz 8核内存:16G硬盘:系统盘200GB 数据盘1TB 操作系统CentO ...