本节内容基于前几节介绍的hellowrold区块链环境基础,实现基于kafka模式的排序节点部署和测试。
Fabric 的共识模型是Execute-Order-Validate,即先执行再排序最后验证的过程。
在创建区块链创世块以及通道的时候我们会用到一个configtx.yaml文件,该配置文件中的Orderer配置信息中有一个OrdererType参数,
该参数可配置为”solo” and “kafka”,之前例子我们使用的配置皆是solo,即单节点共识。
使用kafka集群作为orderer共识的技术方式可以为排序服务提供足够的容错空间,当客户端向peer节点提交Transaction的时候,
peer节点会得到一个读写集结果,该结果会发送给orderer节点进行共识和排序,此时如果orderer节点突然down掉,
将导致请求服务失效、数据丢失等问题。
因此,在生产环境部署Fabric,往往需要采用具有容错能力的orderer,即kafka模式,使用kafka模式搭建orderer节点集群需要会依赖于kafka和zookeeper。
一个交易的生命周期包括下面几个步骤:
客户端提交交易信息 –> orderers:将交易排序并打包成块 –> 各个账本写入全局有序的区块
MaxMessageCount:最大消息数量
AbsoluteMaxBytes :限制单个交易大小,超过该限制,会被拒绝掉
PreferredMaxBytes :综合可能超过PreferredMaxBytes,假设PreferredMaxBytes=200b,前9个交易大小为100b,第10个交易大小为200b,这时会把第10个交易一块打包,这样就会大于PreferredMaxBytes。
Timeout 按照时间规则打包
我们将部署三个Oraderer节点,
基于前几节的helloworld案例按以下步骤重新修改配置文件,重新部署区块链网络。
Specs:
- Hostname: orderer
- Hostname: orderer2
- Hostname: orderer3
crypto-config.yaml完整配置文件如下:
1
|
# Copyright IBM Corp. All Rights Reserved.
|
cryptogen generate --config=./crypto-config.yaml
执行后可见crypto-config/orderOrganizations/example.com/orderers目录下出现了三个组织的证书:
orderer.example.com
orderer2.example.com
orderer3.example.com
将OrdererType设置为kafka 并配置打包规则和kafka地址
1
|
Orderer:
|
完整的configtx.yaml配置文件如下:
1 |