Fabric架构:抽象的逻辑架构与实际的运行时架构
Fabric从1.X开始,在扩展性及安全性上面有了大大的提升,且新增了诸多的新特性:
多通道:支持多通道,提高隔离安全性。
可拔插的组件:支持共识组件、权限管理组件等可拔插功能。
账本数据可被存储为多种格式。
分化了Peer节点的多种角色,可以根据具体情况实现灵活部署
Hyperledger Fabric超级账本整体逻辑架构如下图所示:
Fabric四大核心组件:
Membership Services:成员管理保证了Fabric平台访问的安全性。提供了成员的注册、管理及审核功能。
Blockchain Services:是区块链的核心部分,为区块链的主体功能提供了底层支撑;包括共识管理、分布式账本实现、账本的存储以及网络中各节点之间的通信实现。
BlockChain:区块之间以Hash连接为结构的交易日志。peer从order service接收交易区块k,并根据背书策略和并发冲突标记区块上的交易是否有效,然后将该区块追加到peer文件系统中的Hash Chain上。
Transaction:交易有对链码的部署或调用两种操作类型:
部署交易:部署是请求在peer上启动链码容器;创建新的链码并设置一个程序作为参数。当一个部署交易执行成功,表明链码已被安装到区块链上。
调用交易:调用是从账本中请求读写集。是在之前已部署链码的情况下执行一个操作。调用交易将使用链码提供的一个函数。当成功时,链码执行特定的函数对账本数据进行操作(修改状态),并返回操作结果。
Chaincode Services:提供了链码的部署及运行时的所需环境。
Chaincode:是一个可以对账本数据进行操作的可开发的组件程;链码被布署运行在一个安全的容器中;用户可以通过调用链码中的指定函数对账本数据进行修改或读取操作。
Event:为各组件之间提供异步通信提供了技术实现。
2.1.2 实际中的运行时架构
实际运行时架构如下图所示:
运行时架构图中各项解释如下:
APP:代表一个客户端(CLI)或SDK,作用是创建交易并获取到足够的背书之后向Orderer排序服务节点提交交易请求(Peer与Orderer节点提供了gRPC远程访问接口,供客户端调用)。
CA:负责对网络中所有的证书进行管理(对Fabric网络中的成员身份进行管理), 提供标准的PKI服务。
MSP(Member Service Provider):为客户端和Peer提供证书的系统抽象组件。
Channel:将一个大的网络分割成为不同的私有"子网"。
通道的作用:通道提供一种通讯机制,将peers和orderer连接在一起,形成一个具有保密性的通讯链路(虚拟), 进行数据隔离。
要加入通道的每个节点都必须拥有自己的通过成员服务提供商(MSP)获得的身份标识。
Orderer:对客户端提交的交易请求进行排序,之后生成区块广播给通道内的所有peer节点。
Org1:代表联盟中的某一个组织(一个联盟中可以多个不同的组织组成)。
Peer:表示组织中的节点;Peer节点以区块的形式从Orderer排序服务节点接收有序状态更新,维护状态和账本。在Fabtic网络环境中 Peer 节点可以划分为如下角色:
Endorsing peer:根据指定的策略调用智能合约,对结果进行背书, 返回提案响应到客户端。
Committing peer:验证数据并保存至账本中。
Anchor peer:跨组织通信。
Leading peer:作为组织内所有节点的的代表连接到Orderer排序服务节点, 将从排序服务节点接收到的批量区块广播给组织内的其它节点。
网络中只有部分节点为背书节点; 网络中所有Peer节点为账本节点。
Chaincode:链式代码,简称链码;运行在容器中,提供相应的API与账本数据进行交互。
Ledger:是由排序服务构建的一个全部有序的交易哈希链块,保存在所有的peer节点中。账本提供了在系统运行过程中发生的可验证历史,它包含所有成功的状态更改(有效交易)和不成功的状态更改(无效交易)。
FAQ
应用程序或客户端到底需要连接到哪些Peer节点?
只需要连接到背书节点即可。
背书节点怎么指定?
在实例化链码时由背书策略指定。
Fabric架构:抽象的逻辑架构与实际的运行时架构的更多相关文章
- Flink 运行时架构
参考链接:https://blog.csdn.net/dajiangtai007/article/details/88575553 1.Flink 运行时架构 Flink 运行时架构主要包含几个部分: ...
- [翻译] WCF运行时架构
原文地址 http://www.cnblogs.com/idior/articles/971252.html 介绍 WCF具有非常易用的编程模型,服务开发者在掌握ABC的概念后可以很容易的使用WCF去 ...
- ILBC 运行时 (ILBC Runtime) 架构
本文是 VMBC / D# 项目 的 系列文章, 有关 VMBC / D# , 见 <我发起并创立了一个 VMBC 的 子项目 D#>(以下简称 <D#>) https:// ...
- IT咨询顾问:一次吐血的项目救火 java或判断优化小技巧 asp.net core Session的测试使用心得 【.NET架构】BIM软件架构02:Web管控平台后台架构 NetCore入门篇:(十一)NetCore项目读取配置文件appsettings.json 使用LINQ生成Where的SQL语句 js_jquery_创建cookie有效期问题_时区问题
IT咨询顾问:一次吐血的项目救火 年后的一个合作公司上线了一个子业务系统,对接公司内部的单点系统.我收到该公司的技术咨询:项目启动后没有规律的突然无法登录了,重新启动后,登录一断时间后又无法重新登 ...
- iOS 架构模式--解密 MVC,MVP,MVVM以及VIPER架构
本文由CocoaChina译者lynulzy(社区ID)翻译 作者:Bohdan Orlov 原文:iOS Architecture Patterns 在 iOS 中使用 MVC 架构感觉很奇怪? 迁 ...
- 2017最新技术java高级架构、千万高并发、分布式集群、架构师入门到精通视频教程
* { font-family: "Microsoft YaHei" !important } h1 { color: #FF0 } 15套java架构师.集群.高可用.高可扩展. ...
- 你真的了解微服务架构吗?听听八年阿里架构师怎样讲述Dubbo和Spring Cloud微服务架构
微服务架构是互联网很热门的话题,是互联网技术发展的必然结果.它提倡将单一应用程序划分成一组小的服务,服务之间互相协调.互相配合,为用户提供最终价值.虽然微服务架构没有公认的技术标准和规范或者草案,但业 ...
- 听听八年阿里架构师怎样讲述Dubbo和Spring Cloud微服务架构
转自:https://baijiahao.baidu.com/s?id=1600174787011483381&wfr=spider&for=pc 微服务架构是互联网很热门的话题,是互 ...
- iOS - 架构模式 - 解密 MVC、MVP、MVVM、VIPER架构
在 iOS 中使用 MVC 架构感觉很奇怪? 迁移到MVVM架构又怀有疑虑?听说过 VIPER 又不确定是否真的值得切换? 相信你会找到以上问题的答案,如果没找到请在评论中指出. 你将要整理出你在 i ...
随机推荐
- gitlab:开发+测试+发布的全流程图
- MySQL前缀索引和索引选择性
有时候需要索引很长的字符列,这会让索引变得大且慢.通常可以索引开始的部分字符,这样可以大大节约索引空间,从而提高索引效率.但这样也会降低索引的选择性.索引的选择性是指不重复的索引值(也称为基数,car ...
- 记录关于vs2008 和vs2015 的报错问题
出现了 VS2008无法创建项目,无法打开项目的情况,提示这个注册表键值有问题 HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ MSBuild \ ToolsV ...
- windows无法安装到这个磁盘。选中的磁盘采用GPT分区形式 Windows 检测到 EFI 系统分区格式化为 NTFS。将 EFI 系统分区个数化为 FAT32,然后重新启动安装
win10安装问题解决 问题 1.windows无法安装到这个磁盘.选中的磁盘采用GPT分区形式 解决方法: 1.bios,更改 uefi/legacy boot 为ueei only 后面可以安装了 ...
- FastReport快速入门
界面及连接关系 frxDBDataset1连接datasource 双击frxReport1控件进入设计界面,选择报表->数据,弹出窗口选择要显示数据的frxdbdataset,frxdbdat ...
- Redis入门到高可用(十)—— Spring与Redis的整合
1.pom文件 <!--redis--> <dependency> <groupId>org.springframework.data</groupId> ...
- localStorage 不方便存储数组时的替代方法
项目背景是需要将搜索历史存储到localStorage中, 需要存储id和name,每次存储时都需要在记录中多加一条,用数组push显然是比较好的方法,但localStorage不方便存储数据,于是就 ...
- numpy的searchsorted细品
import numpy as np a= np.arange(20) pos_left = a.searchsorted(3) #也可以写成np.searchsorted(a, 3), 注 ...
- golang 中创建daemon的方法
https://github.com/takama/daemon https://github.com/immortal/immortal/blob/master/fork.go ...
- HBase学习总结(1)
HBase是一种数据库:HadoopDatabase顾名思义就是Hadoop数据库,它是一种基于hadoop文件系统HDFS的一种分布式数据库,专门设计用来快速随机读写大规模数据.本文介绍HBase的 ...