数据共识方法及分布式系统与流程

文档序号:30830292发布日期:2022-07-22 20:52阅读:167来源:国知局
数据共识方法及分布式系统与流程

1.本说明书一个或多个实施例涉及信息技术领域,尤其涉及一种数据共识方法及分布式系统。


背景技术:

2.目前,基于分布式系统的各种业务场景下,往往需要实现分布式系统中各节点间的数据共识。数据共识是指分布式系统中各个节点在容错前提下对各自获取的数据的一致性达成共识。或者通俗来说,数据共识可以理解为考虑到分布式系统中有些节点可能宕机或作恶,分布式系统中大多数节点依然可以获取一致的数据。
3.例如,区块链系统中各个节点之间往往需要实现数据共识,此处需要共识的数据是由若干交易打包成的区块,各个节点在对区块达成共识之后,可以执行相同区块中的相同交易,以满足各个节点上区块链状态的一致性。
4.此外,在另一篇申请中,发明人已经提出了一种基于应用于分布式系统的数据分发方法 (具体介绍可以参见另一篇申请或者本说明书的具体实施方式部分)。
5.发明人意识到,可以基于该数据存储方法,进一步实现一种更为有效的数据共识方法。


技术实现要素:

6.有鉴于此,本说明书一个或多个实施例提供一种数据共识方法及分布式系统。
7.为实现上述目的,本说明书一个或多个实施例提供技术方案如下:
8.根据本说明书一个或多个实施例的第一方面,提出了一种数据共识方法,用于实现分布式系统的n个节点之间对于同一事项所提议的数据的一致性共识,所述方法包括:
9.节点i确定针对该同一事项所提议的数据di,并且基于既有的数据分发方法,将di对应的数据块dij分发给节点j;其中,i=1、

、n,j=1、

、n,dij是基于纠删码技术将di 转换成的数据块;
10.节点j在确认dij之后,触发针对di的聚合签名流程,包括:针对di对应的唯一标识进行签名得到签名ei,并将ei返回给节点i;节点i基于搜集到的至少n-f个ei,得到聚合签名并发送给节点j;节点j在获取到节点i对应的聚合签名之后,将节点i加入本地的节点清单;
11.节点j基于公平抛币协议,将本地的节点清单进行公共随机排序;
12.节点j判断自身是否确认了排序中第一个节点提议的数据的数据块,若是,则将该节点对应的聚合签名进行广播;若确定获取到至少一个该节点对应的聚合签名,则将该节点的提议确定为节点j接受的提议;若确定未获取到该节点对应的聚合签名,则继续判断自身是否确认了排序中下一个节点提议的数据的数据块,直至确定出节点j接受的提议;
13.节点j将自身接受的提议所对应的数据块进行广播,以及,基于自身获取到的同一提议对应的至少f+1个不同数据块,恢复得到该提议对应的数据,作为达成一致性共识的数
据。
14.在一些实施例中,di对应的唯一标识,包括:di对应的分发流程标识与di对应的聚合签名流程标识。
15.根据本说明书一个或多个实施例的第二方面,提出了一种数据共识方法,用于实现分布式系统的n个节点之间对于同一事项所提议的数据的一致性共识,所述方法包括:
16.节点i确定针对该同一事项所提议的数据di并广播;
17.节点i将获取到的不同节点所提议的数据形成的数据集合bi,并且基于既有的数据分发方法,将bi对应的数据块bij分发给节点j;其中,i=1、

、n,j=1、

、n,bij是基于纠删码技术将bi转换成的数据块;
18.节点j在确认bij之后,触发针对bi的聚合签名流程,包括:针对bi对应的唯一标识进行签名得到签名ei,并将ei返回给节点i;节点i基于搜集到的至少n-f个ei,得到聚合签名并发送给节点j;节点j在获取到节点i对应的聚合签名之后,将节点i加入本地的节点清单;
19.节点j基于公平抛币协议,将本地的节点清单进行公共随机排序;
20.节点j判断自身是否确认了排序中第一个节点形成的数据集合的数据块,若是,则将该节点对应的聚合签名进行广播;若确定获取到至少一个该节点对应的聚合签名,则将该节点形成的数据集合确定为节点j接受的数据集合;若确定未获取到该节点对应的聚合签名,则继续判断自身是否确认了排序中下一个节点形成的数据集合的数据块,直至确定出节点j接受的数据集合;
21.节点j将自身接受的数据集合所对应的数据块进行广播,以及,基于自身获取到的同一数据集合对应的至少f+1个不同数据块,恢复得到该数据集合,作为达成一致性共识的数据集合。
22.在一些实施例中,节点i确定针对该同一事项所提议的数据di并广播,包括:
23.节点i确定针对该同一事项所提议的数据di,对di进行签名后广播;
24.节点i将获取到的不同节点所提议的数据形成的数据集合bi,包括:
25.节点i将获取到的、且通过签名验证的不同节点所提议的数据形成的数据集合bi。
26.根据本说明书一个或多个实施例的第三方面,提供了一种数据共识方法,用于实现分布式系统的n个节点之间对于同一事项所提议的数据的一致性共识,所述方法包括:
27.节点i确定针对该同一事项所提议的数据di并广播;
28.节点i将获取到的不同节点所提议的数据形成的数据集合bi,并基于纠删码技术将bi中的数据dk转换成n个数据块,其中,dk的n个数据块包括dki,k=1、

、ki,ki为bi 中数据的数量,i=1、

、n,基于dk的n个数据块中的m个数据块可得到dk,m<n, n=m+2f,m>f,f为包括n个节点的分布式系统所容错的节点数量;
29.节点i生成用于验证数据块是否属于dk的n个数据块的特征交叉校验信息fpcck;
30.节点j获取节点i构建的分发消息,该分发消息包括dki、fpcck与lk;
31.节点j基于该分发消息中的fpcck验证dki是否属于dk的n个数据块,并且,验证lk是否为基于fpcck得到的签名,若验证结果皆为是,则基于预设生成规则,利用该分发消息中的fpcck生成已校验信息,并对fpcck对应的已校验信息进行签名得到签名sjk;
32.节点j构建准备消息,该准备消息包括已校验信息与sjk;并且,对该准备消息中的
sjk进行验证;
33.节点i若确定获取到至少大于(n+f)/2个准备消息包含相同的已校验信息,并且,该至少大于(n+f)/2个准备消息皆通过签名验证,则基于该至少大于(n+f)/2个准备消息中的签名,构建包含签名的结束消息并发送给节点j;
34.节点j在获取到节点i构建的结束消息之后,验证结束消息包含的签名,若验证通过,则确认dki、fpcck与lk,并确认bij;bij包括k所有取值的dki;
35.节点j在确认bij之后,触发针对bi的聚合签名流程,包括:针对bi对应的唯一标识进行签名得到签名ei,并将ei返回给节点i;节点i基于搜集到的至少n-f个ei,得到聚合签名并发送给节点j;节点j在获取到节点i对应的聚合签名之后,将节点i加入本地的节点清单;
36.节点j基于公平抛币协议,将本地的节点清单进行公共随机排序;
37.节点j判断自身是否确认了排序中第一个节点形成的数据集合的数据块,若是,则将该节点对应的聚合签名进行广播;若确定获取到至少一个该节点对应的聚合签名,则将该节点形成的数据集合确定为节点j接受的数据集合;若确定未获取到该节点对应的聚合签名,则继续判断自身是否确认了排序中下一个节点形成的数据集合的数据块,直至确定出节点j接受的数据集合;
38.节点j将自身接受的数据集合所对应的数据块进行广播,以及,基于自身获取到的同一数据集合对应的至少f+1个不同数据块,恢复得到该数据集合,作为达成一致性共识的数据集合。
39.在一些实施例中,还包括:
40.各节点之间预先基于门限签名协议,约定共同的公钥pk与节点j的私钥skj;其中,该门限签名协议的门限值至少大于(n+f)/2;
41.节点j对fpcck对应的已校验信息进行签名得到签名sjkj,包括:
42.使用私钥ski对fpcck对应的已校验信息进行签名得到签名sjk;
43.节点i基于该至少大于(n+f)/2个准备消息中的签名,构建包含签名的结束消息,包括:
44.基于门限签名协议,将该至少大于(n+f)/2个准备消息中的签名组合成门限签名sk,并构建包含sk的结束消息;
45.节点j验证结束消息包含的签名,包括:
46.节点j使用公钥pk验证sk。
47.在一些实施例中,所述分布式系统为区块链系统;数据di为节点i基于自身缓存中的交易打包成的区块。
48.在一些实施例中,节点j在得到该数据集合之后,执行该数据集合中每个区块中的交易,并在执行完每个交易之后,将该数据集合中每个区块写入区块链。
49.根据本说明书一个或多个实施例的第四方面,提供一种分布式系统,应用于上述任一方法。在一些实施例中,所述分布式系统为区块链系统。
50.在上述技术方案中,将发明人提出的数据分发方法应用在数据共识领域,设计出一种步数比较少的数据共识方法。
51.进一步地,考虑到上述的数据共识方法实际上属于多元共识方法,即在共识流程
中不区分主节点与非主节点(不像pbft协议那样),这意味着在实现一次上述的数据共识方法流程中,虽然分布式系统中每个节点都可以提议自己认可的数据,但是通常仅能使得分布式系统中各节点对其中一个节点所提议的数据达成共识,这样的话,其他节点提议的数据就相当于被“浪费”了。
52.因此,可以基于上述共识方法提出进一步改进。具体而言,每个节点可以先将自身提议的数据进行广播(可以理解为发送给分布式系统中的每个其他节点),然后,每个节点将自己收集到的各个节点所提议的数据形成数据集合,不同节点形成的数据集合可能不尽相同,那么,每个节点可以将自己形成的数据集合重新作为自己的提议,对该数据集合应用纠删码技术,实现数据分发方法,进而是实现数据共识。
53.更进一步地,考虑到上述的改进后的数据共识方法的原理本质上是,将一组不同节点提出的小提议聚合成一个大提议,将大提议对应的数据集合视为一个数据整体,应用纠删码技术进行数据分发,这会导致,发明人发明的既有的数据分发方法仅仅是将数据集合视为一个数据整体,仅会对数据集合对应的fpcc的签名进行验证,而不会对数据集合中每个数据分别应用纠删码技术,也就不会存在每个数据对应的fpcc,也就不会对每个数据对应的fpcc的签名进行验证,这意味着无法在数据分发阶段实现对数据集合中的每个数据对应的提议的发起节点进行权限控制,而只能在数据共识阶段,在将某个数据集合暂时认定为可共识的数据集合之后,各节点恢复出该数据集合,对数据集合中的每个数据进行签名验证,如果验证失败,还需要再回到共识阶段重新认定可共识的数据集合,这样会增加很多共识轮数,降低共识效率。
54.为此,可以提出一种更加改进的数据共识方法。对既有的数据分发方法进行改动,节点在将数据集合作为提议进行数据分发时,不是对数据集合整体应用纠删码技术,而是深入到集合内部,对每个数据分别应用纠删码技术,并生成每个数据对应的fpcc。然后,将一组不同数据的数据块形成一个子集,将不同子集分发给不同节点。如此,节点就可以对自己获取到的子集中的每个数据块进行合法性验证,验证该数据块是否与相应的fpcc匹配,也可以验证fpcc的签名是否正确,从而可以在数据分发流程中就将未通过验证的节点所分发的数据集合排除掉,使得这样的数据集合不能进入后续共识流程,这样一来,各节点在进行共识时,不必针对这样的数据集合进行一轮共识,可以节省执行的共识轮数,提升共识效率。
附图说明
55.图1示例性提供了一种avid协议的实现过程。
56.图2示例性提供了一种vcid协议的实现过程。
57.图3示例性提供一种数据分发方法的流程。
58.图4示例性提供另一种数据分发方法的流程。
59.图5示例性提供一种数据共识方法的流程。
60.图6示例性提供一种多元共识方法的流程。
61.图7示例性提供另一种数据共识方法的流程。
62.图8示例性提供另一种数据共识方法的流程。
具体实施方式
63.这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本说明书一个或多个实施例相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本说明书一个或多个实施例的一些方面相一致的装置和方法的例子。
64.需要说明的是:在其他实施例中并不一定按照本说明书示出和描述的顺序来执行相应方法的步骤。在一些其他实施例中,其方法所包括的步骤可以比本说明书所描述的更多或更少。此外,本说明书中所描述的单个步骤,在其他实施例中可能被分解为多个步骤进行描述;而本说明书中所描述的多个步骤,在其他实施例中也可能被合并为单个步骤进行描述。
65.数据共识一般是指学术界所谓的bft(byzantine faulttolerance)问题。
66.数据共识过程中,往往会先涉及到节点提议自身认可的数据,将自身认可的数据分发给其他节点,然后,各个节点才会基于共识算法对该数据进行共识。
67.另外,如背景技术所说,发明人在另一个申请文件中提出了一种数据分发方法,仅仅基于该方法并不解决并发用户请求时的数据一致性问题(即数据共识问题),但是发明人发现,将这种数据分发方法应用于数据共识过程中一开始的数据分发阶段,就可以实现一种多元共识方法mvba(multi-valuedvalidatedbyzantine agreement),可以使得数据共识流程所需要的步数大为缩减。使用常用的二元共识比如cobalt或者cachin等的二元共识,常见的多元共识方法dumbo-mvba所需要的步数为34步,而本公开提出的多元共识方法vcid-mvba或者vvcid-mvba所需要的步数可以为17.5步,共识效率提升明显。
68.此处介绍发明人提出的既有的数据分发方法。发明人提出的数据分发方法是种可以节省带宽且消息复杂度为线性的数据分发协议,这种数据分发协议可以称为可验证一致信息分发 (verifiable consistent information dispersal,vcid)。此处的线性复杂度是指,分布式系统中节点数量线性增长,相应的消息复杂度也仅仅会线性增长。
69.而一种现有的基于技术纠删码技术的存储方案是基于数据分发协议avid实现的,这种数据分发协议的具体实现细节此处不赘述,但是需要强调的是,avid协议的实现过程中,节点间需要交互的消息数量较多(这意味着会占用较多带宽,也带来很大的消息复杂度,且这种消息复杂度不是线性的)。
70.图1示例性提供了一种avid协议的实现过程。如图1所示,每条横线代表分布式系统中的一个节点,一条横线上的实心圆点代表同一节点在不同阶段的身份。假设分布式系统中有4个节点。在avid协议实现过程中,主要存在send、echo、ready三阶段,节点间的每次消息交互在图1中用箭头表示。可以看出,avid协议实现过程中,节点间的需要交互的消息数量是比较多的,消息复杂度并不是线性的,avid的消息复杂度可以用o(n2) 来表示,n为节点数量。
71.图2示例性提供了一种vcid协议的实现过程。如图2所示,相比于图1所示的avid 协议的实现过程,在vcid协议的实现过程中,节点间需要交互的消息数量较少,并且消息复杂度是线性的。
72.此外需要强调,vcid协议属于异步协议,其并不依赖于时间假设而实现。
73.另外,vcid协议可以实现如下4点安全特性:
74.1、如果分布式系统中的一个正确节点作为分发需求方分发了数据d,那么分布式系统中的所有正确节点都将会确认数据d的一个数据块(基于纠删码技术生成的数据块)。
75.2、分布式系统中任意f+1个正确节点所输出的数据块都可以恢复成原始数据d。
76.3、如果数据读取方拿到了数据d在分布式系统中进行分发之后产生的安全证明,则数据读取方一定能从分布式系统中读取到数据d。
77.4、如果分布式系统中的一个正确节点作为数据发送方通过分布式系统发送了数据d,那么数据接收方必然可以通过分布式系统接收到数据d。
78.下面具体介绍基于vcid协议的数据分发方法。
79.本公开提供的各个实施例中的分布式系统包括n个节点,一般而言,为了使得分布式系统可以具有节点容错能力,通常需要假设所容错的节点数量f,然后基于f确定分布式系统中节点的数量,即n。对于拜占庭容错,n=m+2f即可,n至少为4。此外,分布式系统也可以不具有拜占庭容错能力(既兼容一定数量的宕机节点,也兼容一定数量的作恶节点),而是仅仅具有普通容错能力,既兼容一定数量的宕机节点存在,不能兼容一定数量的作恶节点存在,这种情况下,n>2f即可,n至少为3。为了描述的方便,后文以拜占庭容错的情况为例进行说明,在此基础上,本领域技术人员容易想到普通容错的情况的实施例。
80.还需要说明的是,本文中所述的节点可以具体为设备或设备集群,设备例如可以是服务器。另外,在后文的描述中,将宕机或者作恶的节点称为错误节点,将非错误节点称为正确的节点。
81.图3示例性提供一种数据分发方法的流程,包括以下步骤:
82.s300:分发需求方基于纠删码技术将待分发的数据d转换成n个数据块。
83.首先需要说明的是,在下文中,采用如下描述规则:
84.f表示分布式系统所容错的节点数量,n表示分布式系统的节点数量。包括n在内的大写字母表示固定的数据或者固定的值,小写字母表示变量(f除外,属于特殊情况)。当描述小写字母所表示的变量时,意味着该变量需要将其可能的每个取值都分别赋予该变量。例如,节点i代表分布式系统中的每个节点,i的取值包括1到n中的多个数值或每个数值。
85.分发需求方是指对数据分发有需求的一方,分发数据方可以是用户的客户端,也可以是分布式系统中的任一节点。
86.现有的纠删码技术可以理解为将一个数据转换成n个不同数据块,基于这n个数据块中的m个数据块就可以恢复出原始数据。其中,将待分发的数据记为d,n个数据块包括di, i=1、

、n,基于所述n个数据块中的m个数据块可得到d,m<n,n=m+2f,m>f。需要强调的是,在将数据分发协议vcid或者vvcid应用于实现共识协议时,在一些优选的实施例中,可以将纠删码技术中可恢复原数据的数据块数量m设定为f+1,将分布式系统的节点数量n设定为大于m+2f。
87.s301:分发需求方生成用于验证数据块是否合法的特征交叉校验信息fpcc。
88.现有的fpcc技术可以实现对于任一数据块,验证该数据块是否属于利用纠删码技术从原数据中拆出的数据块。本文为了描述的方便,将数据块合法定义为数据块属于原始数据d的 n个数据块之一。fpcc为finger-printed cross-checksum的简称。fpcc含有n个纠删码数据块的哈希,和m个纠删码数据块的全域哈希(universal hash function)。m个数据
块的全域哈希需要保持纠删码数据块间的线性变换(linear combination)关系。
89.fpcc是一种数据结构,分发需求方在应用纠删码技术处理数据d时,可以生成fpcc。
90.s302:分布式系统的节点i获取分发需求方构建的分发消息。
91.此处需要说明,并不是分布式系统中的每个节点都必然会获取到分发需求方发送的分发消息,但是至少n-f个正确节点可以收到分发消息,因此,此处的节点i可以代表每个正确节点。
92.分发消息可以包括di与fpcc,不同正确节点接收到的di是不同的。
93.s303:节点i基于该分发消息中的fpcc验证di是否合法,若合法,则基于预设生成规则,利用该分发消息中的fpcc生成已校验信息,并对已校验信息进行签名得到签名si。
94.在一些实施例中,发呢发消息还可以包含分发流程标识,用于区分不同的待存储的数据的分发流程。
95.此处的预设生成规则可以是,将该分发消息中的fpcc作为已校验信息;或者将该分发消息中的fpcc的哈希值作为已校验信息。
96.如果验证不合法,则节点i可以不生成已校验信息,也就不会得到签名si。
97.容易理解,不同正确节点得到的签名si中i是不同的,因此签名si也是不同的。
98.s304:分发需求方获取节点i构建准备消息,该准备消息包括已校验信息与si;并且,对该准备消息中的si进行验证。
99.如果前文所述的分发消息还包含分发流程标识,则每个准备消息还可以包含分发流程标识。
100.s305:分发需求方若确定获取到至少大于(n+f)/2个准备消息包含相同的已校验信息,并且,该至少大于(n+f)/2个准备消息皆通过签名验证,则基于该至少大于(n+f)/2个准备消息中的签名,构建包含签名的结束消息并发送给节点i。
101.如果前文所述的分发消息还包含分发流程标识,则每个结束消息还包括分发流程标识。
102.s306:节点i在获取到分发需求方构建的结束消息之后,验证结束消息包含的签名,若验证通过,则确认di与fpcc。
103.此外,针对已校验信息采用的签名算法,可以是门限签名、普通签名或者聚合签名。
104.在一些实施例中,各节点之间可以预先基于门限签名协议,约定共同的公钥pk与节点i的私钥ski;其中,该门限签名协议的门限值≥大于(n+f)/2。节点i可以使用私钥ski对已校验信息进行签名得到签名si。分发需求方可以基于门限签名协议,将该至少大于(n+f)/2 个准备消息中的签名组合成门限签名s,并构建包含s的结束消息。节点i可以使用公钥pk 验证s。
105.另外,可以在图3所示的数据分发方法的基础上,增加对分发需求方的权限控制功能。只要拥有权限的分发需求方才可以向分布式系统写入数据。
106.图4示例性提供另一种数据分发方法的流程,包括以下步骤:
107.s400:分发需求方基于纠删码技术将待分发的数据d转换成n个数据块。
108.s401:分发需求方生成用于验证数据块是否合法的特征交叉校验信息fpcc。
109.s402:分布式系统的节点i获取分发需求方构建的分发消息。
110.s403:节点i基于该分发消息中的fpcc验证di是否合法,并且,验证l是否为基于fpcc 得到的签名,若验证结果皆为是,则基于预设生成规则,利用该分发消息中的fpcc生成已校验信息,并对已校验信息进行签名得到签名si。
111.s404:分发需求方获取节点i构建准备消息,该准备消息包括已校验信息与si;并且,对该准备消息中的si进行验证。
112.s405:分发需求方若确定获取到至少大于(n+f)/2个准备消息包含相同的已校验信息,并且,该至少大于(n+f)/2个准备消息皆通过签名验证,则基于该至少大于(n+f)/2个准备消息中的签名,构建包含签名的结束消息并发送给节点i。
113.s406:节点i在获取到分发需求方构建的结束消息之后,验证结束消息包含的签名,若验证通过,则确认di、fpcc与l。
114.图4所示方法与图3所示方法的主要区别在于,图4所示方法可以实现对分发需求方的权限控制。
115.分发需求方构建的分发消息中除了需要至少包含di、fpcc,还需要包含l,l是分发需求方的签名。在一些实施例中,l是分发需求方对fpcc生成的签名。容易理解,l不能是分发需求方对d的签名,因为每个节点不能拿到完整的数据d,无法实现对这样的签名的验证。
116.通过图3或图4所示方法,在分布式系统中实现数据分发过程中,可以占用更少的网络带宽,并且节点间需要交互的消息数量较少,带来更低的消息复杂度,实际上,上述技术方案所实现的消息复杂度是线性的。
117.图5示例性提供一种数据共识方法的流程,包括以下步骤:
118.s501:节点i确定针对该同一事项所提议的数据di,并且基于既有的数据分发方法,将 di对应的数据块dij分发给节点j。
119.其中,i=1、

、n,j=1、

、n,dij是基于纠删码技术将di转换成的数据块。
120.s502:节点j在确认dij之后,触发针对di的聚合签名流程。
121.聚合签名流程可以包括:针对di对应的唯一标识进行签名得到签名ei,并将ei返回给节点i;节点i基于搜集到的至少n-f个ei,得到聚合签名并发送给节点j;节点j在获取到节点i对应的聚合签名之后,将节点i加入本地的节点清单。
122.s503:节点j基于公平抛币协议,将本地的节点清单进行公共随机排序。
123.s504:节点j判断自身是否确认了排序中第一个节点提议的数据的数据块,若是,则将该节点对应的聚合签名进行广播;若确定获取到至少一个该节点对应的聚合签名,则将该节点的提议确定为节点j接受的提议;若确定未获取到该节点对应的聚合签名,则继续判断自身是否确认了排序中下一个节点提议的数据的数据块,直至确定出节点j接受的提议。
124.s505:节点j将自身接受的提议所对应的数据块进行广播,以及,基于自身获取到的同一提议对应的至少f+1个不同数据块,恢复得到该提议对应的数据,作为达成一致性共识的数据。
125.在一些实施例中,di对应的唯一标识可以:di对应的分发流程标识与di对应的聚合签名流程标识。
126.图6示例性提供一种多元共识方法的流程。如图6所示,以分布式系统包括4个节点
为例,以应用的数据分发协议为vvcid为例,4个节点p1、p2、p3、p4分别提议自己认可的数据,发起自己的vvcid流程(步数为3step),每个vvcid流程完成后,进入每个vvcid 流程对应的echo流程(即前文所述的聚合签名流程,步数为2),聚合签名流程完成后,进入per阶段(即步骤s503,步数为1),在per阶段之后,进入循环repeat阶段(即步骤 s504),循环repeat阶段包括distribution步骤(步数为1)与aba步骤(步数为2*3=6),一般循环的期望轮数是1.5轮。循环repeat阶段之后,进入retrieval阶段(即步骤s505)。
127.可见,图5所示方法对应的期望步数为3+2+1+1.5*(1+2*3)+1=17.5。
128.进一步地,考虑到上述的数据共识方法实际上属于多元共识方法,即在共识流程中不区分主节点与非主节点(不像pbft协议那样),这意味着在实现一次上述的数据共识方法流程中,虽然分布式系统中每个节点都可以提议自己认可的数据,但是通常仅能使得分布式系统中各节点对其中一个节点所提议的数据达成共识,这样的话,其他节点提议的数据就相当于被“浪费”了。
129.因此,可以基于上述共识方法提出进一步改进。具体而言,每个节点可以先将自身提议的数据进行广播(可以理解为发送给分布式系统中的每个其他节点),然后,每个节点将自己收集到的各个节点所提议的数据形成数据集合,不同节点形成的数据集合可能不尽相同,那么,每个节点可以将自己形成的数据集合重新作为自己的提议,对该数据集合应用纠删码技术,实现数据分发方法,进而是实现数据共识。
130.图7示例性提供另一种数据共识方法的流程,包括以下步骤:
131.s701:节点i确定针对该同一事项所提议的数据di并广播。
132.s702:节点i将获取到的不同节点所提议的数据形成的数据集合bi,并且基于既有的数据分发方法,将bi对应的数据块bij分发给节点j。
133.其中,i=1、

、n,j=1、

、n,bij是基于纠删码技术将bi转换成的数据块。
134.s703:节点j在确认bij之后,触发针对bi的聚合签名流程。
135.聚合签名流程包括:针对bi对应的唯一标识进行签名得到签名ei,并将ei返回给节点 i;节点i基于搜集到的至少n-f个ei,得到聚合签名并发送给节点j;节点j在获取到节点i 对应的聚合签名之后,将节点i加入本地的节点清单。
136.s704:节点j基于公平抛币协议,将本地的节点清单进行公共随机排序。
137.s705:节点j判断自身是否确认了排序中第一个节点形成的数据集合的数据块,若是,则将该节点对应的聚合签名进行广播;若确定获取到至少一个该节点对应的聚合签名,则将该节点形成的数据集合确定为节点j接受的数据集合;若确定未获取到该节点对应的聚合签名,则继续判断自身是否确认了排序中下一个节点形成的数据集合的数据块,直至确定出节点j接受的数据集合。
138.s706:节点j将自身接受的数据集合所对应的数据块进行广播,以及,基于自身获取到的同一数据集合对应的至少f+1个不同数据块,恢复得到该数据集合,作为达成一致性共识的数据集合。
139.在一些实施例中,节点i确定针对该同一事项所提议的数据di并广播,可以具体包括:节点i确定针对该同一事项所提议的数据di,对di进行签名后广播。相应的,节点i将获取到的不同节点所提议的数据形成的数据集合bi,可以具体包括:节点i将获取到的、且通过签名验证的不同节点所提议的数据形成的数据集合bi。
140.更进一步地,考虑到上述的改进后的数据共识方法的原理本质上是,将一组不同节点提出的小提议聚合成一个大提议,将大提议对应的数据集合视为一个数据整体,应用纠删码技术进行数据分发,这会导致,发明人发明的既有的数据分发方法仅仅是将数据集合视为一个数据整体,仅会对数据集合对应的fpcc的签名进行验证,而不会对数据集合中每个数据分别应用纠删码技术,也就不会存在每个数据对应的fpcc,也就不会对每个数据对应的fpcc的签名进行验证,这意味着无法在数据分发阶段实现对数据集合中的每个数据对应的提议的发起节点进行权限控制,而只能在数据共识阶段,在将某个数据集合暂时认定为可共识的数据集合之后,各节点恢复出该数据集合,对数据集合中的每个数据进行签名验证,如果验证失败,还需要再回到共识阶段重新认定可共识的数据集合,这样会增加很多共识轮数,降低共识效率。
141.为此,可以提出一种更加改进的数据共识方法。对既有的数据分发方法进行改动,节点在将数据集合作为提议进行数据分发时,不是对数据集合整体应用纠删码技术,而是深入到集合内部,对每个数据分别应用纠删码技术,并生成每个数据对应的fpcc。然后,将一组不同数据的数据块形成一个子集,将不同子集分发给不同节点。如此,节点就可以对自己获取到的子集中的每个数据块进行合法性验证,验证该数据块是否与相应的fpcc匹配,也可以验证fpcc的签名是否正确,从而可以在数据分发流程中就将未通过验证的节点所分发的数据集合排除掉,使得这样的数据集合不能进入后续共识流程,这样一来,各节点在进行共识时,不必针对这样的数据集合进行一轮共识,可以节省执行的共识轮数,提升共识效率。
142.图8示例性提供另一种数据共识方法的流程,包括如下步骤:
143.s801:节点i确定针对该同一事项所提议的数据di并广播。
144.s802:节点i将获取到的不同节点所提议的数据形成的数据集合bi,并基于纠删码技术将bi中的数据dk转换成n个数据块。
145.其中,dk的n个数据块包括dki,k=1、

、ki,ki为bi中数据的数量,i=1、

、n,基于dk的n个数据块中的m个数据块可得到dk,m<n,n=m+2f,m>f,f为包括n个节点的分布式系统所容错的节点数量。
146.s803:节点i生成用于验证数据块是否属于dk的n个数据块的特征交叉校验信息fpcck。
147.s804:节点j获取节点i构建的分发消息,该分发消息包括dki、fpcck与lk。
148.s805:节点j基于该分发消息中的fpcck验证dki是否属于dk的n个数据块,并且,验证lk是否为基于fpcck得到的签名,若验证结果皆为是,则基于预设生成规则,利用该分发消息中的fpcck生成已校验信息,并对fpcck对应的已校验信息进行签名得到签名sjk。
149.s806:节点j构建准备消息,该准备消息包括已校验信息与sjk;并且,对该准备消息中的sjk进行验证。
150.s807:节点i若确定获取到至少大于(n+f)/2个准备消息包含相同的已校验信息,并且,该至少大于(n+f)/2个准备消息皆通过签名验证,则基于该至少大于(n+f)/2个准备消息中的签名,构建包含签名的结束消息并发送给节点j。
151.s808:节点j在获取到节点i构建的结束消息之后,验证结束消息包含的签名,若验证通过,则确认dki、fpcck与lk,并确认bij;bij包括k所有取值的dki。
152.s809:节点j在确认bij之后,触发针对bi的聚合签名流程。
153.聚合签名流程包括:针对bi对应的唯一标识进行签名得到签名ei,并将ei返回给节点 i;节点i基于搜集到的至少n-f个ei,得到聚合签名并发送给节点j;节点j在获取到节点i 对应的聚合签名之后,将节点i加入本地的节点清单。
154.s810:节点j基于公平抛币协议,将本地的节点清单进行公共随机排序。
155.s811:节点j判断自身是否确认了排序中第一个节点形成的数据集合的数据块,若是,则将该节点对应的聚合签名进行广播;若确定获取到至少一个该节点对应的聚合签名,则将该节点形成的数据集合确定为节点j接受的数据集合;若确定未获取到该节点对应的聚合签名,则继续判断自身是否确认了排序中下一个节点形成的数据集合的数据块,直至确定出节点j接受的数据集合。
156.s812:节点j将自身接受的数据集合所对应的数据块进行广播,以及,基于自身获取到的同一数据集合对应的至少f+1个不同数据块,恢复得到该数据集合,作为达成一致性共识的数据集合。
157.在一些实施例中,各节点之间可以预先基于门限签名协议,约定共同的公钥pk与节点j 的私钥skj;其中,该门限签名协议的门限值至少大于(n+f)/2。如此,节点j可以使用私钥 ski对fpcck对应的已校验信息进行签名得到签名sjk。进而,节点i可以基于门限签名协议,将该至少大于(n+f)/2个准备消息中的签名组合成门限签名sk,并构建包含sk的结束消息。节点j可以使用公钥pk验证sk。
158.在一些实施例中,分布式系统为区块链系统;数据di为节点i基于自身缓存中的交易打包成的区块。
159.在一些实施例中,节点j在得到该数据集合之后,执行该数据集合中每个区块中的交易,并在执行完每个交易之后,将该数据集合中每个区块写入区块链。
160.上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机。具体的,计算机例如可以为个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任何设备的组合。
161.为了描述的方便,描述以上装置时以功能分为各种单元分别描述。当然,在实施本说明书时可以把各单元的功能在同一个或多个软件和/或硬件中实现。
162.本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。
163.本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和 /或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和 /或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用
于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
164.本说明书可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本说明书,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
165.这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
166.这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。在一个典型的配置中,计算机包括一个或多个处理器(cpu)、输入/输出接口、网络接口和内存。
167.内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(ram)和/或非易失性内存等形式,如只读存储器(rom)或闪存(flash ram)。内存是计算机可读介质的示例。
168.计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(pram)、静态随机存取存储器(sram)、动态随机存取存储器(dram)、其他类型的随机存取存储器(ram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、快闪记忆体或其他内存技术、只读光盘只读存储器 (cd-rom)、数字多功能光盘(dvd)或其他光学存储、磁盒式磁带、磁盘存储、量子存储器、基于石墨烯的存储介质或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitorymedia),如调制的数据信号和载波。
169.还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
170.上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
171.在本说明书一个或多个实施例使用的术语是仅仅出于描述特定实施例的目的,而
非旨在限制本说明书一个或多个实施例。在本说明书一个或多个实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
172.应当理解,尽管在本说明书一个或多个实施例可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本说明书一个或多个实施例范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在
……
时”或“当
……
时”或“响应于确定”。
173.以上所述仅为本说明书一个或多个实施例的较佳实施例而已,并不用以限制本说明书一个或多个实施例,凡在本说明书一个或多个实施例的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本说明书一个或多个实施例保护的范围之内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1