当前位置:首页 > 知识 >

Hyperledger Fabric区块链网络的开源项目推荐

最近,我在做一个区块链溯源的项目,顺便学习了一下时下流行的区块链框架Hyperledger Fabric。和比特币、以太坊等主要针对公有链的区块链不同,Hyperledger Fabric更多的是面向企业和联盟链的私有链,更适合企业和联盟打造区块链即服务平台。

目前,各大云服务提供商(包括BAT、华为等)都推出了基于Fabric的区块链即服务平台(BAAS)。京东和蚂蚁区块链更是推出了基于Fabric的溯源平台。在项目开始之前,我不仅学习了技术,还参考了很多云平台的建设方案和使用费用。总的来说,Fabric区块链网络的搭建需要巨大的硬件投入和资金支持。对于小公司和项目探索开发阶段来说,选择云BAAS平台将是一个不小的开销。今天,我将我在开发阶段尝试过的几种Fabric区块链网络的搭建方法做个总结,希望能够帮到大家。

Build Your First Network

第一种方案,即官方的fabric-samples(https://github.com/hyperledger/fabric-samples.git)中的first-network。这个Demo里将各种操作都集合在了几个脚本文件中,基本上可以做到拿来即用,是学习和本地开发最直接的工具。

具体的操作步骤如下:1. 修改configtx.yaml,配置组织(Organization)、背书方案及排序方案等。 2. 修改crypto-config.yaml,配置节点(Peer)等账号相关信息。 3. 运行byfn.sh generate,生成证书和配置文件。 4. 运行byfn.sh up,创建Fabric区块链网络。

需要注意的地方:由于这是通用的demo,通道默认为mychannel,域名默认为example.com,组织默认为Org1..*,如果需要修改,需要花费大量时间进行修改。智能合约(chaincode)的目录结构与fabric-samples中的目录结构相同,如果需要在创建网络时安装智能合约,请勿忘记在docker-compose-cli.yaml中的cli节点下的volumns中修改映射目录。有时候在初始化智能合约时,会出现找不到_byfn网路的错误,这是peer-base.yaml中配置的CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=${COMPOSE_PROJECT_NAME}_byfn环境变量的问题,${COMPOSE_PROJECT_NAME}有时候会读不到,可以考虑硬编码或解决。

在最近发布的版本中,加入了自动生成网络连接(connection- *.yaml或connection- *.json)的脚本,可以生成用来初始化NetworkConfig的配置文件。

多服务器部署方案

第二种方案是Altoros提供的多机(服务器)部署方案,即Ansible Fabric Starter(https://github.com/Altoros/Ansible-Fabric-Starter.git)。此方案使用了Ansible这个轻量的运维工具,实现了基于本地运行,然后在各个服务器上实现自动安装依赖和Fabric网络的功能。

具体的操作步骤如下:1. 修改host_xxx.yml文件,xxx为不同的后缀名,具体用哪个根据你自己的业务决定。在这里可以定义域名、节点结每个节点所要部署的服务器的连接信息等。(所有的Fabric网络的节点信息都可以在这个文件中定义) 2. 本地运行ansible-playbook install-dependencies.yml -i hosts_xxx.yml,在各个服务器上安装所需要的依赖,如fabric的二进制文件、docker等。 3. 本地运行ansible-playbook config-network.yml -i hosts_xxx.yml,在各个服务器上安装Fabric网络。

需要注意的地方:所有的信息都在host_xxx.yml文件中配置,包括服务器的连接信息。Ansible会使用SSH工具来连接服务器,最好是配置密钥文件来连接。区块链的通用配置文件及证书等会生成到本地artifacts目录下,可以自行选用。可以通过修改group_vars目录下的all.yml文件来修改一些网络的基本信息,例如fabric的版本、网络的名称等。在各个服务器的root文件夹中会生成Fabric网络的配置文件及证书,可以下载到本地以便加载到项目中使用。

k8s多节点部署方案

第三种方案是使用Kubernetes容器服务将Fabric网络安装到k8s容器中。具体实现方案参照Cello Ansible agent(https://github.com/hyperledger/cello.git)中src/agent/ansible目录下的实现方案,通过Ansible 来实现自动运维工具。

具体实现方案如下:1. 将K8s的配置文件下载到vars目录下并命名为kubeconfig。创建Fabric网络的配置文件并保存为network.yml。具体可参考已有的参考文件。 2. 修改resource.yml文件,配置各个节点的资源使用配置(内存、CPU等资源分配)。 3. 运行ansible-playbook -i hosts -e "mode=apply env=network" setup-fabric.yml,创建Fabric网络

需要注意的地方:在运行ansible脚本时,注意env变量即fabric网络配置文件的名称。resource.yml是对k8s容器服务器资源分配的配置文件。如果分配过大,会导致某些节点不能创建,要特别注意。服务器的配置要求一般为8核16G或更高。运行ansible-playbook-ihosts-e"mode=destroyenv=network"setupfabric.yml,即可删除已创建的fabric网络。在配置Fabric网络时,其中有一项为storageclass,此项为服务器所支持的存储类型名称,例如腾讯云为cbs,你也可以自己创建及命名,一般是根据需求收费。

以上就是我在搭建Fabric区块链网络时所使用的方法和总结,如果有不足之处,希望大家能够指出。

猜你喜欢

微信二维码

微信