HyperLedger Fabric关键技术(6.4)

  • 时间:
  • 浏览:1
  • 来源:uu快3app娱乐_uu快3辅助_官方网址

       在生成创世区块时,时需在configtx.yaml文件中配置Kafka相关的信息,如Orderer.OrdererType设置为kafka、Orderer.Kafka.Brokers设置Kafka集群中的节点IP地址和端口;

       背书节点(Endorser peer):背书节点(Endorser peer)负责对交易根据事先设定策略进行签名背书,背书节点(Endorser peer)根据链码在实例化的事先设置背书策略,指定哪些节点用于背书。当客户端向节点发起交易背书时,该Peer节点才雎有背书功能,其它时间所以普通的记账节点。

       排序(Orderer)指对区块链网络中不同通道产生的交易进行排序,并广播给节点(Peer)。排序(Orderer)是以可插拔组件的土办法实现,目前分为SOLO和Kafka两种类型。

图:通道社会形态图

P:Peer 节点

       智能合约又称为链码,是在区块链上运行的一段代码,是应用系统与区块链底层交互的上面件,通过智能合约可不时需实现各种繁复的应用。

5) 链码容器收到 ChaincodeMessage_INIT 消息事先,调用用户代码 Init()土办法进行初始化,成功事先,返回 ChaincodeMessage_COMPLETED 消息。到此,链码容器可不时需被调用了。

6)节点(Peer)把交易区块更新到账本中,最终完成避免;

模块

 

5)排序(Orderer)把中含交易信息的区块发送给节点(Peer); 

2)节点(Peer)根据提案信息调用链码;

ProposalResponse

代表在网络上交易的用户。用户实例可不时需基于登记证书被初始化。证书可不时需从成员服务将会内部CA获取。理论上,这个 用户要能代表网络上的节点成员。然而,这与应用进程无关(这更像是网络管理方面的疑问图片),所以在这个 设计中没办法 开放。

Kafka避免流程示意图:

智能合约安放到节点(Peer)上,运行在Docker容器中,通过gRPC与Peer进行数据交互,交互步骤如下:

D1:Block data 区块数据

ChaincodeMessage_GET_QUERY_RESULT

3

       锚节点(Anchor peer):锚节点(Anchor peer)是随通道(Channel)趋于稳定,是能被其它通道发现的的节点(peer),每个通道(channel)上有一另2个 或多个锚节点(Anchor peer)。

       Fabric SDK应该可不时需为开发人员提供编写应用进程的多种操作区块链网络的土办法。应用进程可不时需部署/执行chaincode,监听网络中产生的事件,接收块信息,把交易存储到账本中等。

6.3.4 节点(Peer)

3) 链码(chaincode)在收到 ChaincodeMessage_REGISTERED 消息事先,先不进行任何的操作,完成注册步骤。更新情况报告为 established 。在收到 ChaincodeMessage_READY 消息事先再更新情况报告为 ready 。

3

9) 上述消息交互过程完成后,节点(Peer)和链码(chaincode)会定期相互发送 ChaincodeMessage_KEEPALIVE 消息给对方,以确保彼此是在线情况报告。

          设置message.max.bytes值,message.max.bytes应该严格小于socket.request.max.bytes的值,socket.request.max.bytes的值默认被设置为80MB;

4) 节点(Peer)发出 ChaincodeMessage_INIT 消息给链码容器,对链码进行初始化。

 zookeeper可不时需为3,5或7。它时需是一另2个 奇数来避免分裂(split-brain)情景,一齐取舍大于1是为了避免单点故障,超过7个ZooKeeper节点是多余的。

1) 链码(chaincode)调用 shim.Start()土办法后,给节点(Peer)发送 ChaincodeMessage_REGISTER 消息尝试进行注册。客户端链码等候接收来自节点(Peer)的消息。此时链码(chaincode)和节点(Peer)的情况报告为初始的created。

N:Blockchain Network区块链网络

ChaincodeMessage_GET_STATE_BY_RANGE

6) 链码(chaincode)被调用的事先,节点(Peer)发出 ChaincodeMessage_TRANSACTION 消息给链码。

ChaincodeMessage_QUERY_STATE_NEXT

功能

排序(Orderer)节点使用该分区(partition),将接收到交易分组写入到本地区块中,并加入到本地的区块链中,最后通过RPC传输(Deliver)给时需接收的客户端。

       SOLO:仅有一另2个 Orderer服务节点负责接收交易信息进行排序,是最简单的排序算法,一般用于测试环境。

      5) 所有排序(Orderer)节点都指向创世区块

帐本社会形态图如下:

一另2个 链代表所以节点不怎么形成的一另2个 网络,启动一另2个 共识的通道,在通道中交易可不时需被独立的避免。一另2个 网络将会有一另2个 或多个链。链上的节点维护一另2个 单独的账本中含交易在链上派发,包括成员关系的任何配置。所有的交易全部完会在链上发送,一另2个 应用将会操作多个链。

相似于节点,不同的是它代表排序服务的终端,将会是一另2个 单独的节点(开发时本地安装)将会一另2个 网络排序者的代理节点。基于区块链网络的fabric会有一另2个 由多个排序者节点组成的单独的排序服务。应用可不时需取舍信任特定的排序者,将会一累积排序者,将会设置代理去给排序者节点广播交易。

2

6.3.3 通道(Channel)

 账本索引数据库(Block index):

ChaincodeMessage_GET_HISTORY_FOR_KEY

     在orderer.yaml文件中配置Kafka.TLS参数,取舍算是通过TLS(安全传输层协议)进行通信。

H1-H2:H2 is chained to H1 区块2指向区块1

B:Blockchain 区块链

kafka集群节点的最小值为4,是故障容错所时需的最小数值。六个kafka结点可不时需容许一另2个 节点崩溃后,所有的通道(Channel)还可不时需继续读写且创建通道。

Chain

     在orderer.yaml 文件中配置Kafka.Retry参数, 调整 metadata/producer/consumer 请求的频率以及socket的超时时间。

CryptoSuite

O:Orderer 排序

S:Chaincode 链码

       2)设置区块最大容量

ChaincodeMessage_INVOKE_CHAINCODE

1.Kafka避免概述

1) Package: Hyperledger Fabric Client

A:Application 应用进程

3)链码进行查询和更新,所以返回提案信息给应用进程;

登记用户派发了背书事先可不时需提交交易。交易请求中含背书签名和MVCC+post-image,所以使用排序服务API。交易有两种类型:部署和执行。这是交易有关原始GRPC消息的包装类,它提供了便利的创建土办法。

      3)创建创世区块

加密模块打包了数字签名算法,非对称加密的密钥对,对称加密的密钥消息,安全的hashMAC

        本节介绍从最底层的账本现在始于了了,逐一讲解账本的社会形态和存储、智能合约的编写和部署、通道的操作、节点的背书和提交、排序的共识和客户端SDK的接口调用,与交易流程顺序相反,由里及表的说明Fabric最关键的技术,通过学习了这六种关键技术知识,能初步掌握Fabric的核心,了解Fabric运作原理。

Peer

     8) 集群启动顺序

接口模块如下:

       记账节点(Committer peer):记账节点(Committer)负责维护情况报告数据和账本的副本。

PA-C:Principal PA(e.g. A,P1)communicaties via channel C 客户端A与节点P(Peer)通过通道C(channel)进行通信。

排序(Orderer)节点(Ordering Service Node)简称为OSN,Orderer集群连接到Kafka集群和Zookeeper集群,利用Kafka的共识功能,实现网络中交易的排序和中成区块的任务。

LevelDB:适用于简单的链值对k-v场景,LevelDB嵌入在peer进程中。

Proposal

          设置unclean.leader.election.enable为false;

上图中区块图示说明:

交互流程:

     先启动ZooKeeper 集群,所以启动 Kafka 集群,最后启动排序(Orderer)节点。

H3:Block header 区块头

2. Kafka集群和ZooKeeper集群的节点数量规定

 

P:Peer 节点

       Fabric SDK提供调用账本(Ledger)、智能合约(Smart contract)、通道(Channel)、节点(Peer)、排序(Orderer)等接口,方便用第三方应用进程的开发,大大扩展了Fabric的应用场景。

情况报告数据库是存储所有在交易中出现的键值对的最新值,调用链码执行交易可不时需改变情况报告数据,为了高效的执行链码调用,所有数据的最新值都被存放到情况报告数据库中;情况报告数据库被设计为组件,可不时需通过配置替换数据库,目前有LevelDB和CouchDB两种数据库, LevelDB是默认的内置的数据库。

M3:Block metadata区块元数据

2

6.3.1 帐本(Ledger)

4)应用进程发送交易信息给排序(Orderer);

模块

提案调用背书节点的响应,打包背书结果(是或否),签名,等等。这是关于提案响应原始的GRPC消息包装类,它提供了便利的土办法来利用它我本人的内容(背书,签名,等等)。

1)应用进程成功连接到节点(Peer)后,调用链码向节点(Peer)进行提案;

6.3.6 接口(SDK)

每个通道全部完会属于我本人的锚节点,通过锚节点可不时需与其它通道进行信息交互,但两种通道内的账本无需通过一另2个 通道传到原先通道上,通道对账本是分离的。

ChaincodeMessage_GET_STATE

 区块链(Blockchain):

2)   Package: Member Service

       Fabric帐本(Ledger)是一系列有序和防篡改的情况报告转换的记录,社会形态由一另2个 区块链构成,并将不可变的、有序的记录存放到区块中;一齐中含一另2个 情况报告数据库来记录当前的情况报告,账本的当前情况报告信息是链交易日志中记录过的所有键的最新值,将会当前情况报告表示的是通道已知的所有键的最新值,由此也被称为世界情况报告。区块链社会形态保趋于稳定本地的文件系统中;世界情况报告由数据库来维护,以键值对(k-v)的土办法保趋于稳定数据库,默认数据库为LevelDB,数据库版本可替换为KV类型的数据库,如CouchDB等。

       正式环境中时需使用Kafka搭建,保证数据可靠性和安全性,以下介绍基于Kafka集群和ZooKeeper集群的排序服务的原理。

L:Ledger 账本

          设置log.retention.ms为-1,关闭基于时间的日志保留土办法。

MemberService

CouchDB:适用于支持富足的查询和数据类型的场景,应用系统作为JSON文档存储时,CouchDB是一另2个 不怎么合适的取舍,支持对chaincode数据进行富足的查询。

H1-H2:H2 is chained to H1 区块2指向区块1

          设置default.replication.factor为N(数字),N表示在Kafka节点上每个channel都保存N个副本的数据;值的范围为1<K(K为Kafak集群数量);

ChaincodeMessage_QUERY_STATE_CLOSE

3. 排序(Orderer)操作步骤

区块链保存到文件系统时,会在LevelDB 中存储区块交易对应的文件块及其偏移,也所以将 LevelDB 作为账本数据库的索引。文件形式的区块存储土办法将会没办法 快速定位的索引,没办法 查询区块交易信息会非常的慢。

User

等级

L:Ledger 账本

说明:

等级

N:Blockchain Network区块链网络

2

Client

       1)在网络的创世块中写入Kafka相关的信息

通道社会形态图:

功能

上图中通道图示说明:

图:帐本社会形态图

C:Channel 通道

T5:Transaction 交易数据,保趋于稳定区块数据中

2) 节点(Peer)在收到来自链码容器的 ChaincodeMessage_REGISTER 消息后,会注册到本地的一另2个 handle社会形态,返回 ChaincodeMessage_REGISTERED 消息给链码容器。所以更新情况报告为 established ,所以会自动发出 ChaincodeMessage_READY 消息给链码(chaincode),所以更新情况报告为ready。

Fabric是多通道设计,系统可不时需创建多条通道,某个节点(Peer)可不时需加入到不同的通道中,在每个通道中含自身的创世区块和实例化智能合约(Smart contract)。

3

6.3.5 排序(Orderer)

7) 链码在收到 ChaincodeMessage_TRANSACTION 消息事先,会调用 Invoke()土办法,根据Invoke土办法中用户的逻辑,可不时需发送如下的消息给节点(Peer):

图:链码与节点消息交互

主要的入口模块。它时需允许用户创建时需的任何对象来执行所有支持的操作,相似于直接连接网络,chaincode部署,交易执行,多种查询。另外,基于编码规范和普遍的社区练习,每两种语言的实现要能决定算是换成方便的土办法,如sendTransaction(chain, tx)

图:客户端与节点交互

1

通道是另2个 节点(Peer)或多个节点之间信息通信的私有空间,在通道内的交易的数据与通道外隔绝,保证通道内数据的安全。在网络上的交易全部完会在某个通道(Channel)上执行,参互交易的每个成员都时需进行身份验证和授权,要能在通道(Channel)上进行避免。

       区块最大容量在configtx.yaml文件中设置Orderer.AbsoluteMaxBytes项的值,以字节为位置,不包括区块头信息大小。

6.3.2 智能合约(Smart contract)

      主节点(Leading peer):主节点(Leading peer)负责与排序(Orderer)通信,把共识后的区块传输到所以节点。

          设置replica.fetch.max.bytes值,每个通道获取的消息的字节数;

上图中通道图示说明:

应用进程与节点交互图:

当排序(Orderer)节点通过RPC广播(Broadcast)接收到从节点(Peer)来的交易数据时,先判断发送交易的客户端算是有权限避免该通道(Channel)数据,将会有权限,排序(Orderer)节点会把交易保存到Kafka的分区(partition)中,每个通道(Channel)对应Kafka中的单独的单分区(partition)的类别中(topic)。

       Hyperledger Fabric提供了所以SDK来支持各种编程语言,目前正式发布了Node.js和Java两种版本的SDK。将来完会发布Python、Go、REST版本的SDK,还在测阶段。

        区块链(Blockchain)是基于本地文件系统,将区块存储于文件系统的硬盘中,每个区块中保存有区块头(Block header)、区块数据(Block data)、区块元数据(Block metadata),通过区块头中的前一另2个 区块的哈希值(Previous Block Hash)指向前一另2个 区块的当前哈希值(Current Block Hash),连接成区块链。

图:Kafka避免流程示意图

8)节点(Peer)在收到哪些消息事先,会进行相应的避免,并回复 ChaincodeMessage_RESPONSE 消息。最后,链码(chaincode)会回复调用完成的消息 ChaincodeMessage_COMPLETE至节点(Peer)。

      4) 配置Kafka集群

         设置min.insync.replicas为M(数字),数据提交完会写入合适M个副本,值的范围为1<M<N(N为default.replication.factor值);

 历史情况报告数据库(History index)

       节点(Peer)是区块链的交易避免和账本维护的主体,主要负责参与共识过程和通过执行链码(chaincode)实现对账本的读写操作。节点(Peer)根据功能不同分为背书节点(Endorser peer)和提交节点(Committer peer);根据通讯不同分为锚节点(Anchor peer)和主节点(Leading peer)。

S:Chaincode 链码

Transaction

 

      6)调整轮询间隔和超时时间

B1:Block 区块

登记的用户可不时需向节点列表提出交易提案来背书交易。一旦接收到背书响应,应用进程可不时需决定算是将会获取背书签名,算是时需执行提交交易到共识服务。这是关于提案原始的GRPC消息的包装类,它提供了便利的创建土办法。

       Kafka:是由Apache软件基金会开发的一另2个 开源流避免平台,两种高吞吐量的分布式发布订阅消息系统,它可不时需避免消费者规模的网站中的所有动作流数据,可不时需配置多个排序节点集群土办法,以便使用在生成环境。Hyperledger Fabric利用kafka的高吞吐、低延时的社会形态,对交易信息进行排序避免,实现在集群内部支持节点故障容错。

 情况报告数据库(State Database):

Orderer

       历史情况报告数据库用于查询某个 key 的历史修改记录,历史数据库固然存储 key 具体的值,而只记录在某个区块的某个交易里,某 key 变动了一次,后续时需查询的事先,根据变动历史去查询实际变动的值,其实减少了数据的存储,当然也增加了查询逻辑的繁复度。

      在 orderer.yaml 文件中配置 General.GenesisFile参数, 让排序(Orderer)节点指向步骤3中所创建的初始区块。

这是fabric可选模块的客户端,成员服务。本模块的主要功能是从成员服务获取用户登记证书。另外,这个 模块两种或它的扩展类也应该能在fabric默认的成员服务的实现中提供可用的额外的功能,如用户注册功能。

目前使用Go语言来开发智能合约以外,还可不时需使用java、node.js开发,支持最好的还是Go语言。

      7) 设置排序节点和 Kafka 集群间为SSL 通讯

A:Application 客户端

代表网络上的计算节点。节点的角色有背书节点和提交节点,它们全部完会维护着账本。应用将会连接到一定数量的可用的节点

3

       使用 configtxgen 工具,根据步骤1和2中配置生成创世区块。

猜你喜欢

开会=浪费时间?阿里技术团队这样开项目复盘会

阿里妹导读:复盘是项目刚刚刚开始后必不可少的阶段,好的复盘会议都都可不可不能否 有效地利于团队成长。今天,阿里项目管理专家鹿迦以自身的经验,为他们分享要怎样做好有另另一个多项

2020-02-18

如果一个男生喜欢你 但是微信朋友圈又屏蔽你(以前你看他朋友圈 然后嘲笑过他)是出于什么心态

追答可选中有2个多或多个下面的关键词,搜索相关资料。也可直接点“搜索资料”搜索整个问题图片。使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。追答本回答被

2020-02-18

【云栖大会】阿里云生态 开启智能“大航海时代”

10月12日,2017杭州•云栖大会生态峰会上,阿里云宣告云合再次升级,智能首次被引入全球云计算生态。“大航海时代,船只承载着冒险者,首次实现了全球的交易交流;今天,国际化的阿

2020-02-17

她说很忙,我总是问她是不是不喜欢我了,是不是讨厌我了,她说,呵呵,其实她讨厌我不换位思考

你对这种回答的评价是?你对这种回答的评价是?你对这种回答的评价是?本回答由女男友推荐追答 我来答你对这种回答的评价是?使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别

2020-02-17

面对一个每天工作很忙的人,但是我又想他天天陪我,我该怎么办

追问追问追问追问追问追问追答追问追问追问追问追问追问追问

2020-02-17