用于基于云平台的自动区块链部署的方法和***
技术领域
本文一般涉及计算机技术,具体涉及用于基于云平台的自动区块链部署的方法和设备。
背景技术
区块链***,也称为分布式账本***(DLS)或共识***,可以使得参与的实体能够安全地且不可篡改地存储数据。在不参考任何用例的情况下,区块链***可以包括任何DLS,并可以用于公有区块链网络、私有区块链网络和联盟区块链网络。公有区块链网络向所有实体开放使用该***,并开放参与共识过程。私有区块链网络针对特定实体提供,该实体集中控制读写权限。联盟区块链网络针对选择的实体组群提供,该实体组群控制共识过程,并包括访问控制层。
区块链***可以维护一个或多个区块链。区块链是用于存储诸如交易的数据的数据结构,其可以防止恶意方篡改和操纵数据。
区块链***已经用于对存储数据的开放性、透明性和不变性具有高要求的场景中。基于智能合约,区块链应用用于供应链融资或***等场景。传统上,区块链***被手动部署。因此,需要快速可靠的自动区块链部署,这可以使用户能够专注于开发区块链应用而不是部署区块链***的技术细节。
发明内容
在一个方面,提供了一种计算机实现的用于自动区块链部署的方法。该方法包括:促使在计算机上创建虚拟计算环境,该计算机连接到云平台;生成区块链的初始区块并将区块链的初始区块传输到云平台;促使在虚拟计算环境中初始化区块链;在区块链的初始化完成后,基于云平台监控区块链。
在另一方面,提供了一种用于自动区块链部署的设备。所述设备包括一个或多个处理器和一个或多个计算机可读存储器,其耦接到一个或多个处理器并且具有存储在其上的指令。所述指令可由所述一个或多个处理器执行以促使在计算机上创建虚拟计算环境,该计算机连接到云平台;生成区块链的初始区块并将区块链的初始区块传输到云平台;促使在虚拟计算环境中初始化区块链;在区块链的初始化完成后,基于云平台监控区块链。
在又一方面,提供了一种非暂时性计算机可读介质,其中存储有指令,当由设备的处理器执行时,所述指令使得所述设备执行用于自动区块链部署的方法。该方法包括:促使在计算机上创建虚拟计算环境,该计算机连接到云平台;生成区块链的初始区块并将区块链的初始区块传输到云平台;促使在虚拟计算环境中初始化区块链;在区块链的初始化完成后,基于云平台监控区块链。
附图说明
包含在本说明书中并构成其一部分的附图示出了实施例。在下列参照附图的说明中,除非另有所示,不同附图中的相同数字表示相同或类似的元件。
图1是根据实施例的区块链***的示意图。
图2是根据实施例的用于实现区块链***中的节点的设备的示意图。
图3是根据实施例的用于自动区块链部署的方法的流程图。
图4是根据实施例的用于自动区块链部署的方法的流程图。
图5是根据实施例的用于自动区块链部署的方法的流程图。
图6是根据实施例的用于自动区块链部署的装置的框图。
具体实施方式
本文的实施例提供了用于实现应用于自动和可靠的区块链部署的区块链即服务(BaaS)***的方法和设备。例如,BaaS***可以为区块链服务提供商提供服务平台,以创建、管理并维护区块链和基于区块链的应用。该方法和设备允许BaaS***的一个或多个处理器促使在虚拟计算环境中创建区块链的节点,该虚拟计算环境在连接到云平台的计算机上动态创建。在创建虚拟计算环境之后,一个或多个处理器可以生成区块链的初始区块并将其上传到云平台的存储器。如果上传完成,则一个或多个处理器可以通知虚拟计算环境初始化区块链,例如通过使用云计算平台的消息队列,或者如果这种传输不完整则实现定时重传机制。当通知虚拟计算环境时,虚拟计算环境可以从存储器下载初始区块并使用该初始区块启动区块链应用。当区块链被成功初始化(例如,无错误地完成)时,虚拟计算环境可以用作区块链***的节点。然后,一个或多个处理器可以将节点添加到云平台的监控服务中。监控服务可以监控区块链的操作状态,并为用户提供区块链浏览器以浏览关于操作状态的信息。
本文公开的实施例具有一个或多个技术效果。在一些实施例中,使用BaaS***部署区块链的方法和设备使得能够快速开发并容易地使用区块链和基于区块链的应用,并且提供开发区块链的能力以及具有低成本、高安全性、高可靠性、标准化质量、弹性和动态可扩展性的区块链的使用。
在一些实施例中,所述方法和设备通过使用云平台的例如弹性计算服务的能力来自动化和管理虚拟计算环境的创建过程,从而实现自动区块链部署。这允许部署的区块链***具有根据服务需求弹性地或动态地扩展的能力,并且还允许BaaS***的用户专注于区块链应用的开发和基于区块链的服务的快速部署,这可以使用户无需建立、维护和管理区块链***本身,从而推动和促进区块链技术的广泛使用。在一些实施例中,所述方法和设备向云平台提供自动再次尝试区块链部署的能力,以通过使用诸如消息队列机制的通知机制来避免由于意外故障导致的部署中断。这允许BaaS***的一个或多个处理器与所创建的虚拟计算环境协调,以确保正确执行自动区块链部署的过程,这减少或消除了其人为干扰。
在一些实施例中,所述方法和设备提供在混合云环境中部署区块链***的能力。用于创建虚拟计算环境的计算机不限于云平台中的计算机之一,并且它可以是云平台外部的计算机,诸如由云平台的客户端提供的计算机(例如,客户端的私有云的计算机)或不同云平台(例如,公共云平台)中的计算机。只要计算机具有唯一的网络地址(例如,互联网协议或IP地址),就可以在计算机上创建虚拟计算环境。这允许区块链将具有以更少的限制和更灵活的方式部署到计算资源的能力,并且还允许区块链的用户对部署的区块链***的设计和结构具有更大程度的控制。
在一些实施例中,所述方法和设备通过将区块链的初始区块上传到云平台的存储器来提供统一的和防止节点故障的区块链部署的能力。这可以使区块链的所有节点能够在初始化区块链之前通过从存储器下载初始区块来同步初始区块,并因此消除了BaaS***重复创建初始区块的需要,并且允许方便、快速、自动且可靠的区块链部署。
在一些实施例中,所述方法和设备提供统一监控和管理所部署的区块链***的能力。监控服务向区块链的用户提供区块链浏览器以监控其操作状态。这允许用户在为用户实现这种区块链浏览器时节省计算资源。监控服务还为BaaS***提供集中监控所有已部署的区块链的能力。这允许BaaS***的提供者在分别监控部署的区块链***并方便地升级监控服务时节省计算资源。
区块链是以交易不可篡改且随后被验证的方式存储例如交易的数据数据结构。区块链包括一个或多个区块。每个区块通过包含在区块链中紧邻其之前的前一区块的加密哈希值(cryptographic hash)链接到该前一区块。每个区块还可以包括时间戳、自身的加密哈希值以及一个或多个交易。通常已经被区块链***中的节点验证的交易可以经哈希处理并编入诸如默克尔(Merkle)树的数据结构中。在Merkle树中,在树的叶节点处的数据是经哈希处理的,并且在该树的每个分支中的所有哈希值可以在该分支的根处级联(concatenated)。此过程沿着树持续一直到整个树的根,在整个树的根处存储了代表树中所有数据的哈希值。声称是存储在树中的交易的哈希值可以通过确定其是否与树的结构一致而被快速验证。
区块链***包括管理、更新和维护一个或多个区块链的计算节点的网络。区块链网络可以是公有区块链网络、私有区块链网络或联盟区块链网络。例如,如数百、数千甚至数百万个实体的大量实体可以在公有区块链网络中操作,并且每个实体操作该公有区块链网络中的至少一个节点。因此,公有区块链网络可以被认为是关于参与实体的公有网络。有时,大多数实体(节点)必须对每个区块签名以使该区块有效,并被添加到区块链网络的区块链中。公有区块链网络的示例包括利用被称为区块链的分布式账本的特定点对点支付网络。
通常,公有区块链网络可以支持公开交易。公开交易为公有区块链网络内的所有节点共享,并存储在全局区块链中。全局区块链是跨所有节点复制的区块链,并且所有节点相对于全局区块链达成共识。为了达成共识(例如,同意向区块链添加区块),在公有区块链网络内实施共识协议。共识协议的示例包括工作量证明(POW)(例如,在某些加密货币网络中实施)、权益证明(POS)和权限证明(POA)。
通常,可以为特定实体提供私有区块链网络,该特定实体集中控制读写权限。实体控制哪些节点能够参与到区块链网络中。因此,私有区块链网络通常被称为权限网络,其限制允许谁参与网络,以及它们的参与级别(例如,仅在某些交易中)。可以使用各种类型的访问控制机制(例如,现有参与者投票添加新实体,监管机构可以控制准入)。
通常,联盟区块链网络在参与实体之间可以是私有的。在联盟区块链网络中,共识过程由授权的节点集控制,一个或多个节点由相应的实体(例如,金融机构、保险公司)操作。例如,由十(10)个实体(例如,金融机构、保险公司)组成的联盟可以操作联盟区块链网络,每个实体可以操作联盟区块链网络中的至少一个节点。因此,联盟区块链网络可以被认为是与参与实体相关的私有网络。在一些示例中,每个实体(节点)必须对每个区块签名,以使区块有效并被添加到区块链中。在一些示例中,至少实体(节点)的子集(例如,至少7个实体)必须对每个区块签名,以使区块有效并被添加到区块链中。
通常,BaaS***可以集成计算、网络和存储资源,并为区块链服务提供商提供统一、可定制和可编程的接口以用于基于区块链的应用开发和支持设施。BaaS***可以模块化其提供的服务,例如区块链网络构建、加密、共识、资源管理、用户管理或操作管理。这些服务可以实现为在计算环境中运行的软件或进程。在一些实施例中,BaaS***的模块可以作为插件或软件开发工具包(SDK)提供。BaaS***的用户可以使用这些模块并专注于开发区块链应用,例如智能合约、加密货币或代币管理器。
图1示出了根据实施例的区块链***100的示意图。参考图1,区块链***100可以包括多个节点,例如节点102-节点110,其被配置为对区块链120执行操作。节点102-节点110可以形成网络112,例如点对点(peer to peer,P2P)网络。节点102-节点110中的每一个可以是计算设备,例如计算机或计算机***,被配置为存储区块链120的副本,或者可以是在计算设备上运行的软件,诸如进程或应用。节点102-节点110中的每一个可以具有唯一标识。
区块链120可以包括数据区块形式的记录的增长列表,例如图1中的区块B1-区块B5。区块B1-区块B5中的每一个可以包括时间戳、前一区块的加密哈希值以及当前区块的数据,所述数据可以是诸如货币交易之类的交易。例如,如图1所示,区块B5可以包括时间戳、区块B4的加密哈希值和区块B5的交易数据。而且,例如,可以对前一区块执行哈希处理以生成前一区块的加密哈希值。哈希处理可以通过诸如SHA-256的哈希算法将各种长度的输入转换为固定长度的加密输出。
节点102-节点110可以被配置为对区块链120执行操作。例如,当节点例如节点102想要将新数据存储到区块链120上时,该节点可以生成要添加到区块链120的新区块并将该新区块广播到网络112中的其他节点,例如节点104-节点110。基于该新区块的合法性,例如其签名和交易的有效性,其他节点可以确定接受该新区块,使得节点102和其他节点可以将该新区块添加到它们各自的区块链120的副本中。随着该过程重复,可以将越来越多的数据区块添加到区块链120。
在一些实施例中,区块链***100可以根据一个或多个智能合约进行操作。每个智能合约可以是合并到区块链120中的计算机代码形式的计算机协议,以促进、验证或施行合约的协商或执行。例如,区块链***100的用户可以使用诸如C++、Java、Solidity、Python等编程语言将商定的条款编程成智能合约,并且当满足该条款时,区块链***100可以自动执行智能合约,例如执行交易。又例如,智能合约可以包括多个子例程或函数,每个子例程或函数可以是执行特定任务的一系列程序指令。智能合约可以是在没有人工交互的情况下完全执行或部分执行的操作代码。
由于节点102-节点110中的每一个可以存储区块链120的副本,所以节点102-节点110中的每一个还可以访问区块链120中包括的智能合约的副本。在一些实施例中,智能合约可以被分配有区块链120上的地址,例如,在智能合约被编译成操作代码之后。智能合约的地址被配置为在区块链120上定位智能合约。
在一些实施例中,区块链***100中的节点(例如,节点102)可以基于智能合约的副本来执行交易。在将包括交易的新区块广播到区块链***100之后,区块链***100中的其他节点可以验证该新区块。在区块链***100中的大多数节点或所有节点验证了该新区块之后,可以将该新区块添加到这些节点上的区块链120的相应副本,并且交易完成。
在一些实施例中,设备130可用于创建、管理和维护区块链***100。设备130可以包括通信接口、处理器和存储器。在一些实施例中,可以在设备130上运行BaaS管理器服务,以促使创建、管理和维护区块链***100。可以通过一个或多个应用编程接口(API)来建立设备130和区块链***100之间的通信。还可以提供软件开发工具包(SDK)以促进这种通信的建立。
图2示出了根据实施例的用于实现区块链***中的例如节点102(图1)的节点的设备200的示意图。参考图2,设备200可以包括通信接口202、处理器204和存储器206。
通信接口202可以促进设备200与网络中的例如节点104-节点110(图1)的其他节点之间的通信。在一些实施例中,通信接口202被配置为支持一个或多个通信标准,诸如互联网标准或协议、综合业务数字网络(ISDN)标准等。在一些实施例中,通信接口202可以包括局域网(LAN)卡、电缆调制解调器、卫星调制解调器、数据总线、电缆、无线通信信道、基于无线电的通信信道、蜂窝通信信道、基于互联网协议(IP)的通信设备或用于有线和/或无线通信其他通信设备中的一个或多个。在一些实施例中,通信接口202可以基于公共云基础设施、私有云基础设施、混合公共/私有云基础设施。
处理器204可以包括中央处理单元(CPU)或图形处理单元(GPU)。在一些实施例中,处理器204可以包括一个或多个专用处理单元、专用集成电路(ASIC)、现场可编程门阵列(FPGA)或各种其他类型的处理器或处理单元。处理器204与存储器206耦接,并且被配置为执行存储在存储器206中的指令。
存储器206可以存储处理器可执行的指令和数据,例如区块链120(图1)的副本。存储器206可以包括任何类型的易失性或非易失性存储器设备或其组合,例如静态随机存取存储器(SRAM)、电可擦除可编程只读存储器(EEPROM)、可擦除可编程只读存储器(EPROM)、可编程只读存储器(PROM)、只读存储器(ROM)、磁存储器、闪存或磁盘或光盘。当处理器204执行存储器206中的指令时,设备200可以对区块链120执行操作。
设备200可以将节点实现为虚拟计算环境。可以使用软件虚拟化技术来生成虚拟计算环境,以使用一个或多个设备200的计算资源(例如,处理器核、存储器的部分、存储空间的部分、带宽的部分)来模拟独立的计算机。在一些实施例中,可以在一个设备200上模拟一个或多个虚拟计算环境。在一些实施例中,用于生成虚拟计算环境的计算资源可以来自连接到网络的多个物理计算机,例如多个设备200。在一些实施例中,虚拟计算环境可以包括物理机的至少一个处理器核、物理机的存储器的一部分以及网络接口。
图3示出了根据实施例的用于自动区块链部署的方法300的流程图。例如,方法300可以由与云平台相关联的BaaS***的管理服务来执行。BaaS***可以包括一个或多个处理器以及耦接到一个或多个处理器并且其上存储有指令的一个或多个计算机可读存储器,所述指令可由一个或多个处理器执行以执行例如方法300的过程。在一些实施例中,部署的区块链***可以是区块链***100(图1)。
参考图3,在步骤302,例如BaaS***的一个或多个处理器接收连接到包括例如计算机组的云平台的计算机的网络地址。云平台可以由云服务提供商(例如,公共或私有云服务提供商)提供。在一些实施例中,云服务提供商还可以是BaaS服务提供商。在一些实施例中,计算机的网络地址可以包括互联网协议(IP)地址。例如,IP地址可以是内部IP地址(例如,由本地网络分配)或外部IP地址(例如,由互联网服务提供商分配)。通常,计算机的IP地址是唯一的,并且与云平台中的计算机组的IP地址不同。
计算机可以是具有可访问且唯一的网络地址的任何计算机。在一些实施例中,计算机可以是云平台中的计算机,例如计算机组中的一个计算机。在一些实施例中,计算机可以由云平台的应用容器管理服务(例如,
或简称为“k8s”)来管理。在一些实施例中,计算机可以由云平台的云原生集群管理服务来管理。例如,计算机可以不由
管理。
在一些实施例中,计算机可以是不在云平台中的计算机。例如,计算机可以不在任何云平台中,例如作为BaaS***的用户的独立计算机来操作,或者作为用户的计算机集群中的计算机来操作。又例如,计算机可以在外部云平台中,并且可以是由与提供计算机组不同的云服务提供商提供的公共云平台的计算机、由用户提供的私有云平台的计算机、或者是混合云平台的计算机。混合云平台可以是例如组合了公共云平台的至少一个计算机和私有云平台的至少一个计算机的云平台。
仍然参考图3,在步骤304,一个或多个处理器促使在计算机上创建虚拟计算环境,例如,基于计算机的网络地址。例如,一个或多个处理器可以向云平台发送用以创建虚拟计算环境的指令,并且云平台可以遵循该指令创建虚拟计算环境。在一些实施例中,虚拟计算环境可以实现为物理计算环境的等同物,例如通过使用物理计算环境的计算资源来创建虚拟计算环境。在一些实施例中,虚拟计算环境可以包括物理机的至少一个处理器核、物理机的存储器的一部分、网络接口和操作***。例如,物理机可以包括多个物理处理器核,并且这些物理处理器核中的至少一个可以作为虚拟处理器分配给虚拟计算环境。物理机还可以包括物理存储器,并且物理存储器的至少一部分可以作为虚拟存储器分配给虚拟计算环境。
在一些实施例中,虚拟计算环境还可以包括存储空间(例如,物理机的磁盘的一部分)、网络带宽(例如,物理机的网络带宽的一部分)、网络地址(例如,IP地址)、用于数据通信的端口号、网络防火墙或其他计算组件。在一些实施例中,云平台的弹性计算服务(ECS)可用于自动创建、管理和维护虚拟计算环境。例如,ECS可以使用网络地址访问计算机,并在其上创建虚拟计算环境。虚拟计算环境可以具有各种规范、配置或能力,诸如不同数量的处理器核、不同大小的存储器、不同大小的存储空间、以及不同的网络性能(例如,网络带宽)。在一些实施例中,一个或多个处理器可以促使在连接到该计算机组的一个或多个计算机中创建多个虚拟计算环境,所述一个或多个计算机中的每一个具有唯一的网络地址。每个虚拟计算环境可以是独立的。
在一些实施例中,当执行步骤304时,可以应用分布式锁(distributedlock)。例如,分布式锁可以是在分布式***(例如,云平台)中使用的操作,用于避免在相同的共享计算资源(例如,处理器核、存储器空间、存储空间、带宽等)处的并发操作之间的干扰。例如,一个或多个处理器可以基本上同时促使在同一计算机上创建多个虚拟计算环境,以用于部署多个区块链***。创建虚拟计算环境可以将计算机的共享计算资源分配给相应的虚拟计算环境。为了避免在计算机上运行的独立进程之间的干扰或冲突,分布式锁可以用于例如对共享计算资源的单个操作的独占许可(“锁定”)。当共享计算资源***作锁定时,不允许进行其他操作。例如,分布式锁可以基于数据库来实现,例如通过在锁定共享计算资源时向共同可访问的数据库添加条目,以及在释放共享计算资源时删除该条目。又例如,可以基于高速缓存来实现分布式锁,例如通过使用共同可访问的高速缓存替换上述共同可访问的数据库。
在一些实施例中,一个或多个处理器可以将分布式锁应用于计算机的共享资源。在应用分布式锁之后,一个或多个处理器可以促使利用计算机的共享资源来创建虚拟计算环境。在创建虚拟计算环境之后,一个或多个处理器可以释放分布式锁。
在一些实施例中,在步骤304之后,一个或多个处理器可以在继续执行步骤306之前促使创建虚拟计算环境的身份。例如,一个或多个处理器可以促使虚拟计算环境生成身份。在一些实施例中,响应于在计算机上创建虚拟计算环境,一个或多个处理器可以促使生成公钥和私钥对。该对可以表示虚拟计算环境的身份。响应于接收到公钥或私钥中的一个,一个或多个处理器可以生成区块链的初始区块。在一些实施例中,可以使用非对称加密算法来生成公钥和私钥,例如RSA算法、ElGamal算法或椭圆曲线加密(ECC)算法。通过这样做,虚拟计算环境可能不会被恶意方攻击或滥用,从而保护区块链的安全。
在一些实施例中,可以使用一次性程序代码生成密钥对。例如,一次性程序代码可以存储在虚拟计算环境中并由虚拟计算环境执行。换句话说,密钥对可以在虚拟计算环境中本地生成。在生成密钥对之后,可以销毁一次性程序代码。在一些实施例中,可以使用例如,密钥管理服务(KMS)的安全服务来生成密钥对。例如,响应于在计算机上创建了虚拟计算环境,一个或多个处理器可以向安全服务发送用于生成密钥对的请求。在安全服务生成密钥对之后,一个或多个处理器可以从安全服务接收公钥或私钥中的一个。在一些实施例中,安全服务可以集成为云平台的一部分。在一些实施例中,安全服务可以被实现为连接到云平台、BaaS***和虚拟计算环境的独立服务(例如,未集成到云平台中),例如第三方服务。
在一些实施例中,私钥可以专门存储在虚拟计算环境中并由虚拟计算环境使用以进行加密或解密。可以向云平台和BaaS***的其他计算环境发送公钥以用于进行加密或解密。这种加密和解密可以符合密码学标准,例如X.509协议。
在一些实施例中,对于区块链***的节点之间的安全数据传输,一个或多个处理器可以将与虚拟计算环境相关联的公钥存储在安全服务(例如,安全服务的存储空间)处,并将与虚拟计算环境相关联的私钥存储在虚拟计算环境处。例如,当向其他计算环境发送出站数据(outbound data)时,虚拟计算环境可以使用其私钥对出站数据的哈希部分(称为“摘要”)进行加密,并将加密的摘要包括在加密的出站数据中,该过程可称为“签名”。当其他计算环境接收到签名的出站数据时,其他计算环境可以使用虚拟计算环境的公钥解密签名的出站数据中的加密摘要,并将解密的摘要与再次生成的出站数据的摘要进行比较(例如,通过再次哈希处理解密的出站数据)。如果解密的摘要和再次生成的摘要相同,则可以将出站数据视为已认证。在一些实施例中,其他计算环境可以从安全服务检索公钥。
在一些实施例中,在为即时虚拟计算环境生成密钥对之后,一个或多个处理器可以促使多个虚拟计算环境存储密钥对的公钥或私钥中的至少一个,例如公钥。在一些实施例中,多个虚拟计算环境可以包括即时虚拟计算环境。在一些实施例中,一个或多个处理器可以为多个虚拟计算环境分配权重。例如,虚拟计算环境可以分别被分配有0.5、0.6、0.7、0.8、0.9、1.0或任何其他适当的权重值的权重,这里不做限定。在一些实施例中,一个或多个处理器可以通过将多个虚拟计算环境记录在BaaS***的存储器(例如,数据库、表或任何适当的数据结构)中来分配它们的权重。
当为即时虚拟计算环境生成初始区块时,一个或多个处理器可以从多个虚拟计算环境中的一些或全部接收公钥,每个接收的公钥对应于即时虚拟计算环境的公钥,并确定分别分配给它们的权重的总和。当总和大于或等于预定阈值(例如,0.85)时,一个或多个处理器可以确定即时虚拟计算环境的身份,并且将所接收的公钥和分配给虚拟计算环境的权重包括在初始区块中作为即时虚拟计算环境的身份的表示,其中所述公钥是从所述虚拟计算环境接收的。
在一些实施例中,在继续执行步骤306之前,一个或多个处理器还可以创建BaaS***的身份。在一些实施例中,BaaS***的身份也可以被生成为公钥和私钥对。例如,一个或多个处理器可以使用存储在BaaS***的计算机中的一次性程序代码来生成密钥对。换句话说,密钥对可以在BaaS***中本地生成。在生成密钥对之后,可以销毁一次性程序代码。作为另一示例,可以使用安全服务(例如,KMS)来生成密钥对。在安全服务生成密钥对之后,一个或多个处理器可以从安全服务接收公钥或私钥中的一个,例如公钥。在一些实施例中,响应于接收到公钥或私钥中的一个,一个或多个处理器还可以在将BaaS***的身份包括在区块链的初始区块中。
在一些实施例中,在创建虚拟计算环境之后,一个或多个处理器可以生成区块链的初始区块。例如,当成功创建虚拟计算环境(例如,无错误地创建)时,虚拟计算环境可以向一个或多个处理器发送消息以指示该情况,并且一个或多个处理器可以开始执行步骤306。
再次参考图3,在步骤306,一个或多个处理器可以生成区块链的初始区块,并将该初始区块传输到云平台的存储器中。通过将初始区块上传到存储设备,虚拟计算环境可以下载初始区块以用于初始化区块链。在这种情况下,每当在新创建的虚拟环境中实现区块链***的新节点时,一个或多个处理器可能不需要再次生成初始区块。可选地和/或附加地,如果一个或多个处理器在区块链***的部署期间不能正确地生成初始区块,则区块链***的部署可能不受影响,因为可以下载存储在存储器中的初始区块以初始化在新添加的节点处的区块链。
在一些实施例中,初始区块可以包括虚拟计算环境的网络地址、虚拟计算环境的端口号、虚拟计算环境的身份或初始智能合约中的至少一个。虚拟计算环境的身份可以包括用于标识其身份的任何元素,例如标识、公钥或私钥。可以使用诸如KMS的安全服务来生成公钥或私钥。
在一些实施例中,初始智能合约可以包括用于配置区块链中的区块的配置智能合约或用于设置区块链中的节点配置的节点智能合约中的至少一个。例如,配置智能合约可以包括用于配置区块大小、区块生成时间或其他区块相关细节的条件。又例如,节点智能合约可以包括用于将节点(例如,在新的虚拟计算环境中实现)添加到区块链***、从区块链***移除节点、将网络地址分配给区块链***的节点或其他节点相关细节的条件。
在一些实施例中,一个或多个处理器可以将初始区块传输或上传到云平台的分布式存储中。分布式存储可以使用各种存储架构来实现,例如将数据作为对象进行管理的基于对象的存储架构、将数据作为文件层次结构进行管理的文件***存储架构、或者作为硬盘的扇区或磁道内的区块进行管理的区块存储架构。例如,分布式存储可以被实现为使用基于对象的存储架构的对象存储服务(OSS)。例如,在OSS中,数据对象可以包括数据本身、数据对象的元数据和标识。OSS可用于在区块链的部署期间存储任何中间产生的数据,例如初始区块。
再次参考图3,在步骤308,一个或多个处理器促使区块链在虚拟计算环境中被初始化。在一些实施例中,响应于在步骤306处完成了将初始区块传输至存储器(例如,通过确认消息确认),一个或多个处理器可以向云平台的消息队列发送指示完成传输的消息。该消息可以由虚拟计算环境接收以初始化区块链。例如,消息是在云平台和BaaS***的模块或服务之间通信的一条数据或信息。该消息可以携带完成的操作的信息、操作的请求或操作的状态。该消息队列可以是用于转发在模块或服务之间通信的消息的中间件。在一些实施例中,消息队列可以使模块能够发送、接收、订阅、跟踪、广播、再次发送或查询消息。
在一些实施例中,消息队列可以提供异步消息传输,其中消息可以被发送到消息队列的存储器并存储在其中直到递送完成。如果消息传送失败,则消息队列可能会再次尝试递送,直到递送成功为止。例如,响应于完成了初始区块的传输,一个或多个处理器可以确定是否完成了向消息队列发送消息。如果是,则一个或多个处理器可以在虚拟计算环境中初始化区块链。否则,一个或多个处理器可以在预定时间段之后再次向消息队列发送消息。使用消息队列可以确保云平台和BaaS***的模块和服务之间的通信不会丢失,从而进一步确保自动区块链部署的正确过程。
在一些实施例中,为了确保云平台和BaaS***的模块和服务之间的通信,还可以使用除消息队列之外的机制。例如,响应于将初始区块传输到存储器,一个或多个处理器可以确定是否完成了这种传输。如果是(例如,通过确认消息确认),则一个或多个处理器可以在虚拟计算环境中初始化区块链。否则,一个或多个处理器可以在预定时间段之后再次向存储器传输初始区块。在一些实施例中,为了在不使用消息队列的情况下记录部署阶段,可以在云平台中(例如,在数据库中)存储标志或状态指示符以表示这样的阶段(例如,传输初始区块成功或失败)。通过检查标志或状态指示符,一个或多个处理器还可以确定是否完成了初始区块到存储设备的传输。
在一些实施例中,步骤308可以包括其他子步骤。图4是根据实施例的用于自动区块链部署的方法400的流程图。例如,方法400可以由设备200(图2)实现的虚拟计算环境执行。在一些实施例中,方法400可以实现为如方法300(图3)的步骤308的以下过程。
参考图4,在步骤402,例如虚拟计算环境的一个或多个处理器核从消息队列接收指示完成传输初始区块的消息。
在步骤404,一个或多个处理器核从存储器接收(例如,下载)初始区块。
在一些实施例中,在步骤402之后,一个或多个处理器核可以从虚拟计算环境中删除(例如,存储在存储空间中的)文件和(例如,在存储器中运行的)程序进程。例如,已删除的文件和程序进程与区块链的部署无关。在删除这些文件和程序进程之后,一个或多个处理器核继续执行步骤404。例如,这些的文件和程序进程可以是先前部署的区块链的剩余部分。这些文件和程序进程可能是由于先前部署的意外中断而产生的,并且可能会影响当前部署。通过删除这些文件和程序进程,可以最小化对当前区块链部署的潜在干扰。
在步骤406,一个或多个处理器核使用初始区块启动区块链应用。初始区块可以包括用于启动区块链应用的数据或信息。在启动区块链应用之后,可以初始化区块链并且能够提供基于区块链的功能和服务,并且虚拟计算环境可以成为区块链的节点。
再次参考图3,在步骤310,在完成区块链的初始化之后,一个或多个处理器可以例如通过使用云平台的监控服务基于云平台来监控区块链。例如,一个或多个处理器可以将所部署的区块链添加到监控服务。监控服务可以向区块链的用户提供各种工具和功能。
在一些实施例中,监控服务可以为用户提供监控区块链状态的功能。例如,状态可以包括区块链的区块的同步状态、虚拟计算环境中的区块链的长度、区块链节点之间的网络连接、区块链节点的计算资源用量、或者区块链节点的服务状态中的至少一个。在一些实施例中,监控服务可以从区块链中提取与区块相关联的信息。例如,在区块链的操作期间,虚拟计算环境可以访问或连接到数据库(例如,关系数据库服务或RDS),用于存储区块的信息(例如,区块链的长度或拓扑)、交易信息(例如,交易的数量或细节)和任务信息(例如,智能合约的列表)。在一些实施例中,监控服务可以提取这些信息。在一些实施例中,监控服务可以生成浏览器,其用于浏览区块链的状态或与区块相关联的信息中的至少一个。例如,浏览器可以实现为用于显示状态或信息的网页。又例如,浏览器还可以提供关于区块链应用的开发和测试的信息。
在一些实施例中,为了自动扩展区块链,一个或多个处理器可以重复地执行步骤302-步骤310(其可以包括步骤402-步骤406),使得可以创建新的虚拟计算环境用于承载区块链的新节点。
图5是根据实施例的用于自动区块链部署的方法的流程图。例如,方法500可以由BaaS管理器服务502、云平台504、安全服务506和计算环境508执行。尽管组件502-508在图5中单独呈现。但是它们都可以实现为云平台504的一部分。例如,BaaS管理器服务502和安全服务506可以实现为云平台504的服务。计算环境508可以是如图2-图4中描述的虚拟计算环境,其可以是或可以不是云平台504的一部分。
在一些实施例中,BaaS管理器服务502可以实现为BaaS***的服务。例如,BaaS管理器服务502可用于实现方法300(图3)和方法400(图4)。在一些实施例中,计算环境508可以是单独的***,例如认证服务器。例如,计算环境508可以实现为证书颁发机构(CA)服务器。计算环境508可以为在区块链***中进行的交易活动发布和认证数字证书。在一些实施例中,计算环境508可以被联盟区块链的用户所信任。在一些实施例中,计算环境508可以由区块链服务提供商提供,或者由第三方服务提供商提供。
参考图5,在步骤510,BaaS管理器服务502促使云平台504创建计算环境508。例如,BaaS管理器服务502可以接收连接到云平台504中的计算机组的计算机的网络地址,如步骤302(图3)中所述。BaaS管理器服务502还可以向云平台504发送网络地址,以使用网络地址在计算机上创建用于部署区块链的计算环境508,如步骤304(图3)中所述。当成功创建计算环境508时,云平台504可以向BaaS管理器服务502发送通知以指示该情况。在一些实施例中,通知可以是由云平台504发送到其消息队列(未示出)并由BaaS管理器服务502从消息队列接收的消息。
在步骤514,BaaS管理器服务502向安全服务506发送用于生成公钥和私钥对的请求,用于创建计算环境508的身份,如步骤304(图3)中所描述的。当成功生成密钥对时,安全服务506可以向BaaS管理器服务502发送通知以指示该情况。在一些实施例中,通知可以是由安全服务506发送到云平台504的消息队列并且由BaaS管理器服务502从消息队列接收的消息。
在步骤516,BaaS管理器服务502生成区块链的初始区块,如步骤306(图3)中所描述的。在步骤518,BaaS管理器服务502将初始区块上传到云平台504。例如,BaaS管理器服务502可以将初始区块传输到云平台504的存储器(未示出),如步骤306(图3)中所描述的。当成功上传初始区块时,云平台504可以向BaaS管理器服务502发送通知以指示该情况。在一些实施例中,通知可以是由云平台504发送到消息队列并由BaaS管理器服务502从消息队列接收的消息。
在步骤520,为了初始化区块链,计算机环境508的一个或多个处理器核从例如消息队列接收指示初始区块上传完成的消息,删除与当前区块链的部署无关的(例如,存储在存储空间中的)文件和(例如,在存储器中运行的)程序进程,将初始区块从存储器下载到计算机环境508,并使用初始区块启动区块链应用,如步骤402-步骤406中所描述的。当区块链被成功初始化(例如,没有错误地完成)时,计算机环境508可以向BaaS管理器服务502发送通知以指示该情况。在一些实施例中,通知可以是由计算机环境508发送到消息队列并由BaaS管理器服务502从消息队列接收的消息。
在步骤522,BaaS管理器服务502监控区块链。例如,BaaS管理器服务502可以使用云平台504的监控服务,如步骤310中所描述的。
在一些实施例中,在图5中,为了减少通信过载,可以仅在步骤518使用消息队列来通知BaaS管理器服务502和计算环境508初始区块向云平台504的上传已经完成。在一些实施例中,可以使用除消息队列之外的其他机制来实现步骤510-步骤516和步骤520-步骤522中的通知。在一些实施例中,可以在方法500中省略步骤510-步骤516和步骤520-步骤522中的通知,并且可以根据预定的时间顺序(例如,在预定时间)分别执行步骤510-步骤516和步骤520-步骤522。
图6是根据实施例的用于自动区块链部署的装置600的框图。例如,装置600可以实现方法300(图3)和方法400(图4)。在一些实施例中,装置600可以实现为BaaS管理器服务502(图5)。参考图6,装置600包括接收模块602、创建模块604、生成和传输模块606、初始化模块608和监控模块610。
接收模块602可以接收连接到云平台中的计算机组的计算机的网络地址,如步骤302(图3)中所描述的。创建模块604可以使用网络地址促使在计算机上创建用于部署区块链的虚拟计算环境,如步骤304(图3)中所描述的。生成和传输模块606可以生成区块链的初始区块并将该初始区块传输到云平台的存储器,如步骤306(图3)中所描述的。初始化模块608可以在虚拟计算环境初始化区块链,如步骤308(图3)和步骤402-406(图4)中所描述的。监控模块610可以响应于区块链初始化的完成,使用云平台的监控服务来监控区块链,如步骤310(图3)中所描述的。
对于装置600中各个模块的功能和角色的实施过程,可以参考上述方法中的相应步骤。为简单起见,这里省略了细节。
上述每个模块可以实现为软件或硬件,或软件和硬件的组合。例如,可以使用执行存储在存储器中的指令的处理器来实现上述每个模块。此外,例如,上述每个模块可以用专用集成电路(ASIC)、数字信号处理器(DSP)、数字信号处理设备(DSPD)、可编程逻辑设备(PLD)、现场可编程门阵列(FPGA)、控制器、微控制器、微处理器或其他电子组件中的一个或多个实现,用于执行所描述的方法。进一步用作示例,可以使用计算机芯片或实体来实现以上描述的每个模块,或者可以使用具有特定功能的产品来实现。在一实施例中,装置600可以是计算机,计算机可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板电脑、可穿戴设备或这些设备的任意组合。
在一些实施例中,计算机程序产品可以包括其上具有计算机可读程序指令的非暂时性计算机可读存储介质,所述指令用于促使处理器执行上述方法。
计算机可读存储介质可以是有形设备,其可以存储供指令执行设备使用的指令。计算机可读存储介质可以是,例如但不限于,电子存储设备、磁存储设备、光存储设备、电磁存储设备、半导体存储设备、或者前述的任何合适的组合。计算机可读存储介质的更具体示例的非详尽列表包括以下内容:便携式计算机磁盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM)、静态随机存取存储器(SRAM)、便携式光盘只读存储器(CD-ROM)、数字通用光盘(DVD)、记忆棒、软盘、例如在凹槽中记录有指令的穿孔卡或凸起结构的机械编码设备,以及前述的任何合适的组合。
用于执行上述方法的计算机可读程序指令可以是汇编指令、指令集架构(ISA)指令、机器指令、机器相关指令、微代码、固件指令、状态设置数据或以包括指向对象的编程语言和传统的过程编程语言的一种或多种编程语言的任意组合编写的源代码或目标代码。计算机可读程序指令可以作为独立软件包完全在计算设备上执行,或者部分在第一计算设备上执行,部分在远离第一计算设备的第二计算设备上执行。在后一种情况下,第二远程计算设备可以通过包括局域网(LAN)或广域网(WAN)的任何类型的网络连接到第一计算设备。
计算机可读程序指令可以被提供给通用或专用计算机的处理器、或者其他可编程数据处理装置以产生机器,使得指令通过计算机的处理器或其他可编程数据处理装置执行,创建用于实现上述方法的装置。
附图中的流程图和图示出了根据本文的各种实施例的设备、方法和计算机程序产品的可能实施例的架构、功能和操作。在这方面,流程图或图中的框可以表示软件程序、段或代码的一部分,其包括用于实现特定功能的一个或多个可执行指令。还应注意,在一些可选实施例中,框中提到的功能可以不按图中所示的顺序发生。例如,连续示出的两个框实际上可以基本上同时执行,或者这些框有时可以以相反的顺序执行,这取决于所涉及的功能。还应注意,图和/或流程图的每个框以及图和流程图中的框的组合可以由执行特定功能或动作的基于专用硬件的***或者专用硬件和计算机指令的组合来实现。
应当理解,为了清楚起见,在单独的实施方式的上下文中描述的本文的某些特征也可以在单个实施方式中组合提供。相反,为了简洁起见,在单个实施例的上下文中描述的本文的各种特征也可以单独提供或者以任何合适的子组合提供,或者在本文描述的任何其他实施例中合适地提供。除非另有说明,否则在各种实施例的上下文中描述的某些特征不是那些实施例的必要特征。
尽管已经结合具体实施例描述了本文,但是许多替换、修改和变化对于本领域技术人员来说是显而易见的。因此,以下权利要求包含落入权利要求的范围内的所有这些替换、修改和变化。