一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种可再投票的二元共识方法及装置与流程

2021-12-15 02:07:00 来源:中国专利 TAG:


1.本技术涉及计算机技术领域,具体地,涉及一种可再投票的二元共识方法及装置。


背景技术:

2.二元共识是拜占庭容错协议(拜占庭共识,bft)的主要组成部分,目前已知的异步拜占庭共识协议都直接或者间接依赖二元共识,其可以使分布式系统在异步环境下达成共识。同时,二元共识也可以用于构造状态机复制(state machine replication),进而使用状态机复制为分布式容错系统建立基础,另外,二元共识还可以应用在数据库等技术领域。因此,对于二元共识的研究是目前业界重要的研究方向。


技术实现要素:

3.本技术实施例中提供了一种可再投票的二元共识方法即装置,用于解决现有技术中二元共识效率低的问题。
4.根据本技术实施例的第一个方面,提供了一种二元共识方法,其特征在于,应用于分布式系统中的任一共识节点,所述分布式系统至少包括n个共识节点,其中n≥3f 1,所述f为大于0的整数,所述方法包括:
5.针对任一待共识提议确定初始投票值;其中,投票值包括优先投票值以及其他投票值两种值,初始投票值为优先投票值或其他投票值;
6.在所述初始投票值为其他投票值、且满足预设条件的情况下,重新将所述初始投票值确定为优先投票值;
7.广播携带有投票值的首轮三类共识消息;
8.基于其他共识节点广播的首轮三类共识消息就所述优先投票值达成共识。
9.根据本技术实施例的第二个方面,提供了一种可再投票的二元共识装置,其特征在于,应用于分布式系统中的任一共识节点,所述分布式系统至少包括n个共识节点,其中n≥3f 1,所述f为大于0的整数,所述装置包括:
10.处理模块,针对任一待共识提议确定初始投票值;其中,投票值包括优先投票值以及其他投票值两种值,初始投票值为优先投票值或其他投票值;
11.在所述初始投票值为其他投票值、且满足预设条件的情况下,重新将所述初始投票值确定为优先投票值;
12.通信模块,广播携带有投票值的首轮三类共识消息;
13.所述处理模块,还用于基于其他共识节点广播的首轮三类共识消息就所述优先投票值达成共识。
14.采用本技术实施例中提供的共识方法,各个共识节点在共识首轮通过广播三次投票值,其中投票值中包括优先投票值,使各个共识节点可以在共识首轮就优先投票值快速达成共识,提高了分布式系统中各个共识节点的共识效率,进而提高了分布式系统的处理能力。
附图说明
15.此处所说明的附图用来提供对本技术的进一步理解,构成本技术的一部分,本技术的示意性实施例及其说明用于解释本技术,并不构成对本技术的不当限定。在附图中:
16.图1a为本说明书实施例的一种共识节点维护各个raba实例的示意图;
17.图1b为本说明书实施例的另一种共识节点维护各个raba实例的示意图;
18.图2为本说明书实施例的一种可再投票的二元共识方法的流程示意图;
19.图3为本说明书实施例的一种广播共识消息的流程示意图;
20.图4为本说明书实施例的另一种可再投票的二元共识方法的流程示意图;
21.图5为本说明书实施例的一种每轮共识过程中各共识节点通信的示意图;
22.图6为本说明书实施例的一种可再投票的二元共识装置的结构示意图;
23.图7是用于配置本说明书实施例装置的一种设备的结构示意图。
具体实施方式
24.二元共识是拜占庭容错协议(拜占庭共识,bft)的主要组成部分,目前已知的异步拜占庭共识协议都直接或者间接依赖二元共识,其可以使区块链等分布式系统在异步环境下达成共识。同时,二元共识也可以用于构造状态机复制(state machine replication),进而使用状态机复制为分布式容错系统建立基础,另外,二元共识还可以应用在数据库等技术领域。
25.二元共识中,二元是指两个值,通常用0和1表示,分布式系统中各个节点可以就两个值中的某个值达成一致,而该值对于分布式系统来说往往具有重要的实际意义。以二元共识应用在区块链网络为例,区块链网络中各个节点的数据需要保持一致,如果利用二元共识方法确保区块链中各个节点的数据一致,那么当各个节点针对某批交易达成共识为1时,则各个节点都存储该数据,当各个节点针对某批交易达成共识为0时,则各个节点都不存储该数据,这样就保证了各个节点存储数据的一致性。可以理解的是,如果二元共识的执行效率越高,各个节点就能够快速就二元中的某个值达成共识,则分布式系统的性能也就越好,因此如何提高二元共识的效率是目前业界重要的研究方向。
26.针对上述问题,本技术实施例中提供了一种可再投票的二元共识方法,应用于分布式系统中的任一个共识节点,该节点广播包括优先投票值的首轮共识消息,并基于接收到的其他共识节点发送的首轮共识消息在首轮就优先投票值达成共识,从而提高了二元共识的共识效率。
27.本技术实施例中的方案可以采用各种计算机语言实现,例如,面向对象的程序设计语言java和直译式脚本语言javascript等。
28.为了使本技术实施例中的技术方案及优点更加清楚明白,以下结合附图对本技术的示例性实施例进行进一步详细的说明,显然,所描述的实施例仅是本技术的一部分实施例,而不是所有实施例的穷举。需要说明的是,在不冲突的情况下,本技术中的实施例及实施例中的特征可以相互组合。
29.为了使本领域人员更为清楚的了解本方案,下面对本说明书中出现的一些名词进行解释说明:
30.在本说明书中,待共识提议可以理解为任一共识节点发出的数据,并希望其他共
识节点共同参与对该数据的共识,而投票值则用于表示各个共识节点对该数据的共识意见,其中投票值包括优先投票值以及其他投票值两种值,即各个共识节点可以对待共识提议存在共两种共识意见,优先投票值以及其他投票值在一个实施例中,可以用1和0分别进行表示,在其他实施例中,还可以用其他形式和符号进行表示,本说明书对于优先投票值以及其他投票值的具体形式不行进行限定,只要能够用于区分优先投票值和其他投票值均可。
31.以区块链场景为例,待共识提议可以是任一共识节点从本地交易池中获取的一批交易,并希望其他共识节点可以接收并存储该批交易,而投票值用于表示各个共识节点是否同意存储该待共识提议。
32.在其他应用场景中,待共识提议以及投票值会具有其他不同的实际含义,本说明书对此不进行限定。
33.如图1a所示,为分布式系统中的任一共识节点所要执行的二元共识实例的示意图,如分布式系统中共存在n个共识节点,为了方便说明将其中任一共识节点称为目标节点,分布式系统中的目标节点会针对每一个共识节点(包括其自身)分别利用本说明提出的可再投票的二元共识方法确定该节点提出的待共识提议的共识结果;如图中raba1‑
raba
n
,分别代表针对n个待共识提议进行可再投票的二元共识方法raba的示意图,raba1为目标节点针对共识节点1提出的待共识提议使用本说明书提出的可再投票二元共识方法进行处理的示意,raba2为目标节点针对共识节点2提出的待共识提议使用本说明书提出的可再投票二元共识方法进行处理的示意,以此类推。
34.从示意图中可以看出,目标节点在针对每个待共识提议进行共识时,会确定一个初始投票值(0或1),最终基于本说明提出的二元共识方法也会得到针对该待共识提议的共识结果(0或1)。
35.如图2所示,基于以上说明本说明书提出的一种可再投票的二元共识方法,应用于分布式系统中的任一共识节点,分布式系统至少包括n个共识节点,其中,共识节点是指参与共识过程的节点,可以理解的是,在分布式系统中通常还会存在其他不参与共识的节点,这些节点仅接收和存储共识节点的共识结果而不参与共识过程;另外,当系统中的恶意节点或称拜占庭节点过多时任何一种共识方法均无法确保系统中的共识节点达成共识,因此本说明书中规定该分布式系统包括n个共识节点,该n个共识节点中最多允许存在f个恶意节点,n≥3f 1,所述f和n均为大于0的整数,例如,当n为4时,f只能为1,当n为8时,f为2或1。本说明书中将f值预先设置为任一对应于n值的正整数。例如,当n为8时,可以将f设置为2。
36.可以理解的是本说明书提出的分布式系统中,各个节点没有主副之分,每个共识节点都在异步执行下述方法,当目标节点针对任一共识节点提出的待共识提议得到共识结果时,其他正确共识节点最终也会针对该待共识提议得到相同的共识结果,该分布式系统可以是区块链网络也可以是其他分布式系统,本说明书对此不进行限定。
37.该方法包括:
38.s201,针对任一待共识提议确定初始投票值;其中,投票值包括优先投票值以及其他投票值两种值,初始投票值为优先投票值或其他投票值;
39.s202,在所述初始投票值为其他投票值、且满足预设条件的情况下,重新将所述初始投票值确定为优先投票值;
40.本说明书中,投票值包括优先投票值以及其他投票值两种值,初始投票值为优先投票值或其他投票值;本说明书提出设置其中一种投票值为优先投票值,即希望各个共识节点偏向于该优先投票值达成共识,在一个具体的示例中可以用0和1分别表示优先投票值以及其他投票值,其中,优先投票值可以为1也可以为0,下文中均以优先投票值为1,以其他投票值为0为例进行说明。
41.根据上述图1a、以及对于图1a的说明可知,目标节点会针对每个共识节点的待共识提议分别确定共识结果,本图2所描述的即为目标节点针对每个待共识提议所要执行的共识过程。
42.在s201中,初始投票值在不同应用场景中可以根据不同的数据确定。下面以区块链场景为例,对目标节点确定初始投票值的方式进行说明,在区块链网络中,各个共识节点可以基于可靠广播rbc广播待共识提议,并且可以基于接收待共识提议的情况确定针对该待共识提议的初始投票值,在区块链网络中,目标节点可以是从本地交易池中随机获取预设数量的交易,或者按照交易存储的先后顺序,优先获取较早存储的预设数量的交易。可以理解的是,由于各个共识节点都会接收客户端请求的交易,因此各个共识节点都可以在本地维护自己的交易池。目标节点在获取了交易后,可以将获取的交易打包成为本次的待共识提议。目标节点在获取了本地待共识提议后,即可以基于可靠广播rbc协议,向其他共识节点广播本地待共识提议,同时也可以基于可靠广播rbc协议接收其他共识节点广播的待共识提议。可靠广播rbc协议的具体内容可以参照相关技术,本说明书对此不进行详述。
43.各个共识节点可以同时发出本地的待共识提议,因此目标节点可能会先后接收到不同共识节点发送的待共识提议。
44.目标节点具体可以是在接收到任一个共识节点通过可靠广播rbc协议广播的待共识提议的情况下,若还未针对该待共识提议开始执行共识过程即s201

s204,则将该待共识提议的初始投票值确定为优先投票值1;
45.在接收到n

f个共识节点广播的待共识提议的情况下,将还未开始执行共识过程的待共识提议的初始投票值确定为其他投票值0;
46.另外,目标节点在接收到任一个共识节点通过可靠广播rbc协议广播的待共识提议的情况下,若已针对该待共识提议开始执行共识过程,且还未得到该待共识提议的共识结果的情况下,则重新将该待共识提议的初始投票值确定为优先投票值1。
47.本实施例中,由于在接收到n

f个共识节点广播的待共识提议的情况下,将还未开始执行共识过程的待共识提议的初始投票值确定为其他投票值0,并且可靠广播rbc协议可以保证目标节点在接收任一待共识提议时,仅会接收到一次,而非多次接收同一待共识提议,因此,在接收到任一待共识提议后,若已经针对该待共识提议开始执行共识过程,则说明是以其他投票值0为初始投票值开始执行的,进一步,可以将初始投票值由其他投票值0修改为优先投票值1。即在区块链网络场景中,可以将预设条件配置为:若接收到该待共识提议,且还未得到该待共识提议的共识结果。
48.以n为7,f为2为例进行说明,目标节点在接收到任一共识节点广播的待共识提议之后,确定是否已经开始针对该待共识提议执行共识过程,如果没有,则将该待共识提议的初始投票值确定为优先投票值1,并开始执行s203

s204,以得到针对该待共识提议的共识结果。
49.另外,在确定接收到n

f即7

2=5个共识节点广播的待共识提议,即已经开始针对5个待共识提议分别以优先投票值1作为输入开始执行共识过程,可以将剩余的其他还未开始执行共识过程的2个待共识提议的初始投票值确定为其他投票值0,并针对这剩余的2个待共识提议开始执行共识过程。
50.同时,目标节点在接收到任一共识节点广播的待共识提议之后,若已针对该待共识提议开始执行共识过程,并且该待共识提议的初始投票值为其他投票值0,且还未得到该待共识提议的共识结果,则重新将该待共识提议的初始投票值确定为优先投票值。
51.在确定任一个待共识提议存在初始投票值的情况下,即针对该待共识提议执行共识过程。
52.如图1b所述,区块链网络中共存在7个共识节点,每个共识节点需要在针对7个共识节点发出的待共识提议分别达成共识,如图中所示,需要维护7对rbc raba实例,其中raba即为本说明书提出的可再投票的二元共识方法,其中n为7,f为2,目标节点在通过可靠广播rbc协议接收到了节点0

节点4的5个待共识提议后,就开始针对节点0

节点4的待共识提议分别执行可再投票的二元共识算法raba(reproposable asynchronous binary agreement),即将raba0‑
raba4的输入均设置为1(优先投票值)并开始执行,并且直接将对应于节点5和节点6的raba5和raba6的输入均设置为0(其他投票值)并开始执行,即在接收到n

f个共识节点的待共识提议的最后一个待共识提议的情况下,就开始触发剩余f个还未开始执行raba的待共识提议开始执行,如图中所示,在节点3以1为输入执行开始raba3时,就将raba5和raba6的输入均设置为0,触发开始执行raba5和raba6。另外,节点5和节点6的raba5和raba6的输入设置为0之后,且还未得到raba5和raba6的输出结果时,如果又接收到了节点5和节点6的待共识提议,那么可以将raba5和raba6的输入更改为1,再次触发执行raba5和raba6,以得到raba5和raba6的输出结果。采用上述方式,可以保障各个待共识提议的二元共识过程基本上是在并行处理和发生的,进一步提升了共识的效率。
53.可以理解的是,上述方式仅是在区块链网络中确定初始投票值的方式,在其他应用场景中,还可以根据不同的数据确定待共识提议的初始投票值。
54.在上述s201中,目标节点在确定了初始投票值的情况下,不论初始投票值为优先投票值还是其他投票值,目标节点均可以执行s203,即广播该初始投票值,并接收其他共识节点广播的针对该待共识提议的初始投票值。
55.另外,本说明书提出为了使各个共识节点能够在首轮共识过程中就该优先投票值快速达成共识,因此允许目标节点在确定的初始投票值为其他投票值的情况下,若确定满足预设条件,则可以重新将所述初始投票值确定为优先投票值,并再次执行s203。在不满足预设条件的情况下,不允许目标节点修改初始投票值,在不同分布式系统应用场景中可以灵活的配置不同的预设条件。可以理解的是,上述仅以区块链网络应用场景为例进行说明,在其他的应用场景中,可以根据不同的场景需求配置不同的预设条件,本步骤中,允许目标节点再投票,即针对同一个待共识提议确定两次初始投票值,允许目标节点在某个待共识提议的初始投票值为其他投票值的情况下,将初始投票值修改为优先投票值,目的在于可以使各个共识节点可以快速就优先投票值达成共识。
56.s203,广播携带有投票值的三类共识消息;
57.s204,基于其他共识节点广播的三类共识消息就所述优先投票值达成共识。
58.上述s203中,目标节点具体可以是执行如图3所述的步骤:
59.s301,将初始投票值携带在首轮第一共识消息中进行广播;接收其他共识节点广播的首轮第一共识消息;
60.目标节点可以按照上述方法确定初始投票值,目标节点可以将本地确定的初始投票值添加到首轮第一共识消息中,并通过认证信道将第一共识消息传输至分布式系统中的其他共识节点,当然在没有认证信道时,为了保证数据传输的安全性,还可以通过数字签名或公钥技术设施等密码学工具保证共识消息传输的安全性,本说明书对此不进行限定。
61.在一个实施例中,第一共识消息可以是bval
r
格式的消息,目标节点可以广播形如bval
r
(est
r
)消息,其中est
r
为投票值,投票值est
r
是一个二进制数(0或1),r为共识轮,首轮即第0轮,共识轮从0开始以1为步长递增。可以理解的是,分布式系统中的全部正确节点都在执行目标节点所执行的步骤,即其他共识节点也会广播包括投票值的第一共识消息;此时,目标节点会接收到来自其他共识节点发送的第一共识消息,即各个共识节点均会通过共识消息携带自身对应某个待共识提议的投票意见。
62.在一个实施例中,如果目标节点在当前共识轮接收到f 1个第一共识消息,即超过恶意节点数量的第一共识消息,如果这f 1个第一共识消息中的投票值相同,且与本地广播的投票值不一致,目标节点则将本轮本地投票值修改为与f 1个第一共识消息中投票值相同的值,并再次广播第一共识消息。例如,如果目标节点收到f 1个bval
r
(b)消息,且b与该目标节点的当前轮首次广播的投票值est
r
不相等,该目标节点将广播其中,本步骤目的是为了让本地节点可以更正本地投票值。
63.s302,基于所述初始投票值以及其他共识节点广播的首轮第一共识消息,重新确定首轮投票值,并将重新确定的首轮投票值携带在首轮第二共识消息中进行广播;
64.其中,各个共识节点每轮仅发送一次第二共识消息,具体确定第二共识消息中携带信息的方式可以如下:
65.在一个实施例中,可以是目标节点在确定本地的初始投票值为优先投票值的情况下,就将优先投票值重新确定为首轮投票值,并将重新确定的首轮投票值添加到首轮第二共识消息中进行广播。
66.例如,目标节点广播bval0(est0)消息,其中est0为1(优先投票值),则可以直接将1存入bin_values0(首轮第一集合,r=0)并广播aux0(1)。其中aux
r
为第二共识消息格式。
67.另外,在目标节点的本地初始投票值不为优先投票值的情况下,目标节点在接收到2f 1条首轮第一共识消息的情况下,即可以根据接收到的第一共识消息重新确定首轮投票值,具体的,如果这2f 1条首轮第一共识消息中的投票值相同,目标节点则将该投票值添加到首轮第一集合中。例如,如果目标节点收到2f 1个bval0(b)消息,b∈{0,1}。则目标节点将b添加到首轮第一集合bin_values0中。本步骤中,在接收到2f 1条相同投票值的情况下,意味着系统中大多数节点投票值是相同的。
68.目标节点在首轮第一集合中添加值后,将最先添加到首轮第一集合中的投票值确定为首轮第二共识消息中的投票值,即重新确定的首轮投票值,将重新确定的首轮投票值添加到首轮第二共识消息中进行广播。
69.s303,基于所述重新确定的首轮投票值以及其他共识节点广播的首轮第二共识消
息确定第二集合中的值,将第二集合携带在首轮第三共识消息中进行广播。
70.目标节点在发送首轮第二共识消息后,即可以首先确定本地发送的首轮第二共识消息中携带的投票值是否为优先投票值,若是,则将优先投票值添加到本轮第二集合中。例如,目标节点发的首轮第二共识消息为aux0(1),则可以直接将1(优先投票值)添加到首轮第二集合vals中,将首轮第二集合vals携带在第三共识消息conf0()中,即通过第三共识消息发送conf0(1)。
71.另外,如果本地发送的首轮第二共识消息中携带的投票值不为优先投票值,而是其他投票值,则在收到n

f条合法第二共识消息的情况下,将收到的第二共识消息中的全部投票值确定为首轮第二集合中的值。
72.合法第二共识消息是指,接收到的首轮第二共识消息中的投票值存储于本地首轮第一集合中,若不存在则暂不接收,而是先缓存消息,等到其中的投票值存储于本地首轮第一集合中才进行处理。
73.n

f条合法第二共识消息中携带的投票值可能既包括优先投票值1,也包括其他投票值0,则将1和0都添加到首轮第二集合vals中,并将首轮第二集合携带在第三共识消息中,并广播第三共识消息。
74.上述描述的为s203的过程,即首轮广播投票值的过程,上述方式中,在目标节点本地通过第一类共识消息发送优先投票值后,即可以直接通过第二类共识消息广播优先投票值,同时在本地通过第二类共识消息发送优先投票值后,即可以直接通过第三类共识消息广播优先投票值,而无需参考其他共识节点的意见,目的也是在于使各个节点可以就优先投票值快速达成共识,同时也可以使再投票后,针对优先投票值进行的共识速度可以超过针对其他投票值的共识速度。
75.下面对s204中,基于其他共识节点广播的首轮三类共识消息就所述优先投票值达成共识的过程进行描述:
76.具体可以是在收到n

f条合法第三共识消息的情况下,将首轮公共抛币值置为优先投票值,若接收到的第三共识消息中携带的投票值均相同,且为所述首轮公共抛币值,则确定共识结果为所述优先投票值。其中,合法是指,接收到的首轮第三共识消息中的投票值存储于本地首轮第一集合中,若不存在则暂不接收。
77.例如,收的n

f条合法第三共识消息均为conf0(1),即携带的第二集合中仅为一个值且为优先投票值,本轮公共抛币值默认为优先投票值1,即接收到的第三共识消息中携带的投票值均为本轮公共抛币值,则确定共识结果为所述优先投票值1。
78.另外,如果n

f条合法第三共识消息携带的第二集合中的值不完全相同,或者携带的第二集合中的值相同,但不为优先投票值,则确定次轮第一共识消息中携带的投票值为优先投票值,并开始执行次轮共识过程。
79.可见,采用上述共识方法,可以使各个共识节点在首轮就优先投票值快速达成共识,即仅通过一轮共识就可以大概率达成共识,大大提高了共识效率。
80.本说明书提出的共识方法是按轮执行的,其中每轮共识中包括若干步骤,上述s201

s204即为首轮共识所执行的步骤,下面介绍其他轮共识所执行的步骤:
81.除了首轮以外,其他轮的共识均是采用如图4所示的方法达成共识:
82.在首轮没有就优先投票值达成共识的情况下,则可以开始循环执行s401

s402,直
到达到预设停止条件,其中预设停止条件可以为得到共识结果,且确定本轮公共抛币值为1;或者接收到停止指令等。另外,任一个节点仅会得到一次共识结果,在得到共识结果后虽然也会参与下轮共识但是并不会再次得到共识结果。
83.s401,广播本轮三类共识消息,所述本轮三类共识消息中携带本轮投票值;
84.s402,基于接收到的其他共识节点广播的本轮三类共识消息确定所述待共识提议的共识情况。
85.其中,在s401中具体可以是:
86.s401a,将本轮投票值携带在第一共识消息中进行广播;接收其他共识节点广播的第一共识消息;
87.s401b,基于其他共识节点广播的第一共识消息,重新确定本轮投票值,并将重新确定的本轮投票值携带在第二共识消息中进行广播;
88.s401c,基于其他共识节点广播的本轮第二共识消息确定本轮第二集合中的值,将本轮第二集合携带在本轮第三共识消息中进行广播。
89.其中,s401a的内容可以参照上述s301,这里不再详述,区别仅在于s301中通过第一共识消息广播的投票值为初始投票值,而在s401a中通过第一共识消息广播的投票值为基于上轮共识结果得到的投票值。
90.s401b,具体可以为:
91.目标节点在接收到2f 1条本轮第一共识消息的情况下,即可以根据接收到的第一共识消息重新确定本轮投票值,具体的,如果这2f 1条本轮第一共识消息中的投票值相同,目标节点则将该投票值添加到第一集合中。例如,如果目标节点收到2f 1个bval
r
(b)消息,b∈{0,1}。则目标节点将b添加到本轮第一集合bin_values
r
中。本步骤中,在接收到2f 1条相同投票值的情况下,则将该投票值存储到本轮第一集合中,目标节点在本轮第一集合中添加值后,将最先添加到本轮第一集合中的投票值确定为本轮第二共识消息中的投票值,即重新确定的本轮投票值,将重新确定的本轮投票值添加到本轮第二共识消息中进行广播。
92.s401c,具体可以为:在收到n

f条合法第二共识消息的情况下,将收到的第二共识消息中的投票值,确定为第二集合中的值。
93.n

f条合法第二共识消息中携带的投票值可能既包括优先投票值1,也包括其他投票值0,则将1和0都添加到本轮第二集合vals中,并将本轮第二集合携带在本轮第三共识消息中,并广播本轮第三共识消息。
94.上述描述的为s401的过程,即除了首轮以外其他轮广播投票值的过程,下面对s402中,基于接收到的其他共识节点广播的共识消息确定共识情况的过程进行描述:
95.在收到n

f条合法第三共识消息的情况下,确定本轮公共抛币值,其中其中,公共抛币值只有0或1两种值,各个共识节点可以在某一轮中协商出相同的公共抛币值,且除了首轮以外其他的每一轮的抛币值是随机的,获得公共抛币值的方法可以是采用门限签名算法等方式获得,具体内容可以参照相关技术,这里不进行限定。在确定了本轮公共抛币值之后,若接收到的第三共识消息中携带的投票值均相同,且为所述公共抛币值,则确定共识结果为所述投票值。否则,将次轮第一共识消息中携带的投票值设置为本轮公共抛币值,并开始执行次轮共识。
96.例如,接收到的n

f条第三共识消息conf
r
中携带的投票值仅有一个值,为优先投票值1,或者其他投票值0,且本轮公共抛币为1或0与第三共识消息中携带的投票值相同,则确定共识结果为该投票值,否则开始执行下轮共识。
97.可以理解的是,上述方式是共识节点中的任一正确节点所执行的方法,其他正确共识节点也在异步执行上述方法,采用上述方式,设于优先投票值,在首轮中各个共识节点大概率可以就优先投票值达成共识,同时每轮共识过程中,共识节点只需要执行3

4步(广播三次共识消息以及确定共识结果的步骤),从第一轮开始,每轮结束的概率是1/2,因此,在k轮共识后,各个节点达成共识的概率为1

(1/2)
k
,经过实验证明,各个共识节点完成共识的轮数平均为两轮,因此每个共识节点每次共识时,仅需执行6

8步。综上,采用上述方法可以使异步环境下的分布式系统中的各个共识节点快速就某个值达到共识状态,大大提升了异步环境下分布式系统的共识效率。同时,采用上述共识方法可以保证分布式系统中的共识节点满足以下性质,即以下技术效果:有效性:在所有正确节点广播的投票值均为v、且没有再次广播其他投票值的情况下,那么所有正确节点的共识结果均为该投票值v;一致终止:在所有正确节点广播的投票值为相同值v、且没有再次广播其他投票值的情况下,那么所有正确节点均可以终止共识操作,即达成共识;共识性:如果任一个正确节点确定某一投票值v为共识结果,那么其他终止共识操作的正确节点也会确定该投票值v为共识结果;有偏有效性:如果f 1个正确节点广播投票值v,那么正确节点在终止共识时,可以确定该投票值v为共识结果;有偏终止:如果q是正确节点的集合,其中q1是广播了投票值1没有再次广播投票值0的正确节点的集合,q2是广播了投票值0又再次广播了投票值1的正确节点的集合,如果以及q=q1∪q2,那么所有正确的节点都会达成共识;完整性:正确的节点就一个提议只达成一次共识。
98.在针对每个共识节点提出的共识提议达成共识之后,各个正确的共识节点会得到相同的共识结果,共识结果为1或者为0,在针对全部共识节点提出的共识提议达成共识之后,会得到包含0和1的序列。进一步即可以基于该序列执行相应的事务处理,仍以区块链网络为例,在区块链网络中,0或1用于指示是否将相应的共识提议打包成块。例如共有四个共识节点,共识节点1提出的共识提议为p1,共识节点2提出的共识提议为p2,共识节点3提出的共识提议为p3,共识节点4提出的共识提议为p4,使用上述共识方法进行共识后会分别针对p1

p4得到共识结果,进而会得到四个共识结果,组成一个01序列,例如得到的序列为(1,1,1,0),则达成的共识结果为所有节点将p1、p2以及p3打包成块存储在本地不存储p4,即各个共识节点根据共识结果对各共识提议进行了一致性处理,保证各个共识节点的数据一致性。
99.下面从代码实现角度对本说明书的可再投票二元共识方法的一种具体实施方式进行说明:
100.伪代码如下:
[0101][0102][0103]
上述伪代码中:
[0104]
若propose(v)被触发,节点开启第0轮,并调用trigger(v)函数;若repropose(1)被触发,且节点仍在第0轮,则调用trigger(v)。调用trigger(v),则节点广播bval0(v),若v=1且aux0()未被发出过,则广播aux0(1),若conf0()未被发出过,则广播conf0(1)。第一轮的公共抛币设置为0。下文描述第r轮的流程。
[0105]
节点广播bval
r
(estr)。若节点收到f 1条bval
r
(v)但未发出过bvalr(v),则广播bval
r
(v)。节点收到n

f条一致的bval
r
(v)消息,则将v加入bin_values集合。
[0106]
对于第一个被加入bin_values的值v且节点未发出过aux
r
(),节点广播aux
r
(v)。对于每一条收集到的aux
r
(b),节点接收这条消息的前提是b已经被加到了本地的bin_values,否则节点会缓存该消息,并且需要等待bin_values里包含b才进行处理。
[0107]
节点收集到n

f条aux
r
()消息后开始处理,其中vals是收到的aux
r
()中的值。节点广播conf
r
(vals)消息。对于每一条收集到的conf
r
(b),节点接受这条消息的前提是b已经被加到了本地的bin_values,若收到conf
r
(0,1),则0和1都必须在bin_values中,否则节点会缓存该消息,并且需要等待bin values里包含足够的值才进行处理。
[0108]
节点收集到n

f条conf
r
()消息后开始处理,其中vals为收到的conf
r
()中的值。节点开始与其余节点交互获取公共抛币,在第0轮,节点将公共抛币设置为1,同时处理。若节点仅收集到一个值ρ,且ρ等于公共抛币,则决定。在其余情况下,节点会使用公共抛币作为下一轮的输入est
r 1

[0109]
如图5所示,为上述可再投票的二元共识方法中,每轮共识过程中,各个共识节点进行通信的的示意图,即各个共识节点首先将投票值添加到第一共识消息中广播至其他节点,重新确认了投票值后采用第二共识消息信息广播,再次确定投票值后采用第三共识消息进行广播,最终基于交互的投票值确定共识结果。
[0110]
如图6所示,与前述一种可再投票的二元共识方法相对应,本说明书还提供了一种可再投票的二元共识装置,应用于分布式系统中的任一共识节点,所述分布式系统至少包括n个共识节点,其中n≥3f 1,所述f为大于0的整数,所述装置包括:
[0111]
处理模块610,针对任一待共识提议确定初始投票值;其中,投票值包括优先投票值以及其他投票值两种值,初始投票值为优先投票值或其他投票值;
[0112]
在所述初始投票值为其他投票值、且满足预设条件的情况下,重新将所述初始投票值确定为优先投票值;
[0113]
通信模块620,广播携带有投票值的首轮三类共识消息;
[0114]
所述处理模块610,还用于基于其他共识节点广播的首轮三类共识消息就所述优先投票值达成共识。
[0115]
在一个实施例中,所述处理模块610,还用于在首轮未就所述优先投票值达成共识的情况下,循环执行其他轮共识步骤,直到达到预设停止条件,其中其他轮共识步骤中:
[0116]
调用通信模块620,用于广播本轮三类共识消息,所述本轮三类共识消息中携带本轮投票值;
[0117]
所述处理模块610,用于基于接收到的其他共识节点广播的本轮三类共识消息确定所述待共识提议的共识情况。
[0118]
在一个实施例中,所述通信模块620,具体用于将初始投票值携带在首轮第一共识消息中进行广播;接收其他共识节点广播的首轮第一共识消息;
[0119]
所述处理模块610,具体用于基于所述初始投票值以及其他共识节点广播的首轮第一共识消息,重新确定首轮投票值;
[0120]
所述通信模块620,具体用于将重新确定的首轮投票值携带在首轮第二共识消息中进行广播;
[0121]
所述处理模块610,具体用于基于所述重新确定的首轮投票值以及其他共识节点广播的首轮第二共识消息确定第二集合中的值;
[0122]
所述通信模块620,具体用于将第二集合携带在首轮第三共识消息中进行广播。
[0123]
在一个实施例中,所述处理模块610,具体用于在所述初始投票值为优先投票值的情况下,将所述优先投票值重新确定为首轮投票值。
[0124]
在一个实施例中,所述处理模块610,还用于在所述初始投票值不为优先投票值,且在接收到其他共识节点广播的2f 1条首轮第一共识消息的情况下,若所述2f 1条第一共识消息中携带的投票值相同,则将该投票值添加到首轮第一集合中,并将最先添加所述首轮第一集合中的投票值重新确定为首轮投票值。
[0125]
在一个实施例中,所述处理模块610,具体用于若所述重新确定的首轮投票值为优先投票值,则确定优先投票值为第二集合中的值;
[0126]
若所述重新确定的首轮投票值不为优先投票值,则在收到n

f条合法第二共识消息的情况下,将收到的第二共识消息中的投票值,确定为首轮第二集合中的值。
[0127]
在一个实施例中,所述处理模块610,具体用于在收到n

f条合法第三共识消息的情况下,将首轮公共抛币值置为优先投票值,若接收到的第三共识消息中携带的投票值均相同、且为所述首轮公共抛币值,则确定共识结果为所述优先投票值;否则,将次轮第一共识消息中携带的投票值设置为优先投票值。
[0128]
在一个实施例中,所述通信模块620,具体用于将本轮投票值携带在第一共识消息中进行广播;接收其他共识节点广播的第一共识消息;
[0129]
处理模块610,具体用于基于其他共识节点广播的第一共识消息,重新确定本轮投票值,调用通信模块620将重新确定的本轮投票值携带在第二共识消息中进行广播;
[0130]
处理模块610,还用于基于其他共识节点广播本轮第二共识消息确定本轮第二集合中的值;调用通信模块620将本轮第二集合携带在本轮第三共识消息中进行广播。
[0131]
在一个实施例中,处理模块610,具体用于在接收到其他共识节点广播的2f 1条本轮第一共识消息的情况下,若所述2f 1条本轮第一共识消息中携带的投票值相同,则将该投票值添加本轮到第一集合中,并将最先添加到本轮第一集合中的投票值重新确定为本轮投票值。
[0132]
在一个实施例中,处理模块610,具体用于在接收到n

f条合法第二共识消息的情况下,将接收到的第二共识消息中的投票值,确定为第二集合中的值。
[0133]
在一个实施例中,处理模块610,在接收到n

f条合法第三共识消息的情况下,确定本轮公共抛币值,若接收到的第三共识消息中携带的投票值均相同,且为所述公共抛币值,则确定共识结果为所述投票值;否则,将次轮第一共识消息中携带的投票值设置为本轮公共抛币值,并开始执行次轮共识。
[0134]
上述设备中各个部件的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。
[0135]
对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的。可以根据实际的需要选择其中的部分或者全部模块来实现本说明书方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
[0136]
本说明书实施例还提供一种计算机设备,其至少包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其中,处理器执行所述程序时实现前述的方法。
该方法至少包括上述图2所示的方法。
[0137]
图7示出了本说明书实施例所提供的一种更为具体的计算设备硬件结构示意图,该设备可以包括:处理器1010、存储器1020、输入/输出接口1030、通信接口1040和总线1050。其中处理器1010、存储器1020、输入/输出接口1030和通信接口1040通过总线1050实现彼此之间在设备内部的通信连接。
[0138]
处理器1010可以采用通用的cpu(central processing unit,中央处理器)、微处理器、应用专用集成电路(application specific integrated circuit,asic)、或者一个或多个集成电路等方式实现,用于执行相关程序,以实现本说明书实施例所提供的技术方案。
[0139]
存储器1020可以采用rom(read only memory,只读存储器)、ram(random access memory,随机存取存储器)、静态存储设备,动态存储设备等形式实现。存储器1020可以存储操作系统和其他应用程序,在通过软件或者固件来实现本说明书实施例所提供的技术方案时,相关的程序代码保存在存储器1020中,并由处理器1010来调用执行。
[0140]
输入/输出接口1030用于连接输入/输出模块,以实现信息输入及输出。输入输出/模块可以作为组件配置在设备中(图中未示出),也可以外接于设备以提供相应功能。其中输入设备可以包括键盘、鼠标、触摸屏、麦克风、各类传感器等,输出设备可以包括显示器、扬声器、振动器、指示灯等。
[0141]
通信接口1040用于连接通信模块(图中未示出),以实现本设备与其他设备的通信交互。其中通信模块可以通过有线方式(例如usb、网线等)实现通信,也可以通过无线方式(例如移动网络、wifi、蓝牙等)实现通信。
[0142]
总线1050包括一通路,在设备的各个组件(例如处理器1010、存储器1020、输入/输出接口1030和通信接口1040)之间传输信息。
[0143]
需要说明的是,尽管上述设备仅示出了处理器1010、存储器1020、输入/输出接口1030、通信接口1040以及总线1050,但是在具体实施过程中,该设备还可以包括实现正常运行所必需的其他组件。此外,本领域的技术人员可以理解的是,上述设备中也可以仅包含实现本说明书实施例方案所必需的组件,而不必包含图中所示的全部组件。
[0144]
本说明书实施例还提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现前述的方法。该方法至少包括上述图2所示的方法。
[0145]
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(pram)、静态随机存取存储器(sram)、动态随机存取存储器(dram)、其他类型的随机存取存储器(ram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、快闪记忆体或其他内存技术、只读光盘只读存储器(cd

rom)、数字多功能光盘(dvd)或其他光学存储、磁盒式磁带,磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
[0146]
通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到本说明书实施例可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本说明书实施例的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,
该计算机软件产品可以存储在存储介质中,如rom/ram、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本说明书实施例各个实施例或者实施例的某些部分所述的方法。
[0147]
上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。
[0148]
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置实施例而言,由于其基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,在实施本说明书实施例方案时可以把各模块的功能在同一个或多个软件和/或硬件中实现。也可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
[0149]
以上所述仅是本说明书实施例的具体实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本说明书实施例原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本说明书实施例的保护范围。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献