家蛙树

Hyperledger Fabric BaaS设计方案

Zealot
区块链
2018-09-28

1.基于Hyperledger Cello
Cello的定位是为Fabric提供一个BaaS平台,使用Web UI方便的管理区块链网络,节点和链码。

t_244990ccbb2d44be84b13d04e11be94c.png

理想丰满,希望兼容K8s,swarm等多容器,提供了安装网络,简单监控,安装链码,调用等基本功能,可惜bugs一堆,又得兼顾Fabric快速迭代的版本。
还有一点,以docker为例,实际Work Node使用remote docker访问模式,需要在Master的管理平台手工输入所有的worker node ip和端口,有些维护成本,相当于是master主动连接worker Node进行管理,实际运维场景下的网络和存储的扩展,隔离和兼容等很多细节可能还要考虑和解决。

只是说这个项目暂时成熟度还不高,不过一旦成型,对于很多异构的容器,物理机等环境可能会是个不错的选择(开发成本高,短期内指望不上)。

2.基于Kubernetes管理Fabric
Kubernetes天生便于管理容器,良好的兼容docker,结合Kubernetes API也很方便和别的运维系统打通整合。

t_15220aa7ced0403386e0cc45d237161a.png

(1)自建区块链(单租户)
Kubernetes可以简单使用Flannel网络(一种overlay覆盖网络,把请求TCP在另一网络虚拟路由中重新封包转发)把Fabric网络连通和隔离,基于NFS实现PV/PVC存储用于peer state DB/ledger保存, orderer,ca等信息持久化。

(2)多租户区块链
多租户需要各自的网络和存储要隔离,简单的可以使用calico虚拟路由直接iptable转发和配置ACL实现不同区块链网络的隔离, 存储基本也是NFS实现的PV/PVC

这里顺带提供个小福利,kubernetes安装很是噩梦, master初始化时需下载gci.io镜像都在google那的,基本都只能从阿里云手工下镜像手工docker pull, 这里提供一个自用的镜像

#!/bin/bash

set -e

# Check version in https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm-init/
# Search "Running kubeadm without an internet connection"
# For running kubeadm without an internet connection you have to pre-pull the required master images for the version of choice:
KUBE_VERSION=v1.11.3
KUBE_PAUSE_VERSION=3.1
ETCD_VERSION=3.2.18
CORE_DNS_VERSION=1.1.3

GCR_URL=k8s.gcr.io
#ALIYUN_URL=registry.cn-shenzhen.aliyuncs.com/cookcodeblog
ALIYUN_URL=registry.cn-shenzhen.aliyuncs.com/zealot

# When test v1.11.0, I found Kubernetes depends on both pause-amd64:3.1 and pause:3.1 

images=(kube-proxy-amd64:${KUBE_VERSION}
kube-scheduler-amd64:${KUBE_VERSION}
kube-controller-manager-amd64:${KUBE_VERSION}
kube-apiserver-amd64:${KUBE_VERSION}
pause-amd64:${KUBE_PAUSE_VERSION}
pause:${KUBE_PAUSE_VERSION}
etcd-amd64:${ETCD_VERSION}
coredns:${CORE_DNS_VERSION})


for imageName in ${images[@]} ; do
  docker pull $ALIYUN_URL/$imageName
  docker tag  $ALIYUN_URL/$imageName $GCR_URL/$imageName
  docker rmi $ALIYUN_URL/$imageName
done

docker images

当然也额外有一些被墙的k8s镜像,有需要也单独私信我构建。
https://github.com/zealzeng/docker-library

要实现这么个BaaS自然要人力物力,做个web ui通过kubernet API管理orderer, peer等,再考虑节点扩容,各种区块链更新维护等。基本开发运维一体,刚学会docker-compose的yaml语法,又得学kubernetes的yaml语法。

还有一个比较麻烦的东西, 官方的连接Fabric的SDK正式release的只有Java和Nodejs, 官方通用的Fabric Rest也不健全, 如果用其它语言采访Fabric Peer也是麻烦。

路漫漫兮上下求索, cu very soon.

t_17f0bdbcac684e0a9d162d7bf3a7f46d.png

点赞 0
0条评论
其他心得
1. 问题场景 Fabric peer节点使用文件保存区块, 使用level db或couchdb数据库保存状态, 数据很多state db会膨胀, 我们探讨下一些解决方案。 2. couchdb集群 couchdb2.x支持集群, 分片, 应该能把数据分散到集群的其它节点。先简单过一下如何安装。 2.1 couchdb集群搭建 Fabric用到的couchdb镜像是自己打包的, 1.4对应的是hyperledger/fabric-couchdb:0.4.14, 不过很悲催, 笔者
Zealot · 21天前 
1.简介 Fabric 1.4引入operation service即运维服务接口, orderer,peer节点可提供http服务, 方便外部获取节点的运行指标,管理日志级别,健康检查。 2.如何使用运维服务 以fabirc-sample/first-network为例, ./byfn.sh up 2.1 Orderer节点运维服务 启动后连接到orderer容器 docker exec -it -e LINES=$(tput lines) -e COLUMNS=$(tput co
Zealot · 30天前 
1.使用场景 Fabric区块链网络一个channel即一个记账本, 在很多业务场景,一个记账本的数据自身组织可以读写,也可以提供给其它组织只读,部分读或部分写。数据隔离使用channel是粗粒度的,private data私有数据是fabric 1.2引入, 是为了在更细的粒度上控制数据访问。 2.如何使用私有数据? 以fabric-sample/chaincode/marble02_private弹珠游戏为例. (1)文件collections_config.json
Zealot · 31天前 
1.简介 Fabric CA基于开源项目CFSSL开发, 主要为fabric网络提供PKI证书服务,是MSP生成的基础。可能有人会问, 官方不是有cryptogen工具批量生成MSP吗? cryptogen实际是辅助测试工具,默认不同orderer,org都有不同的CA, 如果一个org要追加个peer或user, cryptogen就不管用了。生产环境我们建议使用fabric ca全面管理证书, 如果想简单来而区块链组织,节点和用户基本不会变, cryptogen也没问题。 2.
1.Kafka排序服务原理 官方文档在google doc上, 参考翻译 https://www.jianshu.com/p/db006359133d 2. kafka 排序服务安装 所有的代码已分享在https://github.com/zealzeng/kafka-orderer-demo 2.1 安装环境 官方文档有一些简单的描述 https://hyperledger-fabric.readthedocs.io/en/release-1.4/kafka.h