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

一种适用于物联网的Raft共识方法与流程

2021-11-10 02:47:00 来源:中国专利 TAG:

一种适用于物联网的raft共识方法
技术领域
1.本发明涉及共识机制的技术领域,尤其涉及一种适用于物联网的raft共识方法。


背景技术:

2.raft共识算法是实现分布式共识的一种算法,主要用来管理日志复制的一致性,该共识算法以其更易理解、共识效率高而被许多分布式系统采用。
3.然而,由于传统raft共识算法采用的是多次通信投票选主方式,这对于通常采用p2p网络的分布式系统的通信效率提出更高要求,同时,基于投票选主的raft共识算法随机性很强,虽保障一定的安全性,但中心化程度过高,无法适用于弱信任环境中。通信环境要求过高及不适用于弱信任环境的问题,使得传统raft共识算法无法与物联网应用场景相耦合。


技术实现要素:

4.本部分的目的在于概述本发明的实施例的一些方面以及简要介绍一些较佳实施例。在本部分以及本技术的说明书摘要和发明名称中可能会做些简化或省略以避免使本部分、说明书摘要和发明名称的目的模糊,而这种简化或省略不能用于限制本发明的范围。
5.鉴于上述现有存在的问题,提出了本发明。
6.因此,本发明提供了一种适用于物联网的raft共识方法,能够解决共识算法与物联网应用场景耦合性问题。
7.为解决上述技术问题,本发明提供如下技术方案:包括,通过物联网采集设备实时采集分布式物理网网络中的物联网数据,并将所述物联网数据缓存于物联网网关;在60s k/n的时间内将物联网网关中的物联网数据进行打包,并统计打包的数据流量;基于线性同余算法的随机数函数及sha

256算法计算随机数nonce值;根据数据流量参数进行选主难度动态调整,进而确定目标值,并判断所述随机数nonce值是否符合所述目标值;若符合所述目标值,则保留符合证明;否则,则更新所述随机数nonce值,并继续判断更新后的随机数nonce值是否符合所述目标值;设计计时器并启动共识选主流程,根据符合目标值的随机数nonce值,选取共识主节点,并进行raft日志复制;其中,k为常数,n其各节点单位时间内接收到的数据流量大小。
8.作为本发明所述的适用于物联网的raft共识方法的一种优选方案,其中:所述计算随机数nonce值包括,所述基于线性同余算法的随机数函数的表达式为:
9.(ni 1)=(a*ni b)mod m
10.其中,i=0,1,...,m

1;m为当前时间戳;n为所述随机数nonce值,a为大素数,b为常数。
11.作为本发明所述的适用于物联网的raft共识方法的一种优选方案,其中:所述设计计时器包括,所述计时器包括心跳计时器、选主计时器和紧急选主计时器;设置所述心跳计时器的时间为150ms到300ms;设置所述选主计时器的时间为60s k/n;设置所述紧急选主
计时器的时间为k/n。
12.作为本发明所述的适用于物联网的raft共识方法的一种优选方案,其中:所述选主难度动态调整包括,设计难度动态调整函数,通过所述难度动态调整函数进行所述选主难度动态调整,所述难度动态调整函数如下式:
[0013][0014]
其中,d(h)为区块的难度;为前一区块的难度;为自适应调节出块难度函数;h
i
为当前区块号。
[0015]
作为本发明所述的适用于物联网的raft共识方法的一种优选方案,其中:所述自适应调节出块难度函数包括,
[0016][0017][0018]
其中,χ是调整的单位,为调整的系数;所述自适应调节出块难度函数的下界为d0,上界为

99;p(h)
hs
为父区块时间戳。
[0019]
作为本发明所述的适用于物联网的raft共识方法的一种优选方案,其中:所述判断包括,判断条件如下:
[0020]
hash(rand(h,n))≤n/d(h)
[0021]
其中,其中h和n为输入,即区块头哈希值、以及header中的nonce值;n为节点接收的流量数值,n/d(h)为所述目标值。
[0022]
作为本发明所述的适用于物联网的raft共识方法的一种优选方案,其中:还包括,可在leader节点未出现宕机的情况下进行共识选主和在网络环境不可靠,leader节点出现宕机的情况下启动共识选主流程。
[0023]
作为本发明所述的适用于物联网的raft共识方法的一种优选方案,其中:所述raft日志复制包括,通过client客户端向所述leader节点提交指令,当所述leader节点收到所述指令后,将所述指令写入本地日志中;所述leader节点将所述指令并发复制给其他节点,并等待所述其他节点将指令写入所述本地日志中;直至所有指令都被写入到所述本地日志中,所述leader节点将指令提交给状态机,而后状态机将执行结果返回给所述client客户端。
[0024]
作为本发明所述的适用于物联网的raft共识方法的一种优选方案,其中:选取所述共识主节点包括,将符合目标值的第一个随机数nonce值作为所述共识主节点。
[0025]
本发明的有益效果:本发明基于传统raft共识算法简单的日志复制流程,减少了消息繁杂的通信环节,并根据节点接收采集设备所接收的数据量的动态变化实现主节点的动态选举,且安全可靠,运维成本低。
附图说明
[0026]
为了更清楚地说明本发明实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其它的附图。其中:
[0027]
图1为本发明第一个实施例所述的一种适用于物联网的raft共识方法的流程示意图;
[0028]
图2为本发明第一个实施例所述的一种适用于物联网的raft共识方法的任期概念示意图;
[0029]
图3为本发明第一个实施例所述的一种适用于物联网的raft共识方法的事务请求提交示意图;
[0030]
图4为本发明第一个实施例所述的一种适用于物联网的raft共识方法的事务广播示意图;
[0031]
图5为本发明第一个实施例所述的一种适用于物联网的raft共识方法的事务同步示意图;
[0032]
图6为本发明第二个实施例所述的一种适用于物联网的raft共识方法的传统raft共识方法测试数据示意图。
[0033]
图7为本发明第二个实施例所述的一种适用于物联网的raft共识方法的本方法测试数据示意图。
具体实施方式
[0034]
为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合说明书附图对本发明的具体实施方式做详细的说明,显然所描述的实施例是本发明的一部分实施例,而不是全部实施例。基于本发明中的实施例,本领域普通人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明的保护的范围。
[0035]
在下面的描述中阐述了很多具体细节以便于充分理解本发明,但是本发明还可以采用其他不同于在此描述的其它方式来实施,本领域技术人员可以在不违背本发明内涵的情况下做类似推广,因此本发明不受下面公开的具体实施例的限制。
[0036]
其次,此处所称的“一个实施例”或“实施例”是指可包含于本发明至少一个实现方式中的特定特征、结构或特性。在本说明书中不同地方出现的“在一个实施例中”并非均指同一个实施例,也不是单独的或选择性的与其他实施例互相排斥的实施例。
[0037]
本发明结合示意图进行详细描述,在详述本发明实施例时,为便于说明,表示器件结构的剖面图会不依一般比例作局部放大,而且所述示意图只是示例,其在此不应限制本发明保护的范围。此外,在实际制作中应包含长度、宽度及深度的三维空间尺寸。
[0038]
同时在本发明的描述中,需要说明的是,术语中的“上、下、内和外”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的限制。此外,术语“第一、第二或第三”仅用于描述目的,而不能理解为指示或暗示相对重要性。
[0039]
本发明中除非另有明确的规定和限定,术语“安装、相连、连接”应做广义理解,例如:可以是固定连接、可拆卸连接或一体式连接;同样可以是机械连接、电连接或直接连接,也可以通过中间媒介间接相连,也可以是两个元件内部的连通。对于本领域的普通技术人员而言,可以具体情况理解上述术语在本发明中的具体含义。
[0040]
实施例1
[0041]
参照图1~图5,为本发明的第一个实施例,该实施例提供了一种适用于物联网的raft共识方法,包括:
[0042]
s1:通过物联网采集设备实时采集分布式物理网网络中的物联网数据,并将物联网数据缓存于物联网网关。
[0043]
s2:在60s k/n的时间内将物联网网关中的物联网数据进行打包,并统计打包的数据流量。
[0044]
其中需要说明的是,k为常数,可根据需求进行设定;n其各节点单位时间内接收到的数据流量大小。
[0045]
s3:基于线性同余算法的随机数函数及sha

256算法计算随机数nonce值。
[0046]
将数据时间戳、父块哈希值、当前区块哈希值、父块区块难度、流量值结合线性同余算法的随机数函数及sha

256算法获得随机数nonce值。
[0047]
具体的,基于线性同余算法的随机数函数rand()的表达式为:
[0048]
(ni 1)=(a*ni b)mod m
[0049]
其中,i=0,1,...,m

1;m为当前时间戳;n为随机数nonce值,a为常数,且为大素数,b为常数。
[0050]
s4:根据数据流量参数进行选主难度动态调整,进而确定目标值,并判断随机数nonce值是否符合目标值。
[0051]
设计难度动态调整函数,通过难度动态调整函数进行选主难度动态调整,难度动态调整函数如下式:
[0052][0053]
其中,d(h)为区块的难度;为前一区块的难度;h
i
为当前区块号;为自适应调节出块难度函数,其表达式分别如下:
[0054][0055][0056]
其中,χ是调整的单位,为调整的系数;为父区块时间戳;自适应调节出块难度函数的下界为d0,上界为

99,以应对被黑客攻击或者其他目前想不到的黑天鹅事件。
[0057]
进一步的,通过下式判断随机数nonce值是否符合目标值:
[0058]
hash(rand(h,n))≤n/d(h)
[0059]
其中,其中h和n为输入,即区块头哈希值、以及header中的nonce值;n为节点接收的流量数值;n/d(h)为目标值;在h和n确定的情况下,d(h)越大,挖矿难度越大;同时,n越大公式右边的数值越大,整体难度越小;
[0060]
若随机数nonce值符合目标值,则保留随机数nonce值;否则,则更新随机数nonce值,并继续判断更新后的随机数nonce值是否符合目标值。
[0061]
若更新后的随机数nonce值符合目标值,则停止更新随机数nonce值。
[0062]
s5:设计计时器并启动共识选主流程,根据符合目标值的随机数nonce值,选取共识主节点,并进行raft日志复制。
[0063]
其中需要说明的是,本方法将时间分解成任意长度的terms,如图2所示,并定义分布式网络节点有三种状态:follower,candidate,leader,状态之间是相互转换的。
[0064]
terms有连续单调递增的编号,每个term开始于选举,这一阶段每个candidate都试图成为leader节点;如果一个candidate选举成功,它就在该term剩余周期内履行leader职责;在某种情形下,可能选出leader节点的情况,这时新的term立即开始;本方法确保在任何term都只可能存在一个leader节点;term在该共识中用作逻辑时钟,servers可以利用term判断一些过时的信息:比如过时的leader节点;另外,每台server都存储当前term号,它随时间单调递增;term号可以在任何server通信时改变:如果某个server节点的当前term号小于其它servers,那么这台server必须更新它的term号,保持一致;如果一个candidate或者leader节点发现自己的term过期,则降级成follower;如果某个server节点收到一个过时的请求(拥有过时的term号),它会拒绝该请求。
[0065]
设计计时器包括心跳计时器、选主计时器和紧急选主计时器;每个节点(follower,candidate,leader)都有计时器;其中,心跳计时器的作用是follower节点验证leader节点工作状态是否正常,设置心跳计时器的时间为150ms到300ms;选主计时器的作用是follower节点在选主阶段根据计时器发送竞选消息,设置选主计时器的时间为60s k/n;紧急选主计时器是leader节点发生宕机等故障时,心跳计时器倒计时结束后,各节点启用紧急选主计时器,设置紧急选主计时器的时间为k/n。
[0066]
进一步的,启动共识选主流程:
[0067]
具体的,(1)若在网络环境不可靠,leader节点出现宕机的情况下进行共识选主:
[0068]
若当leader节点出现宕机,网络中的其他follower则无法接收leader节点发送的心跳信息;当心跳计时器的倒计时结束后,通过follower节点启动紧急选主计时器,当紧急选主计时器的倒计时结束后,需要竞选为主节点的节点进行发送选主消息,节点状态变为candidate,并启动共识选主流程。
[0069]
(2)若在leader节点未出现宕机的情况下选主:
[0070]

网络节点最开始的状态都是follower,每个节点选主计时器倒计时结束后,倒计时结束的节点状态变成candidate,然后开始选举,并收集网络中消息进行打包,同时根据s4进行计算和判断,若随机数nonce值符合目标值,则将打包的物联网数据和随机数nonce值发送给其他节点。
[0071]

将网络中其他节点对步骤s4的判断结果进行验证,若验证通过,则将这个节点的状态由candidate变成leader,同时分配该leader节点一个新的term,并在每个一小段时间后,给所有的follower发送一个心跳消息以保持所有节点的状态,follower收到leader
节点的心跳消息后重置心跳计时器;
[0072]

设置选主计时器为60s k/n,每过大约1分钟,网络中follower节点选主计时器倒计时结束,即可发起新一轮的选主活动,其后活动流程为:网络节点最开始的状态都是follower,每个节点选主计时器倒计时结束后,倒计时结束的节点状态变成candidate,开始选举,并收集网络中物联网数据进行打包。
[0073]
进一步的,将最先找到满足难度设定的随机数的节点选为共识主节点。
[0074]
再进一步的,进行raft日志复制,其步骤如下:
[0075]
(1)通过client客户端向leader节点提交指令(如:set 5),当leader节点收到指令后,将指令写入本地日志中;这个指令处于“uncomitted”状态,状态机(state machine)不会执行该指令,如图3所示。
[0076]
(2)leader节点将指令(set 5)并发复制给其他节点,并等待其他节点将指令写入日志中;如果此时有些节点写入失败或者比较慢,leader节点会一直重试,直到所有节点都将指令写入本地到日志中;之后leader节点就提交指令给状态机(即被状态机执行指令),并将结果返回给client客户端,如图4所示。
[0077]
其中需要说明的,leader节点在提交指令后,下一次的心跳包中就带有通知其他节点提交指令的消息,其他节点收到leader节点的消息后,就将指令应用到状态机中,最终每个节点的日志都保持了一致性;leader节点会记录已经交的最大日志index,之后后续的heartbeat和日志复制请求(append entries)都会带上最大日志index,这样其他节点就知道哪些指令已经提交了,就可以让状态机(state machine)执行日志中的指令,使得所有节点的状态机数据都保持一致,如图5所示。
[0078]
实施例2
[0079]
为了对本方法中采用的技术效果加以验证说明,本实施例选择传统raft共识算法和采用本方法进行对比测试,以科学论证的手段对比试验结果,以验证本方法所具有的真实效果。
[0080]
传统的技术方案:传统raft共识算法通过简单的多次通信投票竞选主节点,具有安全性低、中心化严重、通信流程复杂等缺陷。
[0081]
为验证本方法相对传统方法具有较高安全性及运维成本低的优势,本实施例中将采用传统raft共识算法通过简单的多次通信投票竞选主节点的共识效率和本方法分别对分布式系统中加入流量参数与验证计算进行主节点的共识效率进行实时测量对比。
[0082]
测试环境:将分布式系统在仿真平台模拟,采用10个节点的对等网络作为测试样本,分别利用传统方法的多次通信投票获得测试结果数据。采用本方法,则启动流量参数采集及共识验证计算实现本方法的仿真测试,根据实验结果得到仿真数据。每种方法各测试5组数据,计算获得每组数据共识效率时间及共识正确率,与仿真模拟输入的实际共识效率时间及共识正确率进行对比,结果如图6、图7所示。
[0083]
由图可见本方法的实际共识效率时间要少于传统raft共识算法,且共识正确率较高。
[0084]
应说明的是,以上实施例仅用以说明本发明的技术方案而非限制,尽管参照较佳实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,可以对本发明的技术方案进行修改或者等同替换,而不脱离本发明技术方案的精神和范围,其均应涵盖在本发
明的权利要求范围当中。
再多了解一些

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

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

相关文献