IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 区块链 -> 一键部署区块链背后的秘密(下) -> 正文阅读

[区块链]一键部署区块链背后的秘密(下)

前言

在《一键部署区块链背后的秘密(上)》中,我们详细讲述了 BaaS 驱动的概念、功能设计以及驱动在 BaaS 内发挥的巨大价值,即实现主体架构与业务代码解耦,实现更灵活、快捷的异构链和异构主机接入。

本文将与大家一同探究驱动运行机制及内部构造,深挖驱动的本质特性,详细呈现驱动之间的协同机制,从而立体地呈现:BaaS平台如何在资源相互隔离的前提下,高效支持不同区块链底层平台部署在不同的主机资源中,达到一键部署区块链服务的能力。

要点回顾
在这里插入图片描述
在BaaS内,我们定义了两种重要的驱动类型:主机驱动和链驱动。

其中主机驱动负责统管主机资源的生命周期。
在这里插入图片描述
链驱动负责统管链和节点资源的生命周期。
在这里插入图片描述

驱动的承载器——核心驱动容器环境

每个驱动代码结构统一,支持自动化生成代码,其基本结构如下:

1)ui(驱动页面)
a)src/actions(资源管理操作)

2)driver(驱动后端服务)
a)actions(资源管理操作)
b)coreface(与核心驱动容器环境通信)
c)main.go(程序入口)

3)config.yaml(驱动配置)
4)logo.svg(驱动 logo)
5)pack.sh(驱动打包脚本)

其中,驱动页面作为微前端嵌入BaaS控制台,支持用户可视化操作,而驱动后端服务则作为HTTP服务负责提供对资源的全生命周期管理。

因此,前端请求可通过核心驱动容器环境 这一“介质”将请求转发给具体的驱动,随后,驱动通过核心驱动容器环境SDK与之进行GRPC通信,最终将数据存储在BaaS数据库当中。

一方面,BaaS通过上述模式定义了通用的驱动协议,另一方面,借助驱动中pack.sh 脚本将驱动打包成压缩文件后,调用核心驱动容器环境的驱动上传接口实现驱动包上传操作,实现对不同类型资源的管理能力,从而真正实现“可插拔”。
在这里插入图片描述
主机驱动与链驱动的桥梁

我们知道,支持单一主机类型并在该环境内部署并管理一种区块链底层平台是较为简单的,但若想囊括绝大部分主机类型以及区块链底层平台绝非易事。

实践中,当且仅当链和节点资源被部署在主机环境上才会成为真正的资源,而未部署前他们对于链驱动而言可视为若干配置文件。因此,通过分析资源的本质属性,我们抽象了一个统一的Command接口,该接口可视为连接主机驱动与链驱动之间的桥梁,而驱动内部则负责核心能力实现。

通过驱动和Command接口的有机组合,后续如BaaS平台需要新增支持新的主机环境,只需实现相应的Command接口即可,从根本上实现X种区块链底层在Y个资源环境下的兼容,省去X*Y次重复劳动。
在这里插入图片描述

小试牛刀

为便于理解实际运作,我们编写了一个基础demo 。(真实场景中主机驱动和链驱动是通过趣链BaaS 提供的核心驱动引擎接口以及网络进行通信的,本文旨在帮助大家直观感受Command接口如何链接主机驱动和链驱动。)

1、首先,创建autodeploy项目

mkdir autodeploy && cd autodeploy
go mod init authdeploy

2、定义主机驱动Command接口

type HostDriver interface {
  Command(req *ExecCommandReq) (*ExecCommandRes, error)
}

type ExecCommandReq struct {
  MachineID int
  Command   string
  // 可扩展其他能力, 如文件等
}


type ExecCommandRes struct {
  Desc string
}

3、定义主机驱动与链驱动的桥梁

// Core 主体服务
type Core struct{}


// ExecCommand core 定义链驱动与主机驱动的桥梁
func (c Core) ExecCommand(req *ExecCommandReq) (res *ExecCommandRes, err error) {
  var hd HostDriver


  uuid := getHostDriverByMachineID(req.MachineID) // 主机驱动, core 服务根据主机 req 中的主机 ID 获取所用的主机驱动
  switch uuid {
  case "colocation":
    hd = &Colocation{}
    res, err = hd.Command(req)
  }


  return res, err
}


func getHostDriverByMachineID(ID int) string {
  // TODO
  // 根据 machine ID 获取所用的主机驱动
  return "colocation"
}

4、main方法

// Hyperchain 链驱动
type Hyperchain struct{}


func (h *Hyperchain) DeployNode(req *ExecCommandReq) (*ExecCommandRes, error) {
  core := &Core{}
  return core.ExecCommand(req)
}


func main() {
  // Hyperchain 驱动, 将节点部署在 colocation 主机上
  {
    hpc := Hyperchain{}
    res, err := hpc.DeployNode(&ExecCommandReq{
      MachineID: 1,
      Command:   "./deploy.sh", // 执行脚本完成节点的部署
    })
    if err != nil {
      fmt.Println(err)
      return
    }
    fmt.Println(res.Desc)
  }
}

总结

BaaS通过设计可插拔形式的驱动,实现不同区块链底层平台资源的生命周期管理能力,但这还远远不够,因为具体的资源层均是主机驱动加以控制的。

为了实现资源之间的隔离,趣链BaaS核心驱动引擎抽象了Command接口,建立主机驱动与链驱动之间的桥梁,清晰地定义上述两大驱动的功能边界,真正实现资源间的隔离。(链驱动只负责处理部署链所需要的各种证书、sdk 文件、部署脚本等)

实际部署资源时,链驱动只需要调用核心驱动引擎提供的Command接口,借助主机驱动管控实际的资源,支持不同的区块链底层平台部署在不同的主机环境中,通过扩展Command接口,管理区块链节点的整个生命周期,灵活契合复杂场景下的需求。

  区块链 最新文章
盘点具备盈利潜力的几大加密板块,以及潜在
阅读笔记|让区块空间成为商品,打造Web3云
区块链1.0-比特币的数据结构
Team Finance被黑分析|黑客自建Token“瞒天
区块链≠绿色?波卡或成 Web3“生态环保”标
期货从入门到高深之手动交易系列D1课
以太坊基础---区块验证
进入以太坊合并的五个数字
经典同态加密算法Paillier解读 - 原理、实现
IPFS/Filecoin学习知识科普(四)
上一篇文章      下一篇文章      查看所有文章
加:2022-09-13 11:21:05  更:2022-09-13 11:22:26 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 21:26:51-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码