一种用于并行投票共识的数据分片方法

文档序号:30705663发布日期:2022-07-09 22:52阅读:115来源:国知局
一种用于并行投票共识的数据分片方法

1.本发明属于区块链技术改进领域,尤其涉及一种用于并行投票共识的数据分片方法。


背景技术:

2.随着全球信息技术领域的科技革命和产业变革,互联网逐渐由“信息互联网”向“价值互联网”发展。在“信息互联网”时代,网络上的信息公开透明,但也因可以随意篡改而变得不可信,需要第三方机构提供信任担保。一旦提供信任的第三方平台倒闭,其所提供的信任便化为泡沫。为了解决互联网发展过程中产生的信任问题,区块链技术应运而生。
3.区块链技术是分布式数据存储系统、点对点传输、共识机制、加密算法等技术的集成应用模式,能够在互联网上实现传统互联网无法实现的信任和价值传递。其基于密码学原理而非信用的特征,使得任何达成一致的双方直接交易,从而不需要第三方中介的参与。另一方面,区块链中几乎不存在单点故障,链上的数据存储在全球无数台机器节点上,使得数据“稳定”、“可信”且“不可篡改”,这重新赋予了网络上的数据一种可以被信任的价值。
4.区块链每个节点在本地存储完整区块链的复制,因此节点可独立完成交易查找、账户余额计算等工作。然而,随着虚拟货币区块链包含的数据量不断增加,区块链体积不断增大。例如,截至2019年12月,虚拟货币区块链约占存储空间260gb。虚拟货币区块链体积过大演变为可伸缩性问题,导致空白节点同步时间增长。同时,繁重的存储负担会增加维护全节点的成本。
5.本方案设计了一种面向并行投票共识的交互式区块组体分片方案,并利用纠删码保证完整数据可以随时恢复,同时采用了一种结合布隆过滤器的冷热数据缓存策略来保证交易快速定位和区块组数据的快速查询。
6.2008年,nakamoto提出虚拟货币。在虚拟货币区块链系统中,用户可以上传自身的交易,交易的实质是将一个账户中的虚拟货币转移到另外账户中,一个交易可能存在多个输入和多个输出。合法交易被打包放到区块中,区块最大为1mb。区块包括区块头和区块体两部分,区块头主要包括指向上个区块的哈希值、交易默克尔树树根值、时间戳和随机数等,区块体主要包括产生的交易。
7.虚拟货币中包括全节点和轻节点两种节点。轻节点又叫做spv (simplified payment verification)节点,它不存储区块链交易数据,只具有钱包功能,可以减轻存储压力。全节点存储全部的区块数据,可以用于验证交易,为其他节点提供数据,具有完备的节点功能。针对存储资源较少的设备,虚拟货币白皮书中介绍spv节点在初始化同步过程中只下载区块头,然后根据自身需要从全节点请求数据。这种节点所需的存储大小只与区块高度成线性关系,与区块大小无关。每个区块头80b,一年仅4.2mb 的空间,极大地减轻了存储压力。
8.虚拟货币轻节点的主要优点在于,第一,大幅缩小了节点的存储空间,为存储能力比较弱的客户端加入网络提供了可能;第二,轻节点依赖于全节点,可以快速准确地进行支
付校验,不需要下载全部的支付数据。
9.上述轻节点方案也存在着一定的缺陷。首先,随着数据量的增加,轻节点增多,全节点个数减少,区块链系统的去中心化程度减弱,数据安全性、稳定性下降;轻节点减少了数据存储,但是增大了网络带宽压力,在数据存储和数据共享方面对系统没有贡献。
10.支付通道(payment channels)是运行在虚拟货币网络上的二层结构,允许参与的双方直接建立彼此间点对点的支付渠道。参与方可以安全地维护和更新彼此间私有账本,这样他们在通道内的交易就不需要写入区块链。需要指出的是,交易过程中,支付通道的中间状态也可以随时写入虚拟货币账本。支付通道避免了直接在虚拟货币上进行交易,因此可以显著提高容量、可扩张性、交易吞吐量。通道内的交易处理速率仅受参与方的网络带宽限制,而不需要考虑虚拟货币网络的拥堵情况。支付通道的另一个优势是它们不需要虚拟货币矿工的直接服务,因此可以以极低的的交易费进行,可以经济地执行虚拟货币用户间的微额支付。
11.闪电网络,是由joseph poon与thaddeus dryja首次提出的,也是目前发展前景最好、影响力最大的支付通道。闪电网络允许参与的用户执行虚拟货币链下支付,依靠惩罚机制促进用户的诚实行为。如果一个节点广播恶意交易,那么诚实的参与者就可以合法地索取相关闪电网络内的所有资金,这有力地保证了多个参与方,在公平、公正的情况下进行交易。
12.这种方式的主要优点在于,第一,大幅减小了因小额交易引起的节点存储空间;第二,加快了虚拟货币的处理速度,避免小交易拖慢整体性能。
13.上述方案也存在着一定的缺陷。首先,本方案依赖于双方的可信,否则有可能资产的丢失,因此仅适合于小额交易;同时,本方案仅仅适用于转账一种交易类型,不具有普适性,并且也没有从根本上减少节点的数据存储量。


技术实现要素:

14.本发明的目的在于提供一种用于并行投票共识的数据分片方法,旨在解决如何在不影响数据安全性的前提下进行区块数据压缩以提高阶段系统可拓展性的核心技术问题。
15.本发明是这样实现的,一种用于并行投票共识的数据分片方法,所述用于并行投票共识的数据分片方法包括以下步骤:
16.s1、当前周期的主节点负责监控从上一次分片后区块组的体积;
17.s2、判断监控的区块主体的体积是否大于存储因子m,当体积和大于 m时,则发起一条《split,l,r,signature》交易到网络中,当体积和小于m时,则继续执行s2;
18.s3、节点i接收到split交易后,需要先等待获取从l到r范围内的所有区块组;
19.s4、节点独立获取对应的分片编码并广播一条交易
20.s5、当系统中的n个节点都明确进行了回复后,节点可以独立的将l 到r范围内的区块组体删除并只保留
21.其中,其中l是本次分片开始的区块组序号,r是本次分片结束的区块组序号。
22.本发明的进一步技术方案是:所述步骤s4中计算的哈希值是确保每个节点都拥有数据片的摘要信息,以用于获取数据片时进行正确性验证。
23.本发明的进一步技术方案是:数据分片保存后,当节点i需要恢复高度为h的区块组体数据时,它向全网广播一条《query,h,i,signature》查询请求,处于存活状态的节点收到请求后将回复对应的分片,节点i收集到任意的n-2f-1个块后执行即可获取到需要的数据。
24.本发明的进一步技术方案是:节点在计算分片时任需保存每个分片的摘要,在获取到其他节点的分片时进行摘要比较。
25.本发明的进一步技术方案是:分片后数据查询根据时间线将区块组划分为hot、warm、cold三个状态区间,在每个状态区间使用不同的缓存策略。
26.本发明的进一步技术方案是:所述hot状态区间中保存的是最新的区块组集合被查询是高频的,应该被保存在每个节点上,以用于减少大规模数据片获取时的网络带宽和处理压力,定义hot状态区间的长度为lh,最新的区块高度为h
max
,高度在(h
max-lh,h
max
]的区块组位于该状态区间。
27.本发明的进一步技术方案是:所述warm状态区间中保存的是较新的区块组,用于区块组正确性检验的区块组请求,被使用的频率不高,区块组不必保存在每个节点上,仅保存在nw个节点上,其中(1《=nw《=2f+1);当nw个节点均处于宕机状态时,区块组查询使用rs code进行批量恢复;定义warm空间的长度为lw,高度在(h
max-l
h-lw,h
max-lh]的区块组位于该状态区间内。
28.本发明的进一步技术方案是:在节点使用布隆过滤器记录每个区块组的交易存在信息,在交易查询时快速定位到交易所处的区块组信息,所述布隆过滤器长度增加降低误判率。
29.本发明的进一步技术方案是:所述cold状态区间保存很旧的区块组且被查询几率非常低,在新节点加入网络会被频繁访问;cold状态区间将多个区块组分片合并成为一个块并重新计算块哈希减少区块组分片产生摘要的存储空间,高度在[0,h
max-l
h-lw]的区块组位于该状态区间内。
[0030]
本发明的进一步技术方案是:在新节点刚加入网络需要全量获取所有的区块组时,新节点需校验的分片哈希量会减少。
[0031]
本发明的有益效果是:可以使得区块链节点只存储原始数据的一个分片,并且分片最少只占原始数据的比例等于系统中正常节点的数量。同时,对新旧区块组体进行时间线划分并采取不同的缓存策略以换取对区块组和交易的快速查询。
附图说明
[0032]
图1是本发明实施例提供的用于并行投票共识的数据分片方法的流程图。
[0033]
图2是本发明实施例提供的区块组分片工作过程,以存在一个恶意节点的4个节点场景为例的示意图。
[0034]
图3是本发明实施例提供的基于时间线的缓存模型示意图。
具体实施方式
[0035]
如图1所示,本发明提供的用于并行投票共识的数据分片方法,其详述如下:
[0036]
在区块链网络中,区块链每个节点在本地完整的存储全部区块链的复制,因此节点可以独立的进行区块校验、交易查询等行为。然而,区块链是持续增加并且不能删除的账本数据,这对节点的存储能力产生了很大的挑战。例如,截止到2019年12月,虚拟货币区块链约占260gb。如何在不影响安全性的前提下进行区块数据压缩是提高阶段系统可拓展性的核心问题。
[0037]
本发明提供一种用于并行投票共识数据分片的方法,提出在并行投票共识网络中利用纠删码进行区块组体的批量分割方法,每个节点只存储原本数据的一个小分片,并能够保证在任何时间点都可以恢复出原始数据;提出了区块组体数据的分片流程,根据存储累积量在各个节点交互式地启动分片,并可以在多组数据中并行启动分片,同时能够保证系统在启动分片的时间点是安全的;提出了结合布隆过滤器的冷热数据不同缓存策略实现区块组和交易的查找优化。
[0038]
基于纠删码的数据分片
[0039]
纠删码不需要全部的分片即可恢复出原来的全部数据,这个特性很适合存在恶意和故障节点的拜占庭环境。通常早期生成的区块组访问查询频率是极低的,但是每个节点仍然要存储全量的区块组交易数据。结合纠删码的存储方案可以让节点仅存储交易集合的一个分片,并当需要的时候可以实时恢复出完整的区块组交易信息。
[0040]
reed-solomon纠删码可以用一个《k,m》二元组表示,原始的数据m 被分割成k个数据块,同时使用矩阵运算产生m个校验块。对于任意的d 个块,当d∈k∪m&d≥k时,原始数据可以被恢复。因此,rs code在最多m个块丢失或者暂时无法获取下能保证原始数据的安全性。
[0041]
对于存在f个恶意节点的并行投票共识网络中,系统中最多会出现2f 个节点不响应的情况。假设系统中有n个节点,任何时刻最少时有n-2f个活性节点,为了保证原始数据任何时刻都能被恢复,系统应该采用(n-2f,2f) 配置的rs编码。
[0042]
考虑到区块组头中的元数据是经常访问的,此算法仅对存储了交易的区块组体bgb进行分片,bgbj表示高度为j的区块组体。对于任意的区块组体,rs码编码共产生n个块其中包括n-2f个数据块以及 2f个检验块每个记账节点只存储一个块,并当必要的时候请求其他任意2f-1块即可恢复区块组体本身,这样每个节点理论上只需要保存原始数据的1/n-2f,也即系统理论下正常节点的数量。
[0043]
本方案使用交易来进行交互式分片,每个区块都产生一次分片交易代价是高昂的,取而代之是定期进行一次分片。在进行编码前,需要将每个区块组体等比例分成n-2f份,每个数据块是所有区块组体相同位置的集合。
[0044]
为了使得分片和节点之间的对应关系尽量随机,记账节点i所存储分片的序号定义split(l,r,i)表示对从l到r的区块组体进行rs编码,并保留记账节点i对应的块组体进行rs编码,并保留记账节点i对应的块表示使用任意n-2f个分片恢复出l-r范围内的区块组体。
[0045]
数据分片流程
[0046]
在本方案中分片方案是基于交易驱动的,系统存在一个存储因子m,当某一个范围内的区块组体体积之和大于m,系统将启动对这些区块组体的分片。存储因子的存在避免频繁地进行分片,导致节点计算压力过高。
[0047]
当前周期的主节点负责监控从上一次分片后区块组体的体积,并当体积和大于m时发起一条《split,l,r,signature》交易到网络中,其中l是本次分片开始的区块组序号,r是本次分片结束的区块组序号。当前的主节点可能是恶意的并且故意不发起分片,因为恶意的节点存在上限f,系统最多会在f个共识周期后启动本次分片。分片的启动是并行的,主节点无需等待上次分片结束即可开始本次分片。
[0048]
节点i接收到split交易后,需要先等待获取从l到r范围内的所有区块组。之后,节点独立获取对应的分片编码并广播一条交易计算的哈希值的目的是保证所有节点确实收到了对应的区块组并进行了相同的分片。当系统中的所有n个节点都明确进行了回复后,节点可以独立的将l到r范围内的区块组体删除并只保留
[0049]
本方案使用了一个较强的同步假设,系统中宕机的f个节点最终会在某个时间启动并获取到所有的区块组以及执行分片。否则,假设系统中当前存活的2f+1个节点已经进行了分片计算并删除了对应的区块组体后,f 个宕机的节点恢复有效并且之前的2f+1中f个正常节点宕机,此时剩下的 f个恶意节点只要保持沉默,那么只有f个节点拥有区块组体块数据,这样就无法恢复之前的区块组体。我们认为这种强同步假设是合理的,因为节点最终会有效并且节点不需要同时在线,分片启动是并行的,这样可以很快弥补节点宕机造成的时间差。
[0050]
当节点i需要恢复高度为h的区块组体数据时,它向全网广播一条
[0051]
《query,h,i,signature》查询请求,处于存活状态的节点收到请求后将回复对应的分片,节点i收集到任意的n-2f-1个块后执行即可获取到需要的数据。考虑到节点有可能是恶意的因此它发送的分片有可能是被修改的,节点在计算分片时任需要保存每个分片的摘要,并当获取到其他节点的分片时进行摘要比较。
[0052]
数据查询优化
[0053]
分片的设计对存储进行了优化的同时,引发了查询效率低的问题。如果系统每次查询都需要用一次rs码恢复数据,会对查询性能造成了极大的影响。本方案采用时间线将区块组划分为hot、warm、cold三个状态区间,并分别使用了不同的缓存策略。
[0054]
在区块链网络中,查询请求通常包括区块组查询和交易查询两类。区块组查询是指通过指定高度来查询对应的区块组(包括区块组头和区块组体)信息。交易查询是指通过指定交易哈希来查询对应的交易的全部信息。交易查询通常利用数据库(例如mongodb、leveldb)提供的索引机制来快速查找对应的交易。分片机制需要额外的机制来快速确定交易对应的位置。
[0055]
根据程序访问的局部性原理,越新的区块组被访问到的概率越高,那么它们应该
出现在每个节点上,而更为陈旧的区块组被访问的频次很低,仅当需要的时候恢复数据即可。
[0056]
hot空间中保存的是最新的区块组集合,区块组查询和交易查询在这一范围内都是高频的。因此无论区块组有无被分片,它们都应该被缓存在每个节点上。定义hot空间的长度为lh,最新的区块高度为h
max
,那么高度在(h
max-lh,h
max
]的区块组位于这一空间内。
[0057]
warm空间中保存的是较新的区块组,这一空间中更多是用于进行区块组正确性检验的区块组请求,区块组中的交易相对而言是过期的,因此被使用到的频率并不高。区块组不必保存在每个节点上,仅需要保存在n 个节点上,其中(1《=nw《=2f+1)。当nw个节点都处于宕机状态时,区块组查询使用rs code进行批量恢复。定义warm空间的长度为lw,那么高度在(h
max-l
h-lw,h
max-lh]的区块组位于这一空间内。
[0058]
交易分片后要能够快速定位到所处的区块组,首先节点使用布隆过滤器记录每个区块组的交易存在信息,当交易查询时可以快速定位到交易有可能所处的区块组信息。考虑到布隆过滤器存在假阳性问题,适当增加布隆过滤器长度可以降低误判率。
[0059]
cold空间保存的是很旧的区块组,交易查询和区块查询的几率是非常低的,然而这些数据当新节点加入网络会被频繁访问到。cold空间将多个区块组分片合并成为一个块并重新计算块哈希这减少了区块组分片产生的摘要的存储空间。当新节点刚加入网络需要全量获取所有的区块组时,新节点需要校验的分片哈希量也会减少。高度在[0,h
max-l
h-lw]的区块组位于这一空间内。
[0060]
此时,布隆过滤器记录每个分片的交易存在信息,减少交易查询时布隆过滤器的比较次数,从而实现交易的快速定位。同时,每个分片会随机冗余保存到nc个节点上,nc可以是一个可以等于0的比较小的值,并在nc个缓存都失效下使用检验块恢复数据。
[0061]
本发明技术方案可以使得区块链节点只存储原始数据的一个分片,并且分片最少只占原始数据的比例等于系统设定中正常节点的数量。同时,对新旧区块组体进行时间线划分并采取不同的缓存策略以换取对区块组和交易的快速查询。
[0062]
本方案提出在并行投票共识网络中利用纠删码进行区块组体的批量分割方法,将一组区块组体内的每个交易只存储到一个节点,每个节点只存储原本数据的一个小分片,并能够保证在任何时间点都可以恢复出原始数据。
[0063]
本方案提出了区块组体数据的分片流程,根据存储累积量在各个节点交互式地启动分片,并可以在多组数据中并行启动分片,同时能够保证系统在启动分片的时间点是安全的。
[0064]
本方案提出了结合布隆过滤器的冷热数缓存策略实现在分片下对区块组和交易的查找优化。
[0065]
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1