一种基于区块链的网络边缘资源分配方法

2020-08-19 07:00戴俊杰沈苏彬
计算机工程 2020年8期
关键词:侧链以太提供者

戴俊杰,沈苏彬

(南京邮电大学 计算机学院,南京 210023)

0 概述

边缘计算[1]作为一种对云计算的补充性方案,将云计算的功能扩展到更靠近数据产生源的网络边缘以减轻网络传输负担,同时也更能满足部分应用,如物联网应用对低延迟响应的需求。早期关于边缘计算的研究,如移动云计算(Mobile Cloud Computing,MCC)[2]主要依赖云服务、Cloudlet[3]等微型数据中心,需要部署专用计算服务器作为移动终端设备和云之间的中间层,以提供更接近终端设备的计算服务。由Cisco[4]引入的雾计算(Fog Computing,FC)扩展了中间层的范围,用户可以通过从网络边缘到网络核心的任何连接的设备上获取雾计算服务。同时,雾节点部署的分散性使得设备既可以由自身充当雾节点提供服务也可以作为客户端使用雾资源[5]。近年来,研究人员引入雾计算模型[6],其将计算进一步转移到物联网环境的极端边缘。在该模型中,大量的异构移动设备和物联网设备都能够提供某种形式的服务,以减轻雾的负担。通过以上研究可以发现,计算服务的形式正在从以往单一的、由庞大数据中心提供的集中式云计算服务转向更加多元的、可以由各类可用的网络闲散资源提供的分散式计算服务。针对基于对等网络计算能力共享系统的研究,如加州伯克利大学的SETI@home项目[7]和BOINC项目[8],通过对等网络共享节点间闲置的计算能力来达到执行复杂运算的目的。但是以上项目和研究多数具有专用性(如某项科学研究)且规模有限,所使用的计算资源也较为固定,一般是个人计算机所提供的闲置处理器资源。在尝试将这种基于对等网络的计算模式应用到数量更为庞大的、分散于网络边缘且异构的闲散资源时,如何对资源进行有效、可靠且可信的管理将是一个巨大的挑战。本文着重关注于对位于网络边缘的、闲散的计算资源(下文称为资源)进行可靠和可信的分配。

目前,大多相关研究采用分布式的资源管理和调度方案[9-10],使用一个相对具有较强性能的边缘节点,如Cloudlet充当控制器,由其负责管理地理位置接近的一群边缘设备,接受资源请求并对其分配可用的资源,这种方式从一定程度上提高了应对大量分散和异构的资源时的资源管理效率。另外,也有研究人员[11]为了提供参与者更加稳定的接口,在云中部署集中控制器,从全局上管理资源的可用性信息、接受资源请求并做出相应的资源分配的决策,再将具体的调度工作交由中间层节点完成,这种方法具有更稳定且灵活的表现。但是以上研究中所采用的方案本质上仍是传统的中心化管理方法,需要由固定的、单一的实体作为控制中心进行统一管理。这种模式的明显缺陷在于:面临单点故障风险,即一旦控制节点发生故障,在其恢复之前无法正常进行计算服务;受制于传统信任模式,控制节点具有较高权限,若被恶意使用将造成参与者的损失,如滥用资源或提供恶意服务;在面对数量庞大、分布分散且异构的资源来源时,这种集中式管理方法的效率较低。

区块链[12]作为比特币系统的底层技术,以其对交易数据存储的不可篡改性、可追溯性和共识机制等特点近年来受到了人们广泛的关注。同时,随着对区块链技术研究的开展,也出现很多有关区块链在非数字货币领域的应用研究[13],旨在探索区块链可用的更加广泛的应用场景。针对上述计算资源分配方案中存在的问题,本文结合区块链技术探讨一种基于去中心化的、可信和高效的边缘计算资源分配方法。梳理当前区块链技术发展所面临的问题,并对其提出改进思路,设计可行的实现方案。不同于中心化资源分配方案中以单一控制节点为中心的结构设计,本文在基于区块链的、去中心化的方案中对资源管理的总体结构做出合理的调整和设计,确定涉及参与方进行交互以实现资源分配。为达到可信的资源分配的目的,利用区块链公用账本的本质,将用于资源分配中信任管理的关键数据记录到账本,使得用户可以根据所记录的数据进行操作。基于现有的以太坊区块链平台及其支持的智能合约技术,设计本文方法的实现方案。同时,针对目前区块链技术的性能瓶颈问题,提出基于以太坊平台的侧链扩容方案,以提高系统运行效率。

1 相关工作

1.1 区块链技术

区块链技术最初是作为比特币[14]的底层技术开始逐渐为人们所知。在比特币系统中,区块链技术被用于存储在对等网络中传播的交易信息,而这些交易信息确定了系统中存在的数字货币的数量及其归属情况。矿工作为区块链的维护者,可以由任何参与者担任。这些矿工在网络中收集并验证交易,同时将通过验证的交易信息组装成区块,并以Merkle树形式组织交易信息,将Merkle树根值作为交易信息的唯一标识放入区块头,任何对交易信息甚至是交易信息存储顺序的改动都将引起Merkle树根值的变化,从而使得区块内容不一致。每个区块的区块头中都包含上一个区块的区块头信息的哈希值,一个个区块被有序地链接在一起,区块链结构如图1所示。

图1 区块链结构Fig.1 Blockchain structure

为保证“链”内容的一致性,区块链技术使用了分布式共识机制,如比特币使用的工作量证明(Proof of Work,PoW)的共识机制。每个区块通过在区块头中放入一个一次性数,使得区块头的哈希值不大于某个目标值,从而成为一个合法区块。为此,竞争者不断尝试不同的一次性数,而这往往需要巨大的算力资源来实现,这使得成功篡改某个区块中的内容的难度随着块数量的增加而呈指数级上升。从本质上讲,共识机制的作用即在于将用于保证区块链这个公共账本的内容的一致性而进行的一致性投票与现实行为或者物质资源联系起来,其最初的目的是为了防御女巫攻击(Sybil Attack)。

随着区块链的发展,出现了更多成熟且拥有不同用途的区块链系统。针对不同的区块链系统,研究人员提出了更多不同的应用于区块链系统的共识机制,如权益证明(Proof of Stake,PoS)机制以及各类拜占庭容错(Byzantine Fault Tolerance,BFT)机制[15]等。以太坊[16]是一个总体上类似于比特币系统的区块链系统,其最大的不同在于其支持更加复杂的可执行脚本,一般被称为“智能合约”,支持由图灵完备的编程语言编写。使用智能合约将一些简单的业务逻辑以合约形式部署到区块链,由以太坊交易触发执行。另外一个较为流行的平台是超级账本(Hyperledger)的Fabric[17],它是联盟链中的典型代表,多用于企业间的项目,其同样支持类似于智能合约的可执行脚本,称为链码(Chain Code)。

但是,就目前区块链的研究现状而言,要真正实现广泛而实际的应用,仍面临诸多关键挑战和技术瓶颈。其中,最为突出的就是区块链的交易吞吐量和交易速率问题,在业内也被称为“可扩展性”问题[18]。该问题的核心指标通常使用每秒交易数(Transaction Per Second,TPS)来表示。一般地,比特币的TPS可以达到7,以太坊在经过几次性能提升后这一数值范围可以达到30~40。这些性能表现与Visa等目前主流的中心化支付系统仍无法相比。对于可扩展性问题,其最大的成因来自于目前区块链技术对共识机制所持的保守和谨慎的态度。尤其是在比特币和以太坊这一类涉及大数额资金转移的数字货币系统中,一个强共识机制被看作是保证系统正常运转的核心要素。因此,在该类系统中,每一笔交易都需要经过较长时间的验证和确认后才会被视为合法有效。

目前,有较多研究团队都在积极探索并提出相应的解决方案[19],以应对区块链的可扩展性问题。这些解决方案一般可以分为两类,第1类是通过直接修改区块链设计的链上解决方案,简单的如此前比特币系统出现的硬分叉,就是因为一部分用户决定上调区块大小限制而导致的,其目的为增加比特币交易的吞吐量。还有如康奈尔大学团队针对比特币系统提出的比特币-NG[20],通过升级比特币使用的PoW算法,缩短挖矿和确认区块的时间,另外还有以太坊社区所提出的分片技术[21],其将整个以太坊网络分割成多个“宇宙”,其中所包含的交易可以由不同验证者同时进行处理。第2类则是链下解决方案,在不改变现有主链设计的前提下,在其外实现扩容,如比特币中的闪电网络[22]和侧链[23]技术以及以太坊所提出的状态通道[24]。这一类解决方案的核心思想主要是在不改变主链设计的前提下,通过其他渠道快速进行交易,通过定时向主链同步交易数据,在享受底层区块链带来安全性的同时,提高交易吞吐量。

基于以上对区块链技术的分析,不难发现区块链本质上是一个公用账本,通过参与者对账本内容的共同维护来实现去中心化的信任管理。本文利用区块链实现一种去中心化、可信的边缘计算资源分配方法。同时,针对区块链目前仍存在的可扩展性问题,提出面向资源分配的侧链解决方案。基于以太坊平台以及利用智能合约对分配方法进行实现,并且使用以太坊的私有链网进行仿真实验。

1.2 基于区块链的计算资源管理

目前,研究人员正着力于探索区块链技术在去中心化计算资源管理上的潜力。其中最为突出的基于区块链的、去中心化的计算服务平台,如iExec[25]和Golem[26],旨在通过使用基于区块链的资源管理和财务激励,将一切可能的用户设备包括个人电脑、私人服务器甚至是整个数据中心在一个逻辑层面协同工作,以提供较强的计算能力来满足用户处理复杂计算任务和应用的需求。另外,还有文献[27]提出的SmartEdge,即基于以太坊的边缘计算智能合约,提供低成本、低开销的计算资源管理,使物联网设备可以与边缘计算节点自动交易以请求计算卸载服务。EdgeChain[28]是一种基于区块链的边缘计算架构,其建立了一个成本和定价模型,以优化跨多个移动网络运营商的应用程序布局,使得提供服务的移动网络运营者可以得到报酬以激励其继续提供计算能力。

上述大部分利用区块链技术管理分散计算资源的方案,本质上仍是利用了基于区块链的虚拟货币系统作为结算手段来激励资源共享行为,但对于如何利用区块链技术实现去中心化的可信资源分配,未进行深入和具体的研究和设计。另外,以上研究大多基于以太坊平台,本质上是运行在以太坊平台上的去中心化应用(Decentralized Application,DApp),缺少独立于现有区块链平台的、系统性研究的支撑。本文旨在设计一种独立于现有平台的、基于区块链的、去中心化的可信边缘计算资源分配方法。

2 基于区块链的边缘计算资源分配方法

2.1 资源管理结构

对于边缘计算资源分配方法的总体结构设计,不同于图2(a)所示的一般中心化方案结构,其中所涉及工作都由单一的控制实体负责,虽然可能会设置中间层来负责与底层终端设备的直接交互工作,但是本质上仍是中心化的管理方案,不能避免上文提到的有关中心化方案所面临的问题。在本文方法的设计中,如图2(b)所示,所有参与者都通过对等网络,以点对点通信的方式进行交互来完成资源分配工作。为了保证工作的顺利进行和可信资源的分配,需要由网络中所有的参与者共同维护一个账本。账本用于记录有关资源分配的关键信息,记账的工作由系统中的管理节点负责,而管理员本身可以由任何有能力的参与者担任,其记账权根据共识协议而非其固有身份属性决定。因此,本文方法是完全的去中心化的方法。

图2 边缘计算资源分配方法的总体结构Fig.2 Overall structure of edge computing resource allocation method

本文方法中的参与者主要包括3种角色,分别是资源提供者、资源请求者和管理员,其中,资源提供者是指拥有空闲计算资源的边缘设备,其参与目的在于贡献空闲资源。为此,其根据自身资源情况向网络中广播资源发布消息(Resource Announcement Message),消息描述了资源的可用性信息;资源请求者一般指拥有无法独立完成的计算任务的边缘设备,参与的目的在于为计算任务的顺利执行而请求资源协助。为此,其通过网络收集上述资源信息,并合法地对可用资源发出请求,即资源请求消息(Resource Request Message);管理员类似于比特币系统中的“矿工”,负责收集和验证网络中的资源请求消息,而资源请求消息则类似于比特币系统中的“交易”,通过验证的“交易”被打包成区块并发布到网络中,接受其他节点的验证。当区块被其他节点接受并加入到最新区块链的末端,即代表全网根据其中所包含的“交易”内容达成共识,实现资源分配。记录的“交易”信息指示了资源分配关系,各参与者将根据这些信息进行下一步操作。

关于参与者的身份验证,本文引入一般区块链系统所普遍采用的非对称加密体系,为每个加入到网络的参与者分配公/私密钥对,公钥用作身份标识,私钥生成数字签名用于验证身份的真实性。

2.2 资源分配与交易

如2.1节所述,在本文方法的设计中,“交易”本质上为在网络中传播的资源请求消息,当这类“交易”信息经管理员验证并记录到区块链中时,意味着资源分配的完成,而“交易”信息指示了资源分配关系。具体地,资源请求消息由资源请求者对带有资源提供者签名的资源发布消息及其欲请求的资源量信息再次签名来完成。其中资源发布消息由资源提供者签名并发布,消息包含了资源的可用性信息,具体如下:

Provider:资源提供者身份标识;

Volume:资源提供者可以提供的资源总量;

startTime:资源可用开始时间;

endTime:资源可用结束时间;

Timestamp:消息发布时间戳;

Sign:数字签名,用于确认提供者身份。

当资源请求者在网络中收集到这一类资源发布消息时,其根据自身所需,针对指定的资源发出资源请求消息,即本文方法中的“交易”,具体包含:

resourceInfo:所请求资源信息,即上文中由资源提供者发布的完整的资源发布消息,这里简单使用一条字段代指;

Requester:资源请求者身份标识;

Volume:请求者所请求的资源量;

Timestamp:交易发布时间戳;

Sign:数字签名,用于确认请求者身份。

如上所述,资源请求消息作为“交易”由资源请求者发布并在网络中传播。与此同时,管理员在网络中收集并验证这一类“交易”,其验证工作具体如下:

1)通过请求者的签名验证消息内容的真实性;

2)通过消息中资源信息部分所包含的资源提供者的签名验证所请求资源的真实性;

3)回溯区块链,检查是否已有包含此消息的区块存在,避免重复打包;

4)根据消息发布时间戳和所请求资源的可用时间范围信息,判断该请求的有效性,资源提供者无法在时间限制范围之外的时间提供资源;

5)回溯区块链,遍历所有以往对资源发出的其他请求信息,计算并判断其目前剩余的可用资源总量是否仍满足本次交易中请求者所请求的资源量,避免资源的过度分配。

对于通过验证的资源请求,管理员将其加入正在组装的区块中,根据共识协议,一旦获得出块权便将区块发布到网络。具体的区块的构造如图3所示,基本与比特币系统中对区块的构造类似。

图3 区块组成Fig.3 Block composition

以假设使用类似于比特币工作量证明的共识机制为例,管理员在收集和验证网络中的交易信息的同时,将通过验证的交易组装成区块,并不断尝试一次性数(Nonce),一旦包含该一次性数的区块头的哈希值小于规定目标值(Target),管理员将该区块广播。其他管理员接收并对区块进行如下验证:1)检查区块引用的上一个区块是否有效;2)检查区块的时间戳是否比上一个区块大;3)检查区块的工作量证明是否有效;4)检查区块所包含的交易的合法性。

若验证通过,则管理员将接受该区块,将其加入本地区块链并在其后尝试制造新块,即视该块的区块头哈希值为新区块应包含的父区块哈希值。至此,区块中所包含的请求信息成功被记录到区块链并且被认为是可信的,这意味着资源分配的实现。根据链上所记录信息,当资源请求者向资源提供者发出资源访问请求时,后者可以根据前者所提供的链上信息索引及其身份标识验证该访问请求的合法性。若为合法访问,则资源提供者必须响应,并提供相应的计算资源。本文方法的研究范围为:从参与者发布资源和请求消息,到管理员验证并将合法的请求消息作为“交易”记录到区块链,最后资源提供者根据链上信息对来自资源请求者的资源访问进行合法性验证为止。至于具体的资源访问过程及其后一系列操作属于访问控制和其他研究领域,暂不在本文方法的研究范围之内。在本文方法的仿真实现中,仅需简单模拟相关的验证过程以证明所设计方法的可行性和正确性即可。

2.3 方法分析

本文方法摆脱中心化模式的做法,将资源分配的工作分散,由参与者自行通过对等网络互相通信来完成,以此摆脱传统信任模式和单点故障所带来的不利影响。同时使用区块链技术,记录有关资源分配的关键信息,保证了资源分配的可信和可靠。

在本文方法中,所有资源请求及其中所包含的资源信息都必须通过其他节点的验证后记录到区块并得到全网共识,区块随时间不断累加且有序链接,对其中任何一个区块内的任何数据任何修改都会影响该区块以及链接在其后的所有区块内容的变化。因此,区块链技术保证了资源分配过程中相关信息的可信和安全存储。

在保证资源分配有关信息的可信存储的基础上,资源提供者可以根据区块链上记录的相关信息,验证来自其他参与者资源访问请求的合法性。以此,可以避免参与者对资源的非法访问和过度使用。

由于多数参与者都为资源受限的边缘设备,管理员为了验证、记录并维护资源请求消息,需要保存完整的区块信息,而其余参与者只是利用了查询功能获取链上数据来进行一些验证工作。因此,在本文方法中,除了管理员作为全节点需要保存完整的区块内容外,其他的参与者只需运行轻节点,即仅存储区块头信息。如当一个轻节点用户想要验证某个资源请求的合法性时,其可以从任意一个管理员处获取Merkle Proof来进行验证,而无需保存完整的区块链副本。以图3的区块结构为例,其中的第1个资源请求(编号为0)的Merkle Proof即为“哈希值1”和“哈希值23”。具体验证方法如下:

1)根据该资源请求消息记录计算出其哈希值(哈希值0)。

2)将哈希值0与Merkle Proof(哈希值1)拼接并算出新的哈希值(哈希值01)。

3)将哈希值01与Merkle Proof(哈希值23)拼接算出最终的根哈希值。

4)将算出的根哈希值与自己保存的块头信息中的根哈希比对来判断其真实性。

因此,这种简单验证的方法可以增强本文方法的可行性。

3 边缘计算资源分配的实现

3.1 实现架构

为实现本文基于区块链的边缘计算资源分配方法,需要解决3个问题。首先,如何实现底层区块链网络的问题;其次,如何实现参与者对于资源和资源请求信息的发布及其有效存储的问题;最后,为了提高系统的可用性,使其满足实际应用的要求,如何提高资源请求处理的效率,提高系统吞吐量。针对上述问题,本文设计了基于以太坊平台及其所支持侧链技术的实现方案。该方案主要实现了3个功能,分别为资源和资源请求信息的发布、对资源请求的验证和存储以及基于链上所存储信息的相关验证功能,并且配以可视化的前端页面设计,方便用户使用以上功能。具体的系统参与者操作过程如图4所示。

图4 系统参与者操作过程Fig.4 Operation process of system participant

在实际部署和使用智能合约时,利用侧链技术将所设计智能合约部署在以太坊主链之外,即在侧链上运行智能合约,以摆脱以太坊主链对使用效率的限制,大幅提高系统吞吐量,并且可以有效降低成本。实现架构主要由以太坊主链网络、以太坊侧链网络、智能合约和应用程序前端组成,如图5所示。

图5 实现架构Fig.5 Implementation architecture

首先依赖以太坊平台可以实现底层区块链网络的搭建,各参与节点可以通过以太坊客户端(如Go-ethereum,Get)参与到网络中,实现对各项功能的操作,并参与到区块链网络的维护中。

其次以太坊支持图灵完备语言编程的智能合约(一种持久性的自动执行脚本)。使用智能合约,一方面可以将所涉及的操作流程以代码形式写入智能合约,用户通过以太坊交易触发智能合约执行,实现对各种功能的操作,在此过程中,管理员的关键工作在于负责合约的具体执行以及维护合约作为以太坊内部账户的账户状态;另一方面,利用智能合约的存储功能可以存储由用户发布的资源及资源请求信息,即关于资源分配的“交易”信息,内容的存储同样以Merkle树的形式进行(具体为以太坊独有的改进的Merkle Patricia Tree结构),任何对其内容的改变都会影响合约账户的存储根值(Storage Root),进而影响合约账户的账户状态并最终影响整个以太坊的状态。因此,通过智能合约同样可以保证所记录信息的难以篡改性。

最后为了避免直接在以太坊网络上部署智能合约可能会面临的性能瓶颈问题,在本文实现方案中,智能合约被部署到侧链,而在主链部署一个对应的侧链合约,作为侧链与主链之间的桥梁。本文方法所涉及参与方主要依靠侧链实现交互,所产生的资源和资源请求等业务数据在侧链上被处理并记录在系统账户中。同时,通过与主链上的侧链合约(账户)的连接和交互,定期地将侧链上更新的数据同步至主链(为保证性能,仅上传侧链中区块数据的Merkle根值,如图6所示,其可以唯一标识区块中所包含的所有更新的用户状态),以充分利用以太坊主网络带来的强大安全性保证。当发现异常时,侧链上的用户可以向主链发出验证查询和挑战。

图6 侧链数据存证Fig.6 Deposit of side-chain data

在区块链网络运行正常、合约部署成功且被正常执行的情况下,参与方可以基于前端页面实现资源和资源请求信息的发布以及相关的验证工作。

3.2 仿真实现

根据以上分析,基于以太坊区块链平台的边缘计算资源分配的实现流程如下:

采用XRF法[15]检测样品(NaCl、城市固体废弃物模拟组分和厨余沼渣)中的Cl含量;取约3 g样品,分别将硼酸和样品用压片机(10 MPa下恒压30 s)压制成片放入 XRF仪器中,测定其中的 Cl含量。

1)参与各方需要注册成为以太坊区块链平台用户,注册可以获取一个公/私密钥对,公钥作为用户的身份标识,私钥可以生成数字签名用于身份验证。

2)参与各方通过约定共同制定一份智能合约,合约中规定了发布和存储资源及资源请求信息的执行逻辑。写好的合约将被部署到侧链,一旦合约成功部署,便不可更改。具体的侧链实现方法则采用以太坊所支持的Loom Network(LN)。使用Loom SDK部署智能合约,其将为合约单独创建一条专用的DApp链,参与者将在该专用链上通过合约实现相关功能的操作,而避免与主链上的用户竞争资源,大幅提高系统效率。

3)合约一旦部署成功,参与者通过前端页面输入相关数据,可以向目标智能合约发送资源发布消息和资源请求消息,这些消息本质上具有参数(资源信息和资源请求信息)的交易。

4)管理员收集网络中的相关交易,并执行交易所触发的智能合约。新的资源和资源请求信息由此存储到了智能合约中,这将导致合约状态发生变化。通过运行共识机制,管理员以区块形式将更新后的合约状态发布出去,其他管理员验证合约的执行并同步合约的最新状态。当全网的合约状态达成一致,即代表新的资源和资源请求信息成功存储至区块链,资源分配工作完成。

5)DApp链定期与以太坊主链进行数据同步,将一段时间内智能合约中更新的数据上传至主链进行存证。具体是通过以太坊交易的形式,将侧链中更新的区块的哈希值存入主链中的DApp合约账户中进行锁定。数据的可信存储由以太坊底层网络及其共识协议保证。侧链用户可以通过查询主链锁定数据进行相关验证工作。

6)以上操作包括资源请求者可以对指定资源提供者发出资源访问请求,以及资源提供者可以根据链上信息验证来自各方的资源访问请求的合法性,皆可通过前端页面完成可视化操作。

为了评估本文所提出的方法的正确性和可行性,本文建立以太坊私有链网络来模拟真实应用环境。通过基于Solidity语言的智能合约编写以及基于NodeJS的前端开发,并使用Loom Network将合约部署到专用的DApp链,实现对主链计算工作的卸载。

4 实验与结果分析

4.1 实验环境搭建

4.2 实验过程与结果分析

在完成Loom安装后,首先使用Loom init和Loom run命令初始化DApp侧链。然后使用Truffle unbox webpack命令从Truffle官网获取空项目。合约的编写使用Solidity语言,合约源码存放于以.sol为扩展名的文件中,文件放置于contract文件夹中。合约编写完成后使用truffle compile命令编译代码,编译生成以.json为扩展名的字节码文件存放于新生成的build文件夹中。为了使Truffle连接到侧链,首先需要通过npm install loom-truffle-provider-save命令安装一个Loom Truffle Provider,然后修改truffle.js进行相应的配置。成功配置后,使用truffle migrate-network loom_dapp_chain命令将合约部署至侧链,这一过程将消耗燃气值(以太币)。

资源信息的发布如图7所示。用户通过输入资源总量信息(简单用数字表示)以及资源可用的开始时间和结束时间,点击确定按钮生成资源发布消息,消息的其他数据如时间戳和签名等由系统自动生成。消息将触发智能合约,执行的结果是将消息包含的资源信息存储到智能合约中,并且系统会自动计算出一个资源ID以唯一地标识资源,ID具体由资源提供者身份标识和消息发布时间戳计算哈希得到,具体后台数据如图8所示。

图7 资源信息的发布Fig.7 Announce of resource information

图8 资源信息记录Fig.8 Records of resource information

对于发布资源请求信息,过程与发布资源信息类似,如图9所示,用户通过前端页面输入所要请求的资源的ID以及所需资源量,点击确定按钮生成资源请求消息。系统将通过资源ID检索到对应资源信息(如果存在),并且判断其剩余资源量是否能满足该请求以及请求发出时间是否在资源的可用时间范围内。合法的资源请求将被记录到智能合约中,即实现数据的“上链”,具体后台数据如图10所示。在本文方法的设计和实验中,假设用户可以以某种方式获取到已发布的包括资源ID在内的资源信息,则应着重关注于针对已获取到的资源的请求及请求信息的存储。

图9 资源请求信息的发布Fig.9 Announce of resource request information

图10 资源请求信息记录Fig.10 Records of resource requests information

当资源请求通过验证成功记录到区块链上时,资源请求者可以凭借相应的资源请求记录的ID信息向指定的资源提供者发出资源访问请求。根据到达的访问请求以及区块链上的资源请求信息,资源提供者可以对访问请求的合法性进行验证,即通过请求者身份标识信息以及资源请求ID信息,查询并验证是否存在这样一个资源请求,其中的请求者身份与当前访问请求者的身份相符。若验证通过,资源提供者将向其开放部分资源。若请求者身份信息有误或者根本没有这样一条资源请求信息的记录,则验证不通过,资源提供者将拒绝该请求。

上述实验说明了本文所提出的资源分配方法可以以去中心化方式顺利进行资源分配,确保有关资源分配的关键信息的可信存储,以此有效防止对资源的错用和滥用,实现可信的计算资源分配。本文实验基于本地测试网络进行,在正式应用时需要根据真实网络环境进行相应的调整。

5 结束语

本文针对传统中心化方案的单点故障及信任问题,提出一种基于区块链的去中心化资源分配方法。以去中心化手段对资源分配过程中所涉及的关键信息进行验证及存储,达到以可信方式去中心化控制分配过程的目的。同时,使用以太坊及其所支持的智能合约技术对本文方法进行实现,并运用侧链技术对以太坊扩容。下一步将针对现有主流共识机制进行研究,改进工作量证明共识机制,以更加完善本文去中心化的资源分配方法。

猜你喜欢
侧链以太提供者
酞菁锌的侧链修饰及光动力活性研究
以太万物理论概述
网络交易平台提供者的法律地位与民事责任分析
基于隐私度和稳定度的D2D数据共享伙伴选择机制
含聚醚侧链梳型聚羧酸盐分散剂的合成及其应用
车易链:做汽车业的“以太坊”
梳型接枝PVC的性能研究
网络言论自由的行政法规制研究
紫杉醇C13侧链的硒代合成及其结构性质
A Study on the Contract Research Organization