基于区块链技术的电力物资共享云仓设计
2023-11-14王光辉程功旭
王光辉,程功旭,李 青
(1.郑州大学信息管理学院,河南 郑州 450001;2.国网青海省电力公司调度控制中心,青海 西宁 810001;3.南瑞集团有限公司电网事业部,江苏 南京 210000)
0 引 言
近年来,国家提出建设泛在电力物联网是落实“三型两网、世界一流”战略目标的核心任务[1]。泛在电力物联网[2-3]指任何时间、任何地点、任何人、任何事物的信息连接和交互,而电力资源供应链的建设是泛在物联网构建的重要环节。
供应链信息的共享可以促进经营主体之间的相互监督,促进供应方供给能力与需求方具体需求的透明化。比如现在的ERP 系统、e-ERP 系统已经实现供应链部分业务环节间信息共享与相关业务的整合[4],但是上述系统对不断变化的需求与决策响应较为困难,没有从供应链整体角度进行信息和业务的整合与协调[5-6]。
目前,现有供应链系统的业务内容与业务链路相互独立,业务主体之间的监督不足。例如在一些供应链中,物资需求方监督供应商或发电厂,但这种监控是单向的[7-8],从整个供应链来看,各业务主体之间还缺乏集团化、多方位、开放式的相互监督,不同业务间的信息流交互性差、实时性差,对整体运营效率有很大影响。经过分析研究,提取出现有的电力物资备品供应链信息传递的拓扑结构如图1所示。
图1 供应链业务实体业务信息传递图
从图1 中可看出供应链中供应商与卖家、卖家与客户之间业务相互独立,有独立的交易平台,每个业务实体只能关注与自身事务相关的供给信息,产生的弊端是每个业务实体很难了解完整的供应链结构与运作。这种电力供应链模式集成协调能力差、信息共享能力差,整体效率降低,若对电力物资数据进行存储与追溯,存在着供应链各环节信息不共享、引发数据信息孤岛或数据造假等问题[9-10]。
为避免供应链信息未共享产生的信息不对称问题,现有电力系统研究者利用区块链技术的信息透明性、可追溯性来解决这一问题,但区块链技术具有多个区块节点与共识节点来共同存储数据信息,随着用户数据量的增多,区块链会出现高冗余存储问题,而区块数据存储空间大小也限制了区块链技术的发展[11]。
同样基于区块链技术的共享云仓涉及电力主体众多,一方面不同电力主体需要电力物资商品共享,供应链的各业务主体需要电力物资商品的生产数据、供应数据等信息的透明化共享,来解决物资上下游信息不对称问题,另一方面不同电力供应商间又处于竞争关系,存在信息隐私与财务数据的保护问题,因此共享云仓的设计需考虑信息数据透明化与部分隐私数据保护等因素,来构建完备的系统分级访问权限控制机制。
目前电力物资供应链底层平台难以处理高并发上链请求,若并发量太大,轻则区块链组网性能受到影响,重则导致共识节点宕机[12]。为保障电力物资共享云仓交易上链的可靠性,基于区块链技术的电力物资共享云仓的架构需考虑信息智能合约、流量控制、系统的容错机制方面的设计。
因此本文基于区块链技术构建电力资源供应链共享云仓,为促进企业主体之间的互相监督,促进供给侧供给能力与需求方具体要求的透明度,实现电力资源信息共享与供需精确对接,设计以信息共享思想为核心的供应链架构;考虑外部多源数据信息的存储,提出一种供应链内部与外部多源数据信息块的记录方法,实现数据信息的安全存储;考虑云仓系统访问权限控制机制,构建各主体的访问分级权限机制,来解决主体间权限访问透明性低问题;考虑信息技术智能合约制定与上链交易请求的可靠性,设计信息智能合约,并针对高并发的交易上链请求影响区块链组网性能问题,提出一种流量控制算法,提高共享云仓的可靠性。
1 基于区块链的电力物资共享云仓构建
共享云仓平台利用互联网、物联网、二维码等信息化技术手段,联接了电力企业、设备供应商、区域仓储平台、区域分库以及急救包等多方主体,对互联网电力企业的设备采购、设备需求信息的生成、库存合理性审核、设备调配、物流配送等全流程进行信息化管理,实现互联网电力企业的设备需求信息在多主体、多环节间的流通。云仓平台各环节流通流程如图2所示。
图2 互联网电力企业共享云仓
针对涉及多主体信息不对称、共享能力差、多源数据存储高冗余、主体间权限访问透明性低、高并发的上链请求性能低下等问题,应用区块链去中心化的对等网络及多方共识机制的特点,为每个交互主体建立区块链共识节点,记账、共享设备流转相关信息,为设备需求信息发布、设备采购、订单审核、企业支付、设备调配、物流配送、订单解算等过程提供上链存证,使电力企业、设备供应商、区域存储平台、区域分库等主体之间实现设备信息的可信共享,提高企业主体进入供应链的灵活性,促进供应链对企业主体的动态、精准选择[13-14],同时监管节点服务,设计智能合约使监管机构能够对设备流转与生产过程信息进行全程监管,保障设备流转的合规性与完整性。具体基于区块链技术设计的电力物资共享云仓架构如图3所示。
图3 区块链的电力物资共享云仓架构
1)应用层。
基于区块链技术的电力物资共享云仓架构的应用层为各发电企业和供应商提供数据接口,建立备品储备数据的标准数据模型,并提供数据上传接口,各发电企业和供应商将自身原有物资备品管理系统数据信息通过接口对接或录入的方式进行备品储备数据上传。同时该应用层设置界面,发电企业可通过登录该平台进行备品储备信息查询。
2)业务层。
系统在业务层建立数据标准化检测机制,对输入的备品对象数据进行有效性检测,以保证在物资备品信息管理系统中数据的标准化,同时将数据模型的结构上链存证,作为数据格式的检测依据。在电力行业备品种类繁杂、设备多样的环境下,实现数据有效共享和可靠溯源。定时进行库存数据变化捕捉、集中汇总,完成信息的共享。建立调运流程,实现调运需求和调运订单管理。发电企业可根据物资需求填报调运申请单,申请单中的与需求物资对应的备品信息可通过用户自行检索进行匹配,也可通过平台对调运需求物资进行数据分析,智能匹配与需求相符的备品信息。
3)服务层。
服务层主要负责校验物资需求方与备品供给方的数据请求信息,记录与存储供给方与物资需求方的交易操作内容。比如:物资需求方和备品供给方根据调运订单约定信息执行备品调运,调运期间服务层需要校验需求方上传的备品采购合同、付款凭证,验证备品产权方上传的到货签收单等物品信息,云仓的服务层有效记录、分类、存储采购合同、付款凭证与签收单等数据信息。
4)区块链技术层。
区块链技术层是区块链电力资源共享云仓的底层技术,主要包括记录数据、存储数据、区块链网络节点交互、业务主体访问权限控制、数据传播与数据上链,是共享云仓最关键的运行模块之一。
区块链技术层针对数据存储、访问控制机制、流量控制、上链效率控制存在的问题,提出一种供应链信息流层次模型,划分为数据存储层、访问控制层、共识合约层[15-16]。
数据存储层将区块链系统中的数据信息进行划分、存储,由于数据记录存储过程中存在像物资需求方、备品供给方提供的多源数据信息,而多源数据信息的收集、过滤、清理、分析与汇总又是一项复杂的任务。同时数据信息具有多源异构、复杂繁琐的特点,现有的区块链存储结构存在存储不足与存储效率低下的问题[17-18]。因此共享云仓架构设计数据层方面,考虑到多源数据存储问题,首先将多源异构数据通过数据分析中心模块进行整理分析,输出不同类型的数据信息映射到区块链中对应块的块体上,保证区块链和供应链管理的基础数据分开存储。将区块链技术与Merkle 树、数据库进行结合,提出一种多源数据信息块的记录方法,确保区块链容量小、易于构建和管理。
访问控制层作为区块链技术中主体访问控制权限模块,既要解决物资上下游信息不对称问题,又要实现保护业务主体隐私数据与财务数据的功能。访问控制层由主体节点、访问节点、授权节点组成。主体节点主要由供货商与需求方控制,通过与数据存储层进行数据交互,上传、查看、下载电力资源信息;访问节点主要处理主体节点的访问请求,运行访问控制权限模型,实现业务主体间的信息共享;授权节点负责记录访问节点的运行日志,并管理访问控制链,授权合规请求,为供应链业务主体提供历史授权的数据追溯。
共识合约层是维持区块链系统中的共识节点达到信息一致性,比如调运订单执行过程调用区块链备品资产转移智能合约,调用该智能合约[19]需要传入备品备件的ID 与备品需求者的身份标识ID,该智能合约会检测该设备当前在链上的所有权是否跟调用者一致,只有在一致的情况下才能发生资产的转移。同时系统全流程数据上链,每次上链的数据对应的存证ID 建立一个数组索引,根据区块链的特性,用户只需要通过调用查询数据溯源的智能合约就可以调取某个设备所有上链数据,从而实现备品的溯源查询。
同时,若出现数据上链请求过大,处于高并发情况下,区块链节点性能会受到影响,本文提出一种处理高并发数据上链请求的流量控制算法,以更好满足系统数据层的高可靠、高效率运转。
5)安全层。
云仓的安全层主要提供数据加密、解密、密钥托管、随机密钥生成等功能,提供流程化加密方案,用户可定制加解密流程中的密钥生成、加密算法、解密算法。上链数据信息包括供应商数据(供应商名称、地址、联系方式、供应备品备件数据参数)与各级仓库数据信息(名称、地址、联系方式等信息)采用非对称加密技术对数据安全进行保障。
2 电力物资共享供应链信息数据存储
供应链业务决策活动依赖的数据主要包括供应链系统运行产生的内部数据与外部引入的供货商电力资源数据。对供应链依赖的多源异构数据的收集、过滤、清理、分析与汇总是一项非常复杂且艰巨的任务。若供应链业务的管理活动都由业务主体来处理时,效率极低。因此,为高效完成多源数据处理任务,在构建电力物资共享云仓阶段,搭建一个多源数据分析中心模块,整理、分析、汇总外部来源的多源数据,比如各发电企业的物资备品、供应商的物资备品、需求方的物资采购项等数据信息,具体设计的多源数据分析中心的数据处理如图4所示。
图4 多源数据分析中心数据处理
交易过程中,若需求方需要了解供给方上传的物资备品,首先需求主体向系统发出查询请求,系统向供应链管理系统发出指令,来分析物资备品信息。供应链管理系统的认证机构将按照既定的规则将信息收集需求传递给外部多源数据分析中心。多源数据分析中心将根据信息采集需求确定采集与处理的数据信息。最后,相关的结果信息返回到供应链中的每个认证机构,认证机构将在区块链系统中广播供应商的相关结果信息。区块链系统中的其他认证主体(包括需求方)将对广播信息进行认证和分发。
本文以供应链企业中的需求方选择电力供给方为例,图5 显示了供应链管理中内部和外部多源数据的块记录、分析与分类以及区块链生成的方法。如图5 所示,不同类型的基本数据存储在不同的数据存储主体中,例如不同的数据库。将不同类型的数据映射到区块链对应块的块体上,保证区块链与供应链管理的基础数据分开存储。不同类型的数据信息按类型分别存储,实现了区块链管理的便捷性,确保区块链容量小、易于构建和管理。不同类型数据管理的有序,也可通过相应的映射关系实现区块链系统与供应链管理数据系统之间的逻辑完整性。
图5 多源数据分析中心数据处理
而多源数据分析结果传递至供应链管理系统时,备品信息等数据结构需记录与存储,本文结合Merkle树[20]提出一种多源数据信息块的记录方法。具体的数据结构一共分为5个模块,如图6所示。
图6 多源数据分析中心数据处理
1)数据层。
接收电力物资供应链相关的数据信息。
2)Merkle分类树主干层。
不同分类数据构成不同的Merkle树,不同类的数据信息存储在不同Merkle树,互不干扰。
3)Merkle分类树根层。
与分类Merkle 树块层不同,该层存储每个不同Merkle树的数据源,类似于数据指针的模式。
4)目录层。
这一层根据基本数据对应不同的Merkle 树根分类。根据电力物资共享平台的实际需求设置层,每N个分类Merkle根计算一个总的Merkle根。
5)区块链顶层。
系统为目标层所有的Merkle 树根计算一个总的Merkle 树根哈希,区块链包含Merkle 树的根,还包含前一个区块链顶层的哈希值、版本号、共识身份验证参数、时间戳等信息。
这种存储方式可确保数据信息的完整性、便捷性、可分类性,只需确认区块链头部的Merkle 树根哈希的正确性,便可校验底部的数据层与Merkle分类树主干层的信息是否被修改,实现本次电力物资交易系统的安全存储。
3 电力物资共享云仓系统访问权限控制
不同的电力企业与设备供货商对供应链中的信息有不同的需求,为了供应链中的信息安全,有必要对各个企业的信息访问权限进行管理。本文选择RBAC1[21]作为信息共享方案的访问控制模型。RBAC1 包括5 个基本数据元素:用户、角色、目标、操作和权限。利用权限与特定角色关联的方法,只需为用户指定特定的角色就可以实现权限的分配,大大降低了大型系统中访问权限管理的复杂性。通过角色分类对各企业进行信息访问管理,本文采用RBAC1模型对企业的接入权限进行管理。RBAC1 模型的权限配置使系统管理员既拥有电力企业与设备供货商等管理权限,又能扩展交易与供货相应的职能权限。RBAC1 模型中存在2 种映射关系,即用户-角色映射和角色-权利映射。供应链的用户多为供应链企业,其角色包括设备供货商、电力企业、区域仓储平台商与需求方等。访问权限是指企业可以访问的数据范围。访问控制模型如图7所示。
在供应链中,一个企业可能涉及多个生产环节,甚至单个生产环节也需要各种各样的信息。因此,在访问权限的管理中,企业与角色之间存在多对多的关系,角色与访问权限之间也存在多对多的关系,并且可以对企业进行分级,将不同的访问权限分配给具有相同角色的企业。
4 电力物资共享云仓信息智能合约制定
在供应链企业间的信息共享过程中,需要对企业间的交互操作进行管理。信息智能合约的主要任务是对信息共享过程中各种操作的有效性进行验证,并根据结果执行相应的操作[22]。
供应链企业调用信息智能合约,按照交互规则向信息链发送产品信息、产品类型等。之后,信息智能合约会根据产品信息的数据库表和企业的访问权限来判断操作是否合法。首先制定产品信息的数据库表SupplyTable,其中包含原材料信息、供应企业编号、企业名称等信息,具体定义如表1所示。
表1 供应商品数据库表的定义
具体的供货商提交供货商品信息的智能合约算法见算法1。
算法1信息提交算法。
输入:设备供货商提交产品信息A。
输出:如果信息与权利一致,则消息将存储在信息链中;否则,请求将被拒绝。
1. 设备供货商调用信息智能合约向信息链发送信息结构体A;
2. if StructA== SupplyTableA
3. 对数据结构体A的格式进行验证
4. 如果符合要求,则在信息链中存储一条信息A;如果没有,拒绝请求;
5. else return
6. end if
供应链企业在获取信息的同时,按照交互规则向信息链发送所需的目标信息。信息智能合约将验证应用程序与请求方权限,并根据结果执行相应的操作。算法见算法2。
算法2信息需求获取算法。
输入:需求方提交产品信息获取请求B。
输出:如果应用内容与权限一致,则将消息发送到需求方节点;如果没有,则拒绝申请。
1. 需求企业调用信息智能合约发送信息查询应用程序B;
2. 信息智能合约获取需求企业的公开key地址,查询信息数据库表中是否存在,pubkey=msg.sender;
3. 获取需求企业的权限,purview[pubkey];
4. if purview[pubkey]=Table_Enterprise_purview
5. 信息智能合约检查目标信息合约权限是否存在;
6. 如果存在,则发送许可请求给需求企业,并将此应用操作保存在信息链中;如果没有,则拒绝请求;
7. else return
8. end if
5 电力物资共享云仓交易上链可靠性设计
目前的物资供应链底层平台难以处理高并发上链请求,若并发量太大,轻则区块链组网性能受到影响,重则导致共识节点宕机。为保障电力物资共享云仓交易上链的可靠性,本文监控底层区块链节点的吞吐量,提出一种交易量控制算法,将共享云仓的上链交易请求压力控制在可控范围内,使供应链区块链节点性能与资源利用率达到最高,维持电力物资共享云仓的高效率运转。
本文监控区块链节点的吞吐量[23],提出的交易量控制算法具体思路为:电力物资共享云仓运转时,首先确定系统效率达到最大的负载值,并确定系统安全运转状态下的最小负载值。基于最小负载值,逐渐对控制流量进行增加,增大对区块链系统的资源利用率,实时监控底层区块链节点的吞吐量。若监控性能指标处于逐渐上升的状态,代表物资共享云仓的资源还有进一步的利用空间,再逐渐增加上链交易请求的流量数,直至监控区块链节点的吞吐量性能处于下降状态,代表共享云仓系统已进入负载上限区域。这时候基于当前负载值,逐步控制上链请求量的减少,减小对区块链系统的资源利用率。实际云仓的交易请求压力分布并不是处于均匀分布的,需要针对实际交易请求设置安全阈值,当超过安全阈值时,缓慢增加云仓的上链交易请求,直至再次监控到资源信息共享云仓的性能指标下降。这样,当共享云仓积压的上链交易请求过大时,通过这种逐步增加上链请求,逼近云仓性能负载拐点区间的方式,可以将区块链系统效率利用率维持在高效区间,即使当系统积压上链请求过大,并发量较高时,也不会导致区块链底层节点宕机的现象。
本文提出的算法只在并发量过大、交易请求堵塞时运行,若日常交易量较小,系统处于正常运转状态。每次交易环节进行中,系统会实时监控当前的吞吐量,并根据连续3 次的吞吐量变化进行处理效率的判断,并设置2 个安全阈值。若判断处理效率仍处于上升状态,系统认为交易上链请求仍处于可负载范围内,判断当前的吞吐量是否超过安全阈值1,若未超过安全阈值1,系统采用指数增长策略,快速运转系统,若超过安全阈值1,则采用线性增长策略;若连续3 次判断处理效率处于下降状态,且超过安全阈值2,则需要立即降低上链交易请求量,直至再次监控到资源信息共享云仓的性能指标下降。具体的安全阈值1与安全阈值2的比例为0.5和0.75。
针对高并发上链请求,本文提出一种交易量控制算法,虽能有效将共享云仓的上链交易请求压力控制在可控范围内,使供应链区块链节点性能与资源利用率达到最高,但会导致系统的可用性降低。当然相比于系统宕机、服务不可用,这种系统的有损算法是最好的解决方案。如何将损失降到最小?答案是降低系统的响应时间。
当电力物资共享云仓上链交易请求时,首先监控系统的请求量,确定出系统效率达到最大的负载值,若交易量不超过安全运转状态的最小负载值,则正常进行区块链上链交易请求的流程,确保交易正常运转;若交易量处于安全运转状态的最小负载值与最大负载值之间,采用本文提出的交易量控制算法,维持供应链节点性能达到最大,避免区块链组网受影响或宕机现象;若请求并发量远远超过系统的最大负载值,将共享云仓系统进行分布式部署,提高系统的可靠性与可用性,缩短系统的响应时间;若请求并发量已经超过分布式系统的最大安全负载,当然该现象在电力系统供货链交易过程中,出现的概率极低,首先对共享云仓分布式系统服务进行降级,采用屏蔽降级与容错降级策略,同时采用本文提出的交易量控制算法,保证系统的可用性,不出现服务宕机现象。
6 实验与结果分析
基于Hyperledger Fabric 区块链平台[24]实现电力系统资源共享云仓的构建,并利用Fabric tape工具进行性能测试。处理器为Intel Xeon E5-2620@2.00 GHz,内存为64 GB。
6.1 分级控制
以宁夏国网电力供应链调度场景为例进行分析。实际设计的区块链网络包括供给方、电力企业、供货仓库、电力调度中心、需求方等主体。首先确认区块链节点的分级控制权限。根据实际的共享云仓电力物资供应场景,按实际的商品信息隐私程度分为3类。具体的分级控制等级如表2所示。
表2 共享云仓信息等级权限
根据权限等级,供给方、电力企业、供货仓库、电力调度中心、需求方等主体,在共享云仓中具体的分级访问控制如表3所示。
表3 共享云仓主体的分级控制
6.2 系统容错分析
系统的容错能力是指系统在受到恶意节点攻击时仍能保持正常运行的能力[25]。综合考虑实验效果与设备性能,将系统节点总数设置为120 个。恶意节点数由1增加到100,步长为1。对不同数量的恶意节点进行重复实验,得到不同状态下的系统攻击成功率。为验证本文的容错能力,与实用拜占庭算法[26]进行对比验证。具体的容错实验如图8所示。
图8 共享云仓的容错能力
实验结果表明,攻击成功率随着恶意节点数量的减少而降低。当恶意节点数量小于39 个,即恶意节点数量小于恶意节点总数的33%时,2 种系统中恶意节点攻击成功率接近于0。一般情况下,恶意节点数量超过节点总数1/3 的概率较低,系统具有较好的容错性能。而随着恶意节点的数量不断增加,与实用拜占庭算法相比,本文构建的云仓系统攻击成功率的上升趋势相对平缓,直到节点数超过88 个,系统才完全攻破,已超过总数量的88%,表明系统具有较好的容错性能。
6.3 性能测试
系统吞吐量表示系统在单位时间内可以处理的信息量。本文采用每秒事务数(tps)作为系统吞吐量的评价标准[27]。实验以系统节点数为变量,节点数从10增加到120,步长为10。在不同节点数下进行重复实验,最后取tps 的平均值作为该节点数下的系统吞吐量值。结果如图9所示。
图9 共享云仓的吞吐量分析
根据实验结果,当节点总数小于20 时,系统的吞吐量呈加速上升趋势。随着节点数的不断增加,系统的吞吐量处于不断增长的趋势,在节点数为78 时,吞吐量达到最大。后续不断增加系统的节点数目,共享云仓的吞吐量稍有下降,直至增加到系统最大节点时,共享云仓的最低吞吐量仍能维持在150 tps以上,更能反馈出本文设计的共享云仓性能较为稳定。
为进一步验证本文提出的电力物资共享云仓交易上链可靠性设计的性能,构建出上链请求高并发的场景,区块链的非共识节点能够对底层区块链的并发量处于拥堵约束,避免高并发量区块链共识节点宕机的现象。因此,系统使用Fabric tape工具仿真不同数量的交易请求,测试系统的吞吐量,同时对比验证采用本文设计的交易量控制算法与未采用交易量控制算法,系统的吞吐量测试如图10所示。
图10 流量控制算法的云仓吞吐量值
由图10 可看出,随着一次性发送的交易量不断增加,未采用流量控制算法的共享云仓,当持续接收到高并发的上链请求时,系统的吞吐量处于先上升到峰值阶段,再不断下降的状态。分析得知,随着上链交易量的不断增大,基于区块链技术的共享云仓性能不断下降,特别是处于交易流量节点堵塞场景下,处理效率明显下降。而监控区块链节点的吞吐量,使用本文提出的交易量控制算法时,系统的吞吐量基本处于一个固定的区间范围内。可以预见,该系统遇到用户上链请求量足够大,所有上链节点全速运行时,区块链的非共识节点也能稳定控制系统的并发量,使系统保持稳定的处理效率,系统性能达到最优。
7 结束语
本文基于区块链技术提出一种电力物资共享云仓平台,面向实际的物资供应链场景,设计了一种共享云仓企业供应链架构,实现多主体多环节链路的信息共享。为安全存储商品信息数据,提出一种信息数据存储方法,有效对供应链外部多源数据信息的收集、过滤、清理、分析与汇总,以信息链为平台,通过部署信息智能合约,建立访问控制机制,将供应链参与者整合为一个信息共享系统,实现供应链信息管理和企业交互。交易授权过程透明可追溯,既能保证供应链的信息安全,又能实现企业高效便捷的信息共享。最后针对高并发的交易上链请求影响区块链组网性能问题,监控物资共享云仓区块链节点的吞吐量,提出一种流量控制算法,使区块链底层节点资源利用率达到最大。
实验结果表明本文基于区块链技术设计的共享云仓具有较好的容错性能与相对稳定的吞吐量处理性能,面向大规模交易请求时,可稳定控制系统的并发量,有较好的性能,在实际供应链应用场景具有可行性。