2从零开始创建区块链 区块链一键部署背后的秘密(二)

入门知识 2周前 (09-12) 12次浏览 0个评论

前言

在《一键部署区块链背后的秘密(上)》中,我们详细描述了BaaS驱动的概念、功能设计以及驱动在BaaS中的巨大价值2从零开始创建区块链,即实现主链解耦。架构和业务代码,实现对异构链和异构主机更灵活、更快速的访问。

本文将和大家一起探讨驱动运行机制和内部结构2从零开始创建区块链,深入挖掘驱动的本质特征,详细呈现驱动之间的协同机制,从而立体呈现:BaaS平台如何可以在相互隔离的前提下高效支持资源。不同的区块链底层平台部署在不同的宿主资源中,实现一键部署区块链服务的能力。

重点回顾

在 BaaS 中,我们定义了两种重要类型的驱动程序:主机驱动程序和链驱动程序。

主机驱动负责管理主机资源的生命周期。

链驱动负责管理链和节点资源的生命周期。

Driver Carrier – 核心驱动的容器环境

各驱动代码结构统一,支持代码自动生成。基本结构如下:

1)ui(驱动程序页面)

a) src/actions(资源管理操作)

2)驱动程序(驱动程序后端服务)

a)actions(资源管理操作)

b)(与核心驱动的容器环境通信)

c)main.go(程序入口)

3)config.yaml(驱动配置)

区块链主链和侧链_2从零开始创建区块链_区块链社会解码区块链全球应用与投资案例

4)logo.svg(司机标志)

5)pack.sh(驱动打包脚本)

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

因此前端请求可以通过核心驱动容器环境的“媒体”将请求转发给具体的驱动,然后驱动通过核心驱动容器环境SDK通过GRPC与它通信,最后存储BaaS 数据库中的数据。

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

主传动与链传动之间的桥梁

我们知道支持单一主机类型并在该环境下部署和管理区块链底层平台相对简单,但要覆盖绝大多数主机类型和区块链底层平台并不容易。

在实践中,链和节点资源当且仅当部署在宿主环境中时才成为真正的资源,并且在部署之前它们可以被视为链驱动的几个配置文件。因此,我们通过分析资源的本质属性,抽象出一个统一的Command接口,可以看作是宿主驱动和链驱动之间的桥梁,驱动负责核心能力的实现。

通过驱动和Command接口的有机结合,如果BaaS平台未来需要增加对新宿主环境的支持,只需要实现对应的Command接口,从根本上实现X底层Y资源环境下的多种区块链在以下条件下兼容,节省X*Y重复劳动。

小测试

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

1、首先,创建一个项目

mkdir autodeploy && cd autodeploy
go mod init authdeploy

2、定义主机驱动命令接口

区块链主链和侧链_2从零开始创建区块链_区块链社会解码区块链全球应用与投资案例

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{}

2从零开始创建区块链_区块链社会解码区块链全球应用与投资案例_区块链主链和侧链

// 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 }

区块链社会解码区块链全球应用与投资案例_2从零开始创建区块链_区块链主链和侧链

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

4、主方法

// 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通过设计可插拔的驱动来实现不同区块链底层平台资源的生命周期管理能力,但这还远远不够,因为具体的资源层是由宿主驱动控制的。

为了实现资源之间的隔离,QuChain BaaS的核心驱动引擎抽象了Command接口,在宿主驱动和链驱动之间建立了桥梁,明确了上述两个驱动的功能边界,真正实现了资源之间的隔离。 (链驱动只负责处理部署链所需的各种证书、sdk文件、部署脚本等)

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

挖矿网Ethos中文站简单易用的挖矿系统,为挖矿产业提供教程软件以及矿机测评交易信息等,挖矿网各种数字货币挖矿收益对比计算,挖矿网介绍挖矿的工具,以及矿场的最新消息等。http://www.ethospool.com/

喜欢 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址