提交 39d4237d 编写于 作者: Y yeasy

Update baas

上级 0b003631
# 区块链即服务
# 区块链服务平台设计
** 懒惰和好奇,是创新与进步的源泉。 **
** 规模是困难之源。 **
云的出现,让传统信息行业变得前所未有的便捷。只要云中有的服务,通过简单的几下点击,就可以获得一个运行中的服务实例,节约了大量的研发和运维的时间和成本。
信息产业过去的十年,是云计算的十年。云计算技术为传统信息行业带来了前所未有的便捷。用户无需在意底层实现细节,通过简单的操作,即可获得可用的计算资源,节约大量运维管理的时间成本。
现有的区块链分为三种:私链,联盟链,公有链。私链存在于机构内部,必要性较低,且在性能上弱于现有的分布式系统。联盟链建立在多个联盟机构之间,每个联盟成员之间各自拥有一个核心节点。公有链向社会公开,可以用于信息认证、公共资源共享。任何团体或个人可以加入公有链
区块链平台作为分布式基础设施,其部署和维护过程需要多方面的技能,这对很多应用开发者来说都是不小的挑战。为了解决这些问题,区块链即服务(Blockchain as a Service, BaaS)平台应运而生。BaaS 可以利用云服务基础设施的部署和管理优势,为开发者提供创建、使用,甚至安全监控区块链平台的快捷服务。目前,业界已有一些区块链前沿技术团队率先开发并上线了区块链服务平台
目前,业界已经开始有少数区块链前沿技术团队开发了区块链即服务(Blockchain as a Service,BaaS)的平台。根据上述划分,BaaS平台可以面向用户群体提供联盟链及公开链两种服务,并根据不同的服务类型进行不同的架构设计及优化。
本章将分别进行介绍。
本章将首先介绍 BaaS 的概念,之后分别介绍业界领先的 IBM Bluemix 和微软 Azure 云上所提供的区块链服务。最后,还介绍了超级账本的区块链管理平台 —— Cello 项目,以及如何使用它快速搭建一套可以个性化的区块链服务平台。
## 微软 Azure 云区块链服务
Azure 是微软推出的云计算平台,向用户提供开放的 IaaS 和 PaaS 服务。
Azure 陆续在其应用市场中提供了若干个与区块链相关的服务,分别面向多种不同的区块链底层平台,其中包括以太坊和超级账本 Fabric。
可以在应用市场(https://azuremarketplace.microsoft.com/en-us/marketplace/apps)中搜索 “blockchain” 关键字查看这些服务,如下图所示。
![Azure 上的区块链服务](_images/azure_marketplace.png)
下面具体介绍其中的 Azure Blockchain Service。
### 使用服务
使用 Azure 服务,用户可以在几分钟之内在云中部署一个区块链网络。云平台会将一些耗时的配置流程自动化,使用户专注在上层应用方案。
Azure 区块链服务目前支持部署以太坊或超级账本 Fabric 网络。
下面以以太坊为例,在 Azure 的仪表盘中,选择创建 Ethereum Consortium Blockchain 后,输入一些配置选项,则可以开始部署该模拟网络,如下图所示。
![Azure 区块链配置](_images/azure_config.png)
部署过程需要几分钟时间。完成后,可进入资源组查看部署结果,如下图所示,成功部署了一个以太坊网络。
![Azure 区块链部署结果](_images/azure_deploy.png)
点击 microsoft-azure-blockchain 开头的链接,可以查看网络的一些关键接口,包括管理网址、RPC 接口地址等。
复制管理网址 ADMIN-SITE 的链接,用浏览器打开,可以进入区块链管理界面。界面中可查看网络各节点信息,也可以新建一个账户,并从 admin 账户向其发送 1000 个以太币。结果如下图所示。
![Azure 区块链管理界面](_images/azure_admin.png)
Azure 云平台提供了相对简单的操作界面,更多的是希望用户通过 RPC 接口地址来访问所部署的区块链示例。用户可以自行通过 RPC 接口与以太坊模拟网络交互,部署和测试智能合约,此处不再赘述。
\ No newline at end of file
## Bluemix
## IBM Bluemix 云区块链服务
[Bluemix](http://www.ibm.com/cloud-computing/bluemix/) 是 IBM 推出的领先的平台即服务(Platform as a Service)业务,包含大量的平台和软件服务,用户可以很容易的将自己写的代码托管到 Bluemix 上
Bluemix 是 IBM 推出的开放的 PaaS 云平台,包含大量平台和软件服务,旨在帮助开发者实现一站式地应用开发与部署管理
目前,Bluemix 面向开发者推出了 [区块链平台](https://console.ng.bluemix.net/catalog/services/blockchain),供全球的区块链爱好者使用。
\ No newline at end of file
2016 年,Bluemix 面向开发者推出了基于超级账本 Fabric 的区块链服务,供全球的区块链爱好者使用。用户可以通过访问 https://console.ng.bluemix.net/catalog/services/blockchain 使用该服务。
### 服务介绍
Bluemix 为用户提供了在云上灵活管理超级账本 Fabric 区块链网络的能力,让开发者专注于快速创建、操作和监控区块链网络,而无需过多考虑底层硬件资源。同时,Bluemix 云平台本身也提供了安全、隐私性方面的保障,并对相关资源进行了性能优化。
Bluemix 目前提供了几种不同类型的区块链网络部署方案,包括免费的基础套餐到收费的高性能方案等。不同方案针对开发者的不同需求,在运行环境、占用资源、配置方式上都有所区别。
对于超级账本 Fabric 网络试用者,可选择免费的基础套餐,获得一个包含各类型 Peer 节点和 CA 的完整区块链试用网络,用户可以自行尝试部署链码并实时观察账本状态的变化。
### 使用服务
Bluemix 云平台提供的仪表盘(Dashboard)提供了十分直观的管理方式,用户可以通过 Web 界面来获取和访问区块链资源。
如下图所示,用户创建网络后,可以进入 Dashboard 看到属于自己的区块链网络,同时观察各节点的状态,以及与身份认证相关的服务凭证。
![Bluemix 区块链服务仪表盘](_images/bluemix_dashboard.png)
对于已经申请到的区块链网络,用户可以通过 Dashboard 对其部署并调用链码,并实时查看响应结果。例如,下图中展示了部署自带的 example02 链码。
![通过 Dashboard 操作链码](_images/bluemix_chaincode.png)
对链码的操作会发送交易,进而生成新的区块。可通过 Dashboard 观察与区块链状态、区块内容相关的信息。例如,下图中区块链生成了 4 个区块,并执行了 1 次部署和 2 次调用。
![通过 Dashboard 观察区块链](_images/bluemix_blockchain.png)
平台同时会收集各节点的日志信息,监控和记录服务的运行状态。用户同样可以在 Dashboard 中实时查看。如下图所示,显示了服务和网络的正常运行时间等。
![通过 Dashboard 获取服务状态](_images/bluemix_status.png)
同时,Bluemix 云平台会将与区块链网络交互所需的 gRPC 或 HTTP 接口地址开放给用户,供用户通过 SDK 等进行远程操作,实现更多跟区块链、链码和应用相关的丰富功能。
\ No newline at end of file
## 使用超级账本 Cello 搭建区块链服务
从前面的讲解中可以看到,区块链服务平台能够有效加速对区块链技术的应用,解决企业和开发者进行手动运营管理的负担。但是这些方案都是商业用途,并且只能在线使用。
![Cello 典型应用场景](_images/cello.png)
超级账本的 Cello 项目为本地搭建区块链服务管理平台提供了开源的解决方案,可以实现在多种类型的物理资源上实现区块链网络的生命周期管理。
正如 Cello 的名字所蕴意,它就像一把精巧的大提琴,以区块链为琴弦,可以奏出更加动人的乐章。
### 基本架构和特性
Cello 项目由笔者领导的 IBM 技术团队于 2017 年 1 月贡献到超级账本社区,主要基于 Python 和 Javascript 语言编写。该项目的定位为区块链管理平台,支持部署、运行时管理和数据分析等功能,可以实现一套完整的 BaaS 系统的快速搭建。其基本架构如下图所示。
![Cello 基本架构](_images/cello_arch.png)
在实现区块链环境快速部署的同时,Cello 也提供了不少对区块链平台进行运行时管理的特性,这些特性总结如下。
* 管理区块链的全生命周期,包括创建、配置、使用、健康检查、删除等。
* 支持多种基础架构作为底层资源池,包括裸机、虚拟机、容器云(Docker、Swarm、Kubernetes)等。
* 支持多种区块链平台及自定义配置(目前以支持超级账本 Fabric 为主)。
* 支持监控和分析功能,实现对区块链网络和智能合约的运行状况分析。
* 提供可插拔的框架设计,包括区块链平台、资源调度、监控、驱动代理等都很容易引入第三方实现。
下面具体介绍如何以 Docker 主机为资源池,用 Cello 快速搭建一个区块链服务平台。
### 环境准备
Cello 采用了典型的主从(Master-Worker)架构。用户可以自行准备一个 Master 物理节点和若干个 Worker 节点。
其中,Master 节点负责管理(例如,创建和删除)Worker 节点中的区块链集群,其通过 8080 端口对外提供网页 Dashboard,通过 80 端口对外提供 RESTful API。Worker 节点负责提供区块链集群的物理资源,例如基于 Docker 主机或 Swarm 的方式启动多个集群,作为提供给用户可选的多个区块链网络环境。
下图中展示了一个典型的 Master-Worker 部署拓扑。每个节点默认为 Linux(如 Ubuntu 16.04)服务器或虚拟机。
![Cello 部署拓扑示例](_images/cello_deployment_topo.png)
为了支持区块链网络,Worker 和 Master 节点需要配备足够的物理资源。例如,如果希望在一个 Worker 节点上能够启动至少 10 个区块链集群,则建议节点配置至少为 8 CPU、16G 内存、100G 硬盘容量。
### 下载 Cello 源码
Cello 代码的官方仓库在社区的 gerrit 上,并实时同步到 Github 仓库中,读者可以从任一仓库中获取代码。例如通过如下命令从官方仓库下载 Cello 源码。
```sh
$ git clone http://gerrit.hyperledger.org/r/cello && cd cello
```
### 配置 Worker 节点
#### 安装和配置 Docker 服务
首先安装 Docker,推荐使用 1.12 或者更新的版本。可通过如下命令快速安装 Docker。
```sh
$ curl -fsSL https://get.docker.com/ | sh
```
安装成功后,修改 Docker 服务配置。对于 Ubuntu 16.04,更新 `/lib/systemd/system/docker.service` 文件如下。
```sh
[Service]
DOCKER_OPTS="$DOCKER_OPTS -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock --api-cors-header='*' --default-ulimit=nofile=8192:16384 --default-ulimit=nproc=8192:16384"
EnvironmentFile=-/etc/default/docker
ExecStart=
ExecStart=/usr/bin/dockerd -H fd:// $DOCKER_OPTS
```
修改后,需要通过如下命令重启 Docker 服务。
```sh
$ sudo systemctl daemon-reload
$ sudo systemctl restart docker.service
```
#### 下载 Docker 镜像
对于超级账本 Fabric v1.0 集群所需的镜像,可以使用如下命令进行自动下载。
```sh
$ cd scripts/worker_node_setup && bash download_images.sh
```
#### 防火墙配置
为了确保 Worker 上的容器可以正常访问,通过如下命令确保主机开启 IP 转发。
```sh
$ sysctl -w net.ipv4.ip_forward=1
```
同时检查主机的 iptables 设置,确保必要的端口被打开(如 2375、7050~10000 等)。
### 配置 Master 节点
#### 下载 Docker 镜像
使用如下命令下载运行服务所必要的 Docker 镜像。
其中,python:3.5 镜像是运行 Cello 核心组件的基础镜像;mongo:3.2 提供了数据库服务;yeasy/nginx:latest 提供了 Nginx 转发功能;mongo-express:0.30 镜像是为了调试数据库,可以选择性安装。
```sh
$ docker pull python:3.5 \
&& docker pull mongo:3.2 \
&& docker pull yeasy/nginx:latest \
&& docker pull mongo-express:0.30
```
#### 安装 Cello 服务
首次运行时,可以通过如下命令对 Master 节点进行快速配置,包括安装 Docker 环境、创建本地数据库目录、安装依赖软件包等。
```sh
$ make setup
```
如果安装过程没有提示出现问题,则说明当前环境满足了运行条件。如果出现问题,可通过查看日志信息进行定位。
#### 管理 Cello 服务
可以通过运行如下命令来快速启动 Cello 相关的组件服务(包括 dashboard、restserver、watchdog、mongo、nginx 等)。
```sh
$ make start
```
类似地,运行 `make stop``make restart` 可以停止或重启全部服务。
若希望重新部署某个特定服务(如 dashboard),可运行如下命令。
```sh
$ make redeploy service=dashboard
```
运行如下命令可以实时查看所有服务的日志信息。
```sh
$ make logs
```
若希望查看某个特定服务的日志,可运行如下命令进行过滤,如只查看 watchdog 组件的日志。
```sh
$ make log service=watchdog
```
### 使用 Cello 管理区块链
Cello 服务启动后,管理员可以通过 Cello 的 Dashboard 页面管理区块链。
默认情况下,可通过 Master 节点的 8080 端口访问 Dashboard。默认的登录用户名和密码为 `admin:pass`
![Cello Dashboard](_images/cello_dashboard.png)
如图,Dashboard 有多个页面,各页面的功能如下。
| 页面 | 功能 |
| --- | --- |
| Overview | 展示系统整体状态 |
| System Status | 展示一些统计信息 |
| Hosts | 管理所有主机(Worker 节点) |
| Active Chains | 管理资源池中的所有链 |
| Inused Chains | 管理正在被用户占用的链 |
| Released History | 查看链的释放历史 |
#### Hosts 页面
在 Hosts 页面,管理员可以管理所有资源池中已存在的主机,或添加新主机。表格中会显示主机的类型、状态、正在运行的区块链数量、区块链数量上限等。所有设定为 non-schedulable (不会自动分配给用户)的主机会用灰色背景标识,如下图所示。
![Hosts 页面](_images/cello_dashboard_hosts.png)
点击一个主机的 Action 下拉菜单,有如下选项可供操作该主机。
* Fillup:将主机运行的区块链数添加至上限。
* Clean:清理主机中所有未被用户占用的链。
* Config:更改主机配置,如名称和链数量上限。
* Reset:重置该主机,只有当该主机没有用户占用的链时可以使用。
* Delete:从资源池中删除该主机。
点击 Hosts 页面的 Add Host 按钮,可以向资源池中添加主机。需要设定该主机的名称、Daemon URL 地址(例如,Worker 节点的 docker daemon 监听地址和端口)、链数量上限、日志配置、是否启动区块链至数量上限、是否可向用户自动分配,如下图所示。
![添加主机](_images/cello_dashboard_addhost.png)
#### Active Chains 页面
Active Chains 页面会显示所有正在运行的链,包括链的名称、类型、状态、健康状况、规模、所属主机等信息。正在被用户占用的链会用灰色背景标识,如下图所示。
![Active Chains 页面](_images/cello_dashboard_activechains.png)
点击一条链的 Actions 下拉菜单,有如下选项可供操作该链。
* Start:如果这条链处于停止状态,则启动。
* Stop:停止运行中的链。
* Restart:重新启动这条链。
* Delete:删除这条链。
* Release:将占用的链释放,随后会被删除。
点击 Active Chains 页面的 Add Chain 按钮,可以向资源池中添加更多链(如果还有未被占满的主机),如下图所示。
![添加链](_images/cello_dashboard_addcluster.png)
### 基于 Cello 进行功能扩展
Cello 已经提供了完整的区块链管理功能,并提供了图形界面和 API。
用户可以通过向 Cello 的 Master 节点(默认为 80 端口)发送 RESTful API 来申请、释放区块链,或查看区块链相关信息,如其对外开放的接口,可供用户进行远程交互。RESTful API 的说明可在 Cello 的文档中查阅。
对于区块链服务提供者,可以利用这些 API 为用户呈现友好的区块链申请和操作界面,在 Cello 的基础之上构建和实现更多功能。
\ No newline at end of file
## 简介
区块链即服务(Blockchain as a Service,BaaS),是部署在云计算基础设施之上,对外提供区块链网络的生命周期管理和运行时服务管理等功能的一套工具。
构建一套分布式的区块链方案绝非易事,既需要硬件基础设施的投入,也需要全方位的开发和运营管理(DevOps)。BaaS 作为一套工具,可以帮助开发者快速生成必要的区块链环境,进而验证所开发的上层应用。
除了区块链平台本身,一套完整的解决方案实际上还可以包括设备接入、访问控制、服务监控等管理功能。这些功能,让 BaaS 平台可以为开发者提供更强大的服务支持。
从 2016 年起,业界已有一些前沿技术团队发布了 BaaS 平台,除了商业的方案如 IBM Bluemix 和微软 Azure 云之外,超级账本开源项目也发起了 Cello 项目,以提供一套实现区块链平台运营管理功能的开源框架。
### 参考架构
下图给出了区块链即服务功能的参考架构,自上而下分为多层结构。最上层面向应用开发者和平台管理员提供不同的操作能力;核心层负责完成包括资源编排、系统监控、数据分析和权限管理等重要功能;下层可以通过多种类型的驱动和代理组件来访问和管理多种物理资源。
![区块链服务参考架构](_images/refarch.png)
典型地,BaaS 平台所提供的业务能力通常包括:
* 用户按需申请区块链网络,以及所需的计算、存储与网络连接资源;
* 用户对申请到的区块链进行生命周期管理,甚至支持灵活、弹性的区块链配置;
* 通过提供接口,让用户自由访问所申请到的区块链网络并进行调用;
* 提供直观的区块链可视化监控与操作界面,将区块链应用与底层平台无缝对接;
* 提供简单易用的智能合约开发与测试环境,方便用户对应用代码进行管理;
* 为管理员提供用户管理和资源管理操作;
* 为管理员提供对系统各项健康状态的实时监控;
* 提供对平台内各项资源和应用层的数据分析和响应能力。
### 考量指标
对于 BaaS 服务提供方,搭建这样一套功能完善、性能稳定的 BaaS 平台存在诸多挑战。可以从如下几个角度进行考量设计。
* 性能保障:包括区块链和应用的响应速度,监控实时性等;
* 可扩展性:支持大规模场景下部署和管理的能力,可以快速进行扩展;
* 资源调度:对于非均匀的资源请求类型可以智能的予以平缓化处理,合理分配系统资源;
* 安全性:注意平衡用户操作区块链的自由度与平台自身的安全可控;
* 可感知性:深度感知数据行为,如可以准确实时评估区块链的运行状况,给用户启发;
* 底层资源普适性:底层应当支持多种混合计算架构,容易导入物理资源。
此外,对于面向开发者的 BaaS 服务,创建的区块链环境应当尽量贴近实际应用场景,让用户可以将经过检验的区块链模型很容易地迁移到生产环境。甚至可以直接联动支持第三方发布平台,直接将经过验证的应用推向发布环境。
## 小结
## 本章小结
本章介绍了区块链即服务的概念,阐述了整合云计算技术能够为区块链部署和管理所带来的便捷。接下来提出了区块链服务平台的参考架构,并从功能和性能等实践角度总结了平台设计的考量指标。
本章随后还介绍了业界领先的 IBM Bluemix 和微软 Azure 云上提供的区块链服务。最后讲解了如何使用超级账本 Cello 项目快速搭建一套个性化的区块链服务平台。
区块链技术的普及离不开生态系统和相关工具的成熟,区块链应用的落地同样离不开完善的 DevOps 支持。本章的内容能够给予读者不同的视角,从系统方案的角度出发,思考如何在新技术变革中保持应对变化的敏捷与高效。
\ No newline at end of file
## 高性能 BaaS
面向区块链爱好者、开发者的 Devops 平台,托管在某高性能云平台。
区块链管理引擎已开源在 [github.com/yeasy/cello](https://github.com/yeasy/cello)
### 设计
当初在设计这个平台的时候,目标主要有如下几个:
* 极速响应:申请区块链服务后要秒级提供给用户,主要操作要秒级响应;
* 低成本:物理资源有限,必须低于其它方案 1~2 个数量级的成本;
* 可扩展性:后续添加或减少物理资源的时候,要能方便的进行扩容和缩容;
* 可移植性:要支持多种混合计算架构,以及无论虚机、裸机、公有、私有云;
* 容错性:环境是复杂的,不可靠的,要尽量做到容错,确保系统持续运行;
* 可操作性:带有灵活的管理机制,允许操作人员准确获知系统状态和进行管理。
目前来看,基本达到了当初的设计目标。
### 使用
下面介绍其使用步骤。
访问 [服务首页](),可以看到正中间的按钮和右上角的登录按钮。
![start](_images/start.jpg)
### 登录和注册
未登录用户,请先点击登录按钮登录。
![](_images/login.jpg)
如果是未注册用户,可以点击登录框内的 `Register` 链接进行注册。
![](_images/register.jpg)
### Dashboard
登录成功后,可以点击申请按钮,如果系统负载没超额度,则申请成功,并自动进入主面板。
![Dashboard](_images/dashboard.jpg)
可以看到,最左面是 `智能合约管理面板`,包括对智能合约的管理和部署,右侧是 `网络面板`,展示申请到的区块链集群的网络情况,包括拓扑、节点之间的延迟信息等一目了然。最下面是 `区块链面板`,是目前区块链的整体情况,初始状态下只有一个区块。
### 智能合约管理
智能合约管理包括部署、使用智能合约,以及上传自己的智能合约。
#### 部署
点击对应智能(如 `map` 合约)合约的 `action` 按钮,会进入合约部署标签页,在这里可以填写合约初始化值,如合约名默认为 `My Chaincode Instance`
![deploy](_images/deploy.jpg)
点击部署按钮,数秒钟后部署完成,可以在 `My Deployment` 标签页查看到已部署的智能合约。
![mydeploy](_images/mydeploy.jpg)
之后可以通过 `invoke` 按钮调用智能合约。
![invoke](_images/invoke.jpg)
#### 调用合约
调用智能合约,将 `car_owner` 设置为 `Cathy`
![invoke2](_images/invoke2.jpg)
合约调用后,可以查看区块链情况,生成新的区块。
![blocks](_images/blocks.jpg)
#### 查询合约
合约执行成功后,可以查看合约执行结果,点击 `query` 按钮。
![query](_images/query.jpg)
查询 `car_owner`,可以获取到正确结果。
![query2](_images/query2.jpg)
#### 上传个人合约
个人合约只能自己看到。可以通过点击合约标签页的上传个人合约按钮来完成。
![private_smartcontract](_images/private_smartcontract.jpg)
### 查看区块链日志
`网络面板`,点击查看日志按钮,可以打开日志消息记录。
![logs](_images/logs.jpg)
### 重置和退出
用户可以通过点击右上方的用户信息按钮来重置当前区块链或退出。
![operations](_images/user_operations.jpg)
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册