目录

1. 区块链核心特性................................. 3

2. 区块链系统架构................................. 4

3. 核心概念与组件................................. 7

3.1. 网络层相关组件........................... 8

3.2. 共识机制................................ 11

3.3. 权限管理................................ 12

  1. 区块链核心特性

区块链核心特性有如下:

  1. 解耦了原子排序环节与其他复杂处理环节,消除了网络处理瓶颈,提高可扩展性;
  2. 解耦交易处理节点的逻辑角色为背书节点、确认节点,排序节点,CA节点,可以根据负载进行灵活部署;
  3. 支持身份证书管理服务,有单独的区块链CA中心服务,提供更多证书功能;
  4. 支持多通道特性,不同通道之间的数据彼此隔离,提高隔离安全性;
  5. 支持可拔插的架构,包括共识、权限管理、加解密、账本机制都模块,支持多种类型;
  6. 支持系统链码管理应用链码的区块链系统的处理,并且支持可编程和第三方实现。
  1. 区块链系统架构

区块链整体架构

区块链为应用提供了gRPC API,以及封装API的SDK供应用调用。应用可以通过SDK访问区块链网络中的多种资源,包括账本、交易、链码、事件、权限管理等。应用开发者只需要跟这些资源打交道即可,无需关心如何实现。其中,账本是最核心的结构,记录应用信息,应用则通过发起交易来向账本中记录数据。交易执行的逻辑通过链码来承载。整个网络运行中发生的事件可以被应用访问,以触发外部流程甚至其他系统。权限管理则负责整个过程中的访问控制。账本和交易进一步地依赖核心的区块链结构、数据库、共识机制等技术;链码则依赖容器、状态机等技术;权限管理利用了已有的PKI体系、数字证书、加解密算法等诸多安全技术。底层由多个节点组成P2P网络,通过gRPC通道进行交互,利用Gossip协议进行同步。

层次化结构提高了架构的可扩展和可插拔性,方便开发者以模块为单位进行开发。

区块链根据交易过程中不同环节的功能,在逻辑上将节点角色解耦为背书节点(Endorser)和确认节点(Committer)、排序节点(Orderer),让不同类型节点可以关注处理不同类型的工作负载。区块链的交易处理过程如下图所示。

区块链的交易处理过程

在整个交易过程中,各个组件的功能主要为:

客户端(App):客户端应用使用SDK接口与区块链网络打交道。首先,客户端从CA节点获取合法的身份证书来加入到网络内的应用通道。发起正式交易前,需要先构造交易提案(Proposal)提交给背书节点(Endorser)进行背书;客户端收集到足够(背书策略决定)的背书支持后可以利用背书构造一个合法的交易请求,发给排序节点(Orderer)进行排序处理。客户端还可以通过事件机制来监听网络中消息,来获知交易是否被成功接收。

背书节点(Endorser):完成对交易提案的背书(目前主要是签名)处理。收到来自客户端的交易提案后,首先进行合法性和权限检查,检查通过则模拟运行交易,对交易导致的状态变化(以读写集形式记录,包括所读状态的键和版本,所写状态的键值)进行背书并返回结果给客户端。注意网络中可以只有部分节点担任背书节点(Endorser)角色。

确认节点(Committer):负责维护区块链和账本结构(包括状态数据库、历史数据库、索引数据库等)。该节点会定期地从排序节点(Orderer)获取排序后的批量交易区块结构,对这些交易进行写入账本前的最终检查(包括交易消息结构、签名完整性、是否重复、读写集合版本是否匹配等)。检查通过后执行合法的交易,将结果写入账本,同时构造新的区块,更新区块中记录交易是否合法等信息。同一个物理节点可以仅作为确认节点(Committer)角色运行,也可以同时担任背书节点(Endorser)和确认节点(Committer)这两种角色。

排序节点(Orderer):仅负责排序。为网络中所有合法交易进行全局排序,并将一批排序后的交易组合生成区块结构。排序节点(Orderer)一般不需要跟账本和交易内容直接打交道。

CA节点:负责网络中所有证书的管理(分发、撤销等),实现标准的PKI架构。主要代码在单独的区块链CA中心项目中。CA节点在签发证书后,自身不参与到网络中的交易过程。

  1. 核心概念与组件

区块链采用了模块化功能设计,整体的功能模块结构如下图所示:

区块链核心组件

区块链面向不同的开发人员提供了不同层面的功能,自下而上可以分为三层:

  1. 网络层:面向系统管理人员。实现P2P网络,提供底层构建区块链网络的基本能力,包括代表不同角色的节点和服务;
  2. 共识机制和权限管理:面向联盟和组织的管理人员。基于网络层的连通,实现共识机制和权限管理,提供分布式账本的基础;
  3. 业务层:面向业务应用开发人员。基于分布式账本,支持链码、交易等跟业务相关的功能模块,提供更高一层的应用开发支持。

下面介绍网络层相关组件的功能和作用。

  1. 网络层相关组件

网络层通过软、硬件设备,实现了对分布式账本结构的连通支持,包括节点、排序者、客户端等参与角色,还包括成员身份管理、Gossip协议等支持组件。

节点(Peer)的概念最早来自P2P分布式网络,意味着在网络中担任一定职能的服务或软件。节点功能可能是对等一致的,也可能是分工合作的。在区块链网络中,节点(Peer)意味着在网络中负责接受交易请求、维护一致账本的各个节点实例。这些实例可能运行在裸机、虚拟机甚至容器中。节点之间彼此通过gRPC消息进行通信。按照功能角色划分,节点(Peer)可以包括两种类型:

背书节点(Endorser):负责对来自客户端的交易提案进行检查和背书;

确认节点(Committer):负责检查交易请求,执行交易并维护区块链和账本结构;

这些角色是功能上的划分,彼此并不相互排斥。一般情况下,网络中所有节点都具备确认(Committer)功能;部分节点具有背书(Endorser)功能。

排序节点(Orderer),负责对所收到的交易在网络中进行全局排序,维持了一个gRPC的双向通道。排序节点(Orderer)可以支持多通道。不同通道之间彼此隔离,通道内交易相关信息将仅发往加入到通道内的节点,从而提高隐私性和安全性。在目前的设计中,所有的交易信息都会从排序节点(Orderer)经过,因此,排序节点(Orderer)在网络中必须处于可靠、可信的地位。

从功能上看,排序节点(Orderer)的目的是对网络中的交易分配全局唯一的序号,实际上并不需要交易相关的具体数据内容。因此为了进一步提高隐私性,发往排序节点(Orderer)的可以不是完整的交易数据,而是部分信息,比如交易加密处理后的结果,或者仅仅是交易的Hash值、Id信息等。这些改进设计会降低对排序节点(Orderer)可靠性和安全性的需求。

客户端是用户和应用跟区块链网络打交道的桥梁。客户端主要包括两大职能:

  1. 操作区块链网络:包括更新网络配置、启停节点等;
  2. 操作运行在网络中的链码:包括安装、实例化、发起交易调用链码等。

这些操作需要跟节点和排序节点打交道。特别是链码实例化、交易等涉及到共识的操作,需要跟排序节点交互。网络中的节点和排序节点等节点则对应提供了gRPC远程服务访问接口,供客户端进行调用。

CA节点负责对区块链网络中的成员身份进行管理。区块链网络目前采用数字证书机制来实现对身份的鉴别和权限控制,CA节点则实现了PKI服务,主要负责对身份证书进行管理,包括生成、撤销等。需要注意的是,CA节点可以提前签发身份证书,发送给对应的成员实体,这些实体在部署证书后即可访问网络中的各项资源。后续访问过程中,实体无须再次向CA节点进行请求。因此,CA节点的处理过程跟网络中交易的处理过程是完全解耦开的,不会造成性能瓶颈。

区块链网络中的节点之间通过Gossip协议来进行状态同步和数据分发。Gossip协议是P2P领域的常见协议,用于进行网络内多个节点之间的数据分发或信息交换。由于其设计简单,容易实现,同时容错性比较高,而被广泛应用到了许多分布式系统。Gossip协议的基本思想十分简单,数据发送方从网络中随机选取若干节点,将数据发送过去;接收方重复这一过程(往往只选择发送方之外节点进行传播)。这一过程持续下去,网络中所有节点最终(时间复杂度为节点总个数的对数)都会达到一致。数据传输的方向可以是发送方发送或获取方拉取。

在区块链网络中,节点会定期地利用Gossip协议发送它看到的账本的最新的数据,并对发送消息进行签名认证。通过使用该协议,主要实现如下功能:

  1. 通道内成员的探测:新加入通道的节点可以获知其他节点的信息,并发送信息宣布在线;离线节点经过一段时间后可以被其他节点感知。
  2. 节点之间同步数据:多个节点之间彼此同步数据,保持一致性。另外,Leader节点从排序节点拉取区块数据后,也可以通过Gossip传播给通道内其他、节点,Leader节点是某一组织里负责与排序节点交互的节点。
    1. 共识机制

区块链共识的过程如下:

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

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

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

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

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

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

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

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

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

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

  1. 权限管理

成员必须被许可才能加入网络,通过证书,加密,签名等手段保证安全。通过多通道功能,保证只有参与交易的节点能访问到数据,其他的节点看不到。满足数据保护方面的法律法规要求。

Fabric区块链架构说明相关推荐

  1. 【思前享后】区块链架构与特点

    小猿"思前享后"为大家分享优质内容!----Share猿 Hi大家好:   我是Share猿,Share是英文(SHARE),猿是猿猴的猿,在微信公众号.微博.简书.掘金.今日头条 ...

  2. 区块链架构与交易流程(fabric1.0)

    区块链架构与交易流程 区块链系统架构 节点 网络拓扑 交易流程 1. 提交交易提案 2. 模拟执行提案并签名 3. 返回模拟执行结果 4. 提交交易 5. 交易排序并结块 6. 广播区块 7. 保存区 ...

  3. 简述区块链架构设计,通俗易懂

    简述区块链架构设计,通俗易懂 首先,支持一下阿里云:阿里云ECS服务器,有幸运券了:有缘的朋友们,可以前来领取: https://promotion.aliyun.com/ntms/act/ambas ...

  4. 区块链技术架构 java_《区块链底层设计Java实战》之第二章区块链架构

    第2 章   区块链架构 会当凌绝顶  一览众山小 正如开篇所言:会当凌绝顶,一览众山小.进入区块链底层开发前,我们需要 了解区块链底层的通用架构是如何设计的,从上而下地审视区块链底层的结构,做 到了 ...

  5. 写给CTO的主流区块链架构横向剖析

    关注微信公众号 区块链大本营,获取更多区块链开发技能 时常听人们谈起区块链,从2009年比特币诞生至今,各式各样的区块链系统或基于区块链的应用不断被开发出来,并被应用到大量的场景中,而区块链技术本身也 ...

  6. 10分钟弄懂当前各主流区块链架构

    最近区块链的概念可谓十分火热,从风投的投资到企业招聘区块链人才,似乎处处暗示着该技术将会给人类带来巨大改变.废话不多说,咱们就从技术角度来了解一下当前最主流的区块链诸如比特币.以太坊.HyperLed ...

  7. Fabric区块链网络

    翻译自fabric官方文档: https://hyperledger-fabric.readthedocs.io/en/release-1.3/network/network.html Fabric区 ...

  8. Fabric区块链官方浏览器【中文版】

    个人博客导航页(点击右侧链接即可打开个人博客):大牛带你入门技术栈 blockchain-explorer是Hyperledger官方提供的区块链浏览器,目前支持Fabric 1.4.x区块链,中文版 ...

  9. 40k~65k, 区块链架构师技能包一览: 多语言、多平台、多算法...别慌, 先投简历再说...

    戳蓝字"区块链大本营"关注我们哦! 每周日,「区块链大本营」人才快报与你不见不散!在这里,可以第一时间了解区块链的行业动态.技术风向与人才需求. 求职者请将个人简历以Word文档形 ...

最新文章

  1. 如何提高ORACLE数据库的查询统计速度
  2. Python编程的若干个经典小技巧
  3. python读取二进制数据中的while循环_在Python中读取二进制文件并循环遍历每个字节...
  4. 福利派送!6 月份赠书活动开始啦!
  5. flex实现水平居中和两栏布局
  6. secp256k1 php,区块链中的数学-secp256k1 签名可锻性以及解决方案
  7. I2C通信读写数据过程
  8. 第四周作业 简单地邮件发送实现
  9. PHP中使用了mcrypt_decrypt函数处理Json Json_decode 返回空值或者 NULL 的问题 json_last_error 3...
  10. 达思sql数据库修复软件:用友金蝶管家婆思迅中了勒索病毒怎么办?
  11. 2021年大学计算机基础,2021年大学计算机基础试题题库及答案-20210418080659.doc-原创力文档...
  12. java各知识点详细总结毕向东_毕向东课程笔记——Java语言基础
  13. 让 Alfred 支持拼音
  14. 电视购物直播系统是如何运行的?视频直播流媒体服务器购物直播应用案例
  15. 域名生成企业邮箱golang企业邮箱发邮件 golang gmail发邮件
  16. 唱响艾泽拉斯-泰兰德的拥抱专辑
  17. 金融远期合约与金融期货合约
  18. 喜大普奔!GitHub 官方 App 正式版首发!
  19. keilC51编译常见错误和警告说明
  20. 高效能人士执行的四原则(2017-12-15)

热门文章

  1. REBOL 中 Bind 的理解
  2. 用友BQ商业智能平台设计模式——信息域智能查询
  3. 鲁棒性Robustness
  4. C++ 的静态成员变量为什么一定要在类外定义
  5. 电子产品为什么一定要3C认证?
  6. 摄氏温度转换华氏温度_什么是摄氏温度?
  7. 思科服务器的ip怎么配置文件,思科无线AP初始配置IP
  8. 面试指南,求职必看 ! 大学毕业生找工作必备指南!
  9. 建筑制图计算机辅助设计,计算机辅助设计AutoCAD建筑制图中绘制技巧研究.doc
  10. 如何使用快捷键在网页中调用扫描仪进行扫描 - Dynamic Web TWAIN