自适应打包:一种提高区块链共识效率的方法
2022-10-14杨国正陈嘉俊张少鹏钟礼斌
杨国正,臧 铖,陈嘉俊,张少鹏,钟礼斌,黄 蓉
(1.浙商银行股份有限公司金融科技部,浙江 杭州 311200;2.浙商银行股份有限公司区块链技术应用研究院)
0 引言
区块链被纳入“十四五”规划中,表明了国家监管与政策鼓励区块链技术发展在中国的数字经济中发挥关键作用的决心。
与欧美国家侧重公链区块链技术发展模式不同,我国区块链技术的发展大多基于联盟链的应用,利用区块链技术与传统行业的创新结合,解决问题、提高效率,从而赋能政府、企业的数字化转型,赋能实体经济。因此,我国大量区块链创新企业专注于寻找区块链与传统业务结合的创新点,专注于提高联盟链平台底层的效率以支持更多的应用场景。
以区块链基础技术平台为例,创新利用区块链自适应交易打包方法,根据业务场景对数据存储的需求对交易打包方法进行自适应配置,以提高在不同业务场景下的联盟链共识效率。
1 传统交易打包模式
区块链技术是一种分布式账本技术,同时也是一个点对点的协作网络。协作方节点共同维护数据,每个协作方节点都有一份完整数据,且所有协作方节点数据保持一致。这一切都需要依赖于区块链的共识机制。
共识机制是指所有协作方在节点的预设规则下,通过多个节点交互,对链上数据、行为或流程达成一致的过程。其步骤如下:协作方节点将区块(每个打包的交易叫做一个区块)分发到其他协作方节点进行共识验证,当大多数节点验证区块无误(即各个协作方达成了共识),其他协作方节点同步该区块。
这种协作方节点间达成共识的模式即为目前大多数联盟链平台采用的BFT 族共识算法,即拜占庭容错算法。拜占庭容错算法通过三个阶段的共识对交易哈希、运行结果进行三次比对,在三个阶段的共识全部通过之后,交易数据才会写入区块链账本。
图1 RBFT算法流程
交易打包为区块的条件有两个,打包时间(t)与交易笔数(n),即当交易达到打包时间阈值或者交易笔数阈值时,区块链平台将根据交易请求的先后顺序进行全部或者部分打包,进行共识。在传统的交易打包模式中,t 与n 参数在初始配置文件中进行配置,若想对参数进行修改则需要手动修改配置文件,并重启节点服务。
目前市面上大部分区块链节点均采用的是固定的配置文件。例如“基于区块链的交易处理方法”专利,节点在交易处理过程中,设定特定的时间间隔执行交易打包。该模式适合比较单一的应用场景。当需在同一个节点链上实现多种应用场景,数据上链稳定性和效率会受到影响。例如,在实时交易场景下,业务应用系统要求区块链平台的响应时间尽可能的短,即打包时间尽可能的短;但是在批量数据登记场景下,交易请求数量激增,如果打包时间设置较短或者交易笔数n 设置较小,会导致区块链打包区块数量快速增多。当区块产生的速度超过区块链平台区块缓存池上限时,区块数据会丢失,同时也会导致服务器资源使用急剧上升,使得数据上链效率降低。
2 自适应交易打包模式设计
目前,基于区块链基础技术平台(下称“区块链平台”)已实现多种应用场景,例如供应链金融、文件存证、日终批量数据存证等。在不同的应用场景下,其业务要求响应时效性和上链数据量具有较大差异,例如在供应链金融场景,会涉及到客户资产转让,资产质押等操作,对区块链平台响应的时效性要求较高。在日终批量数据存证上链场景,由于其数据上链并发量大且无时效性要求,可以牺牲一部分数据上链时效性,来保证节点服务的稳定性和上链数据不被丢失。为此,采用固定的区块链打包参数仅适合某一个特定的场景,并不适合多种场景的情况。
在此基础上,区块链平台创新开发了一种自适应配置交易打包方法,在控制交易打包的配置文件中设置了打包时间(t)、交易笔数(n)、打包时间初始值(P)与交易笔数初始值(q)等四个参数,并根据业务的实际需求制定实时登记和批量登记的参数调整策略。在数据上链过程中,区块链平台会自动记录前一时间段i的每秒交易请求数,并根据每秒交易请求数匹配配置文件中的参数策略,并实时刷新参数值。当区块链平台触发刷新后的打包参数阈值,平台便会对交易按照时间顺序进行打包。通过区块链基础平台自我调整区块打包参数阈值,可同时满足供应链金融、批量数据存证等不同场景下的应用需求。
3 自适应交易打包模式实验结果分析
为了直观看出不同场景下,打包参数值对数据上链效率以及节点服务器性能的影响,分别在低压力和高压力情况下对节点进行了实验,实验节点分别部署在四台4C8G的虚拟服务器上。
⑴低压力实验
在低压力,要求响应实时性高的情况下,将打包时间t 设置为较小值,使其能快速达到打包时间阈值。分别将打包时间设置为100ms,200ms,300ms,400ms,500ms,600ms,每一秒发送20 笔交易,持续5s,再计算节点服务平均响应时间(如表1、图2)。
图2 在不同t值情况下,节点服务平均响应时间
表1 在不同t值情况下,节点服务平均响应时间
表1 中t 值越小,节点服务平均响应时间越短,上层业务应用系统可以获得更高效的区块链服务。
⑵高压力实验
在高压力的情况下,将打包时间t 值设置得足够大,使其只会触发交易笔数的阈值。将交易笔数分别设置为200,400,600,观察节点服务器CPU 及节点磁盘使用情况(图3、图4)。表2、表3 中显示,在压力恒定的情况下,交易笔数n越大,服务器CPU使用率和磁盘使用率越低,节点服务更稳定,上链效率也会越高。
表2 在不同n值情况下,节点CPU平均使用率
图3 在不同n值情况下,节点CPU平均使用率
表3 在不同n值情况下,节点磁盘平均读写情况
图4 在不同n值情况下,节点磁盘平均读写情况
从实验结果可以得出,在低压力情况下,随着打包时间的增加,区块链平台平均响应时间也会随之增加。在高压力情况,打包笔数设置较小时,服务器CPU 平均使用率过高,会导致服务器不稳定,出现未知错误。若随着并发量的增加,调整打包笔数参数的大小,使服务器CPU平均使用率可以保持在一个正常的水平。
为此,区块链平台需要根据当前交易请求数来选择最优的区块打包参数,以保证区块链平台服务的高效性和稳定性。当某时间段内交易请求数较少,且要求实时登记交易信息时,区块链平台可以将打包时间t设置为较小值,提高区块链响应时间;随着交易请求数增加,区块链平台可以将打包时间t 相应比例调大,增加每个区块中的交易笔数以提高数据上链效率;当某段时间,数据上链请求量突然放大时,区块链平台可以增大交易笔数n值,对数据进行批量打包,减少区块链平台生成区块速度和数量,防止区块链数量超出区块缓存池导致区块数据丢失,同时提高批量交易登记效率。此外,在区块链平台中区高度越高,上链数据查询效率会降低。为保证区块链数据查询效率,需适当控制区块高度。
显然,在多样化的应用场景下,区块链平台需要能够自适应调节区块打包参数,故区块链平台采用如图5中所示的自适应交易打包流程。首先在区块链平台配置实时登记策略和批量登记策略的打包参数,在区块链平台接收交易的过程中,平台自动根据前一时间段i 的每秒交易请求数,实时刷新配置中对应的打包时间或者交易笔数阈值,当平台触发打包参数阈值,便会对交易按时间顺序进行打包,使区块链平台对打包参数的选择更加合理。
图5 自适应交易打包流程
以下为区块链平台的一次实际应用,配置打包的参数策略如下:
区块链平台在控制交易打包的配置文件中设置了四个参数,分别为打包时间(t)、交易笔数(n),以及打包时间初始值(P)和交易笔数初始值(q)。
将打包时间初始值P 设置为0.05,将交易笔数初始值q设置为100。
当区块链平台前一时间段i 内每秒收到的交易请求数a≤b(b为自定义的阈值,b<q,例如取b=10),区块链平台采取实时登记策略,将打包时间t 设置为打包时间初始值P(例如0.05s)。此时,区块链平台在收到交易请求后便会立刻进行数据打包和节点共识。
随着区块链平台i 秒内收到的每秒交易请求数量的增大,例如每秒交易请求数a≥b且a≤c(c为自定义的阈值,c 小于q,例如取20)时,区块链平台可根据增大的数量的量级读取相应的配置参数值。实时登记的策略上可以依次设置10个等级区间(例如i秒内,当a≤10 时,t=0.05;当10<a≤20 时,t=0.1;当20<a≤30,t=0.15;当30<a≤40 时,t=0.2;……;当90<a≤100 时,t=0.5;最高等级打包时间内的交易请求数a小于100)。
当每秒交易请求数量过大时,会触发交易笔数的阈值。在这种情况下,区块链平台采取批量登记策略,将交易笔数值n变大。当i秒内每秒交易请求数a≥q 且a≤w 时,设置打包时间t 为一较大值(例如5 秒)。当i 秒内每秒交易请求数a≥w 且a<f 时,将交易笔数n更新为w。同上也可以依次设置10 个等级区间(例如i 秒 内,当100≤a<200 时,n=100;当200≤a<300 时,n=200;当300≤a<400 时,n=300;……依此类推,最高等级交易笔数不超过区块链平台处理交易的上限)。
区块链平台对交易打包模式的创新,旨在提高不同场景下的数据上链效率。区块链平台可以根据不同的交易请求数量,自适应选择其交易打包参数的最优配置,从整体上提高区块链平台的处理效率。
4 结束语
众所周知,区块链共记一本账、不可篡改、可追溯的特性使其天然适用于交易清算以及交易登记的场景,而区块链的共识效率问题使其一直无法应用于证券等金融衍生品交易、清算、登记等场景。本文阐述了区块链技术的特点,研究了在交易打包方面提升了数据高频上链场景下的系统吞吐量方法,并在区块链平台实现本文提出的灵活调整交易打包参数策略。实验结果表明,应用该方法,区块链节点服务器以及磁盘使用率更低,节点服务更稳定,大幅提升了数据上链效率。下一步将继续优化该方法的参数配置策略,使其能够适应更多的数据上链场景,不断提升数据上链效率,全面拓展区块链的应用场景,从而推动区块链技术赋能实体经济,推动我国数字产业化。