• 区块链服务平台设计


    规模是困难之源。

    信息产业过去的十年,是云计算的十年。云计算技术为传统信息行业带来了前所未有的便捷。用户无需在意底层实现细节,通过简单的操作,即可获得可用的计算资源,节约大量运维管理的时间成本。

    区块链平台作为分布式基础设施,其部署和维护过程需要多方面的技能,这对很多应用开发者来说都是不小的挑战。为了解决这些问题,区块链即服务(Blockchain as a Service, BaaS)平台应运而生。BaaS 可以利用云服务基础设施的部署和管理优势,为开发者提供创建、使用,甚至安全监控区块链平台的快捷服务。目前,业界已有一些区块链前沿技术团队率先开发并上线了区块链服务平台。

    本章将首先介绍 BaaS 的概念,之后分别介绍业界领先的 IBM Bluemix 和微软 Azure 云上所提供的区块链服务。最后,还介绍了超级账本的区块链管理平台 —— Cello 项目,以及如何使用它快速搭建一套可以个性化的区块链服务平台。

     IBM Bluemix 云区块链服务

    Bluemix 是 IBM 推出的开放的 PaaS 云平台,包含大量平台和软件服务,旨在帮助开发者实现一站式地应用开发与部署管理。

    2016 年,Bluemix 面向开发者推出了基于超级账本 Fabric 的区块链服务,供全球的区块链爱好者使用。用户可以通过访问 https://console.ng.bluemix.net/catalog/services/blockchain 使用该服务。

    服务介绍

    Bluemix 为用户提供了在云上灵活管理超级账本 Fabric 区块链网络的能力,让开发者专注于快速创建、操作和监控区块链网络,而无需过多考虑底层硬件资源。同时,Bluemix 云平台本身也提供了安全、隐私性方面的保障,并对相关资源进行了性能优化。

    Bluemix 目前提供了几种不同类型的区块链网络部署方案,包括免费的基础套餐到收费的高性能方案等。不同方案针对开发者的不同需求,在运行环境、占用资源、配置方式上都有所区别。

    对于超级账本 Fabric 网络试用者,可选择免费的基础套餐,获得一个包含各类型 Peer 节点和 CA 的完整区块链试用网络,用户可以自行尝试部署链码并实时观察账本状态的变化。

    使用服务

    Bluemix 云平台提供的仪表盘(Dashboard)提供了十分直观的管理方式,用户可以通过 Web 界面来获取和访问区块链资源。

    如下图所示,用户创建网络后,可以进入 Dashboard 看到属于自己的区块链网络,同时观察各节点的状态,以及与身份认证相关的服务凭证。

    Bluemix 区块链服务仪表盘

    图 1.15.2.1 - Bluemix 区块链服务仪表盘

    对于已经申请到的区块链网络,用户可以通过 Dashboard 对其部署并调用链码,并实时查看响应结果。例如,下图中展示了部署自带的 example02 链码。

    通过 Dashboard 操作链码

    图 1.15.2.2 - 通过 Dashboard 操作链码

    对链码的操作会发送交易,进而生成新的区块。可通过 Dashboard 观察与区块链状态、区块内容相关的信息。例如,下图中区块链生成了 4 个区块,并执行了 1 次部署和 2 次调用。

    通过 Dashboard 观察区块链

    图 1.15.2.3 - 通过 Dashboard 观察区块链

    平台同时会收集各节点的日志信息,监控和记录服务的运行状态。用户同样可以在 Dashboard 中实时查看。如下图所示,显示了服务和网络的正常运行时间等。

    通过 Dashboard 获取服务状态

    图 1.15.2.4 - 通过 Dashboard 获取服务状态

    同时,Bluemix 云平台会将与区块链网络交互所需的 gRPC 或 HTTP 接口地址开放给用户,供用户通过 SDK 等进行远程操作,实现更多跟区块链、链码和应用相关的丰富功能。

    微软 Azure 云区块链服务

    Azure 是微软推出的云计算平台,向用户提供开放的 IaaS 和 PaaS 服务。

    Azure 陆续在其应用市场中提供了若干个与区块链相关的服务,分别面向多种不同的区块链底层平台,其中包括以太坊和超级账本 Fabric。

    可以在应用市场(https://azuremarketplace.microsoft.com/en-us/marketplace/apps)中搜索 “blockchain” 关键字查看这些服务,如下图所示。

    Azure 上的区块链服务

    图 1.15.3.1 - Azure 上的区块链服务

    下面具体介绍其中的 Azure Blockchain Service。

    使用服务

    使用 Azure 服务,用户可以在几分钟之内在云中部署一个区块链网络。云平台会将一些耗时的配置流程自动化,使用户专注在上层应用方案。

    Azure 区块链服务目前支持部署以太坊或超级账本 Fabric 网络。

    下面以以太坊为例,在 Azure 的仪表盘中,选择创建 Ethereum Consortium Blockchain 后,输入一些配置选项,则可以开始部署该模拟网络,如下图所示。

    Azure 区块链配置

    图 1.15.3.2 - Azure 区块链配置

    部署过程需要几分钟时间。完成后,可进入资源组查看部署结果,如下图所示,成功部署了一个以太坊网络。

    Azure 区块链部署结果

    图 1.15.3.3 - Azure 区块链部署结果

    点击 microsoft-azure-blockchain 开头的链接,可以查看网络的一些关键接口,包括管理网址、RPC 接口地址等。

    复制管理网址 ADMIN-SITE 的链接,用浏览器打开,可以进入区块链管理界面。界面中可查看网络各节点信息,也可以新建一个账户,并从 admin 账户向其发送 1000 个以太币。结果如下图所示。

    Azure 区块链管理界面

    图 1.15.3.4 - Azure 区块链管理界面

    Azure 云平台提供了相对简单的操作界面,更多的是希望用户通过 RPC 接口地址来访问所部署的区块链示例。用户可以自行通过 RPC 接口与以太坊模拟网络交互,部署和测试智能合约,此处不再赘述。

    使用超级账本 Cello 搭建区块链服务

    从前面的讲解中可以看到,区块链服务平台能够有效加速对区块链技术的应用,解决企业和开发者进行手动运营管理的负担。但是这些方案都是商业用途,并且只能在线使用。

    Cello 典型应用场景

    图 1.15.4.1 - Cello 典型应用场景

    超级账本的 Cello 项目为本地搭建区块链服务管理平台提供了开源的解决方案,可以实现在多种类型的物理资源上实现区块链网络的生命周期管理。

    正如 Cello 的名字所蕴意,它就像一把精巧的大提琴,以区块链为琴弦,可以奏出更加动人的乐章。

    基本架构和特性

    Cello 项目由笔者领导的 IBM 技术团队于 2017 年 1 月贡献到超级账本社区,主要基于 Python 和 Javascript 语言编写。该项目的定位为区块链管理平台,支持部署、运行时管理和数据分析等功能,可以实现一套完整的 BaaS 系统的快速搭建。其基本架构如下图所示。

    Cello 基本架构

    图 1.15.4.2 - Cello 基本架构

    在实现区块链环境快速部署的同时,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 部署拓扑示例

    图 1.15.4.3 - Cello 部署拓扑示例

    为了支持区块链网络,Worker 和 Master 节点需要配备足够的物理资源。例如,如果希望在一个 Worker 节点上能够启动至少 10 个区块链集群,则建议节点配置至少为 8 CPU、16G 内存、100G 硬盘容量。

    下载 Cello 源码

    Cello 代码的官方仓库在社区的 gerrit 上,并实时同步到 Github 仓库中,读者可以从任一仓库中获取代码。例如通过如下命令从官方仓库下载 Cello 源码。

    $ git clone http://gerrit.hyperledger.org/r/cello && cd cello
    

    配置 Worker 节点

    安装和配置 Docker 服务

    首先安装 Docker,推荐使用 1.12 或者更新的版本。可通过如下命令快速安装 Docker。

    $ curl -fsSL https://get.docker.com/ | sh
    

    安装成功后,修改 Docker 服务配置。对于 Ubuntu 16.04,更新 /lib/systemd/system/docker.service文件如下。

    [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 服务。

    $ sudo systemctl daemon-reload
    $ sudo systemctl restart docker.service
    

    下载 Docker 镜像

    对于超级账本 Fabric v1.0 集群所需的镜像,可以使用如下命令进行自动下载。

    $ cd scripts/worker_node_setup && bash download_images.sh
    

    防火墙配置

    为了确保 Worker 上的容器可以正常访问,通过如下命令确保主机开启 IP 转发。

    $ 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 镜像是为了调试数据库,可以选择性安装。

    $ docker pull python:3.5 
        && docker pull mongo:3.2 
        && docker pull yeasy/nginx:latest 
        && docker pull mongo-express:0.30
    

    安装 Cello 服务

    首次运行时,可以通过如下命令对 Master 节点进行快速配置,包括安装 Docker 环境、创建本地数据库目录、安装依赖软件包等。

    $ make setup
    

    如果安装过程没有提示出现问题,则说明当前环境满足了运行条件。如果出现问题,可通过查看日志信息进行定位。

    管理 Cello 服务

    可以通过运行如下命令来快速启动 Cello 相关的组件服务(包括 dashboard、restserver、watchdog、mongo、nginx 等)。

    $ make start
    

    类似地,运行 make stop 或 make restart 可以停止或重启全部服务。

    若希望重新部署某个特定服务(如 dashboard),可运行如下命令。

    $ make redeploy service=dashboard
    

    运行如下命令可以实时查看所有服务的日志信息。

    $ make logs
    

    若希望查看某个特定服务的日志,可运行如下命令进行过滤,如只查看 watchdog 组件的日志。

    $ make log service=watchdog
    

    使用 Cello 管理区块链

    Cello 服务启动后,管理员可以通过 Cello 的 Dashboard 页面管理区块链。

    默认情况下,可通过 Master 节点的 8080 端口访问 Dashboard。默认的登录用户名和密码为 admin:pass

    Cello Dashboard

    图 1.15.4.4 - Cello Dashboard

    如图,Dashboard 有多个页面,各页面的功能如下。

    页面 功能
    Overview 展示系统整体状态
    System Status 展示一些统计信息
    Hosts 管理所有主机(Worker 节点)
    Active Chains 管理资源池中的所有链
    Inused Chains 管理正在被用户占用的链
    Released History 查看链的释放历史

    Hosts 页面

    在 Hosts 页面,管理员可以管理所有资源池中已存在的主机,或添加新主机。表格中会显示主机的类型、状态、正在运行的区块链数量、区块链数量上限等。所有设定为 non-schedulable (不会自动分配给用户)的主机会用灰色背景标识,如下图所示。

    Hosts 页面

    图 1.15.4.5 - Hosts 页面

    点击一个主机的 Action 下拉菜单,有如下选项可供操作该主机。

    • Fillup:将主机运行的区块链数添加至上限。
    • Clean:清理主机中所有未被用户占用的链。
    • Config:更改主机配置,如名称和链数量上限。
    • Reset:重置该主机,只有当该主机没有用户占用的链时可以使用。
    • Delete:从资源池中删除该主机。

    点击 Hosts 页面的 Add Host 按钮,可以向资源池中添加主机。需要设定该主机的名称、Daemon URL 地址(例如,Worker 节点的 docker daemon 监听地址和端口)、链数量上限、日志配置、是否启动区块链至数量上限、是否可向用户自动分配,如下图所示。

    添加主机

    图 1.15.4.6 - 添加主机

    Active Chains 页面

    Active Chains 页面会显示所有正在运行的链,包括链的名称、类型、状态、健康状况、规模、所属主机等信息。正在被用户占用的链会用灰色背景标识,如下图所示。

    Active Chains 页面

    图 1.15.4.7 - Active Chains 页面

    点击一条链的 Actions 下拉菜单,有如下选项可供操作该链。

    • Start:如果这条链处于停止状态,则启动。
    • Stop:停止运行中的链。
    • Restart:重新启动这条链。
    • Delete:删除这条链。
    • Release:将占用的链释放,随后会被删除。

    点击 Active Chains 页面的 Add Chain 按钮,可以向资源池中添加更多链(如果还有未被占满的主机),如下图所示。

    添加链

    图 1.15.4.8 - 添加链

    用户控制台,申请使用Chain

    用户可以登录User Dashboard来申请和使用Chain

    登录页面

    图 1.15.4.9 - 登录页面

    Chain列表页面

    Chain列表页面显示所有用户已经申请的链。

    Chain列表页面

    图 1.15.4.10 - Chain列表页面

    Chain详情页面

    Chain详情页面可以查看链的基本信息(链高度,channel数,链码安装/实例化个数,最近的block/transaction),操作历史记录。

    Chain详情页面

    图 1.15.4.11 - Chain详情页面

    智能合约模板列表页面

    这个页面列取用户自己上传的智能合约代码模板,支持多个版本管理。

    智能合约模板列取页面

    图 1.15.4.12 - 智能合约模板列取页面

    智能合约模板详情页面

    在合约模板详情页面可以查看智能合约模板的详情,包括合约多版本列表,部署列表,部署合约。

    智能合约详情页面

    图 1.15.4.13 - 智能合约详情页面

    智能合约操作页面

    在这个页面可以invoke/query已经部署好的智能合约。

    智能合约操作页面

    图 1.15.4.14 - 智能合约操作页面

    智能合约运行列表页面

    这个页面可以查看所有已经部署,包括成功和失败的智能合约的列表。

    智能合约运行列表页面

    图 1.15.4.15 - 智能合约运行列表页面

    基于 Cello 进行功能扩展

    Cello 已经提供了完整的区块链管理功能,并提供了图形界面和 API。

    用户可以通过向 Cello 的 Master 节点(默认为 80 端口)发送 RESTful API 来申请、释放区块链,或查看区块链相关信息,如其对外开放的接口,可供用户进行远程交互。RESTful API 的说明可在 Cello 的文档中查阅。

    对于区块链服务提供者,可以利用这些 API 为用户呈现友好的区块链申请和操作界面,在 Cello 的基础之上构建和实现更多功能。

    本章小结

    本章介绍了区块链即服务的概念,阐述了整合云计算技术能够为区块链部署和管理所带来的便捷。接下来提出了区块链服务平台的参考架构,并从功能和性能等实践角度总结了平台设计的考量指标。

    本章随后还介绍了业界领先的 IBM Bluemix 和微软 Azure 云上提供的区块链服务。最后讲解了如何使用超级账本 Cello 项目快速搭建一套个性化的区块链服务平台。

    区块链技术的普及离不开生态系统和相关工具的成熟,区块链应用的落地同样离不开完善的 DevOps 支持。本章的内容能够给予读者不同的视角,从系统方案的角度出发,思考如何在新技术变革中保持应对变化的敏捷与高效。

  • 相关阅读:
    oracle 游标例子
    oracle 认识
    Scut游戏服务器引擎之新手入门
    Scut游戏服务器引擎6.5.8.6发布
    Scut游戏服务器引擎之Unity3d接入
    Scut游戏服务器引擎6.1.5.6发布,直接可运行,支持热更新
    ScutSDK 0.9版本发布
    Scut游戏服务器引擎6.0.5.2发布
    Scut游戏服务器引擎6.0.5.1发布
    Scut游戏服务器引擎6.0.5.0发布-支持C#脚本
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13312700.html
Copyright © 2020-2023  润新知