一种利用软件定义网络优化的共识算法的制作方法

文档序号:12722012阅读:197来源:国知局
一种利用软件定义网络优化的共识算法的制作方法与工艺

本发明涉及数字货币领域,更具体地,涉及一种利用软件定义网络优化的共识算法。



背景技术:

从达沃斯论坛到国际货币基金组织,从中国人民银行数字货币研讨会到美国商品期货交易委员会的听证会,从纳斯达克、花旗银行等金融业大佬到IBM、微软等科技巨头,区块链正快速走进公众视野和政策层面,引发全世界的广泛关注。

区块链是数字加密货币体系的核心技术。区块链技术能够通过数据加密、时间戳、分布式共识机制等手段,在节点无需互相信任的分布式系统中实现去中心化的点对点交易与协作,从而为中心化机构普遍存在的高成本、低效率和容易发生单点故障等问题提供了一个解决方案,这也是区块链的核心优势。

比特币是区块链迄今为止最为成功的应用场景。据统计显示,平均每天有约7500万美元的120000笔交易被写入比特币区块链,目前已生成超过40万个区块。据加密货币市值统计显示,截止到2016年初,全球共有675种加密货币,总市值超过67亿美元,其中比特币市值约占86%。预计到2027年,全球10%的GDP将会通过区块链技术存储。

比特币本质上是由分布式系统生成的数字货币,其发行不依赖特定的中心化机构,而依赖于分布式系统中的节点共同参与一种称为PoW(Proof of work,即工作量证明)的共识过程以完成比特币交易的验证与记录。PoW共识过程(俗称挖矿,每个节点称为矿工)是各节点贡献自己的计算资源来竞争解决一个难度可动态调整的数学问题的过程,成功解决该数学问题的矿工将获得区块的记账权,并将当前时间段的所有比特币交易打包记入一个新的区块、按照时间顺序链接到比特币主链上。比特币使用的PoW(Proof of Work)共识算法依赖机器进行数学运算来获取记账权,资源消耗非常高,算力浪费严重。随着区块链技术的发展,研究者提出多种不依赖算力而能够达成共识的机制。目前区块链上常见的共识机制除PoW外还有PoS(Proof of Stake):权益证明、DPoS(Delegate Proof of Stake):股份授权证明等,这些共识机制各有优劣。



技术实现要素:

本发明提供一种利用软件定义网络优化的共识算法,该算法可提升共识机制的效率。

为了达到上述技术效果,本发明的技术方案如下:

一种利用软件定义网络优化的共识算法,包括以下步骤:

S1:客户端向服务器集群广播请求,服务器处理请求后将结果返回给客户端;

服务器收到请求后会根据角色产生不同的响应,服务器的角色包括:追随者Follower、申请者Candidate和领导者Leader,服务器处理请求并将结果存储到日志后,服务器完成追随者Follower角色时也同时完成领导者Leader的角色,追随者Follower将结果发送到领导者Leader,Leader直接发送给客户端;服务器完成Candidate角色时,在选举过程才会出现,Leader宕机后进入选举过程,选举新的Leader。选举过程中服务器不响应客户端的请求;

S2:服务器间同步请求执行结果,保证一致性。

进一步地,所述步骤S1中:

服务器集群中,若追随者Follower收到客户端client的请求,执行请求并将请求与结果的哈希值Hash存储到日志Log中,然后将结果Hash值通过创建新条目的远程程序调用发送给领导者Leader,Hash值计算公式如下:

Hashn=H(Hashn-1||operationn)

上述公式表示执行索引index为n的操作后得到的Hash值,若Hash值相同,则执行过的所有操作均一致。

进一步地,所述步骤S1中:

若领导者Leader收到请求,执行并将请求存储到日志Log中,然后将结果返回给客户端client。

进一步地,所述步骤S2中:

领导者Leader接收到追随者Follower的新条目的远程程序调用new entry RPC,先检查其中的索引index,若索引值小于已提交的索引值commitIndex,则直接发出修正结果的远程程序调用correct RPC,远程程序调用correct RPC中index值为远程程序调用new entry RPC的索引值;若该索引>本地索引,即领导者Leader还未收到此请求,则执行新条目的远程程序调用中的请求并返回结果给客户端;若index>=commitIndex且index<=本地index,则比较执行结果的Hash值,若一致则发出让Follower提交结果的远程程序调用commit RPC,其index即为new entry RPC中的index;当超过半数追随者Follower执行此命令且Hash值一致时将本地commitIndex更新为此命令的index值;若不一致则返回correct RPC令相应追随者Follower进行修改,此时correct RPC中index值为本地commitIndex。

进一步地,所述步骤S2中:

追随者Follower若收到领导者Leader的commit RPC,若RPC中Hash值与本地Log中对应的commitIndex请求执行后的Hash值相同,则将本地的commitIndex变量值更新为commit RPC中的index值,若不同,发送new entry RPC给Leader,new entry RPC中index值为本地Log中最新的请求的index,Log为该index对应的命令,Hash即为其运行结果的Hash值;若本地当前周期curTerm小于commit RPC中的curTerm值,将其更新为与commit RPC中的值;若收到Leader的correct RPC,则向前回滚到correct RPC中的index的请求执行后的状态,然后依次执行correct RPC的Log中的请求。

与现有技术相比,本发明技术方案的有益效果是:

本发明使用SDN设计网络层,保证数据传输的有序性后,简化了应用层算法的设计,改进后的Raft拥有更高的响应速度。使用Raft作为私有链的共识算法,避免了PoW等共识算法对算力资源的浪费,缩短了生成区块的时间,大大提高了共识机制的效率和单位时间可处理的交易量。

附图说明

图1为本发明中私有链网络结构;

图2为本发明中数据中心网络拓扑结构;

图3为本发明中server三种角色的转换关系;

图4为本发明中server中Log的结构示意图。

具体实施方式

附图仅用于示例性说明,不能理解为对本专利的限制;

为了更好说明本实施例,附图某些部件会有省略、放大或缩小,并不代表实际产品的尺寸;

对于本领域技术人员来说,附图中某些公知结构及其说明可能省略是可以理解的。

下面结合附图和实施例对本发明的技术方案做进一步的说明。

实施例1

一种利用软件定义网络优化的共识算法,包括以下步骤:

S1:客户端向服务器集群广播请求,服务器处理请求后将结果返回给客户端;

服务器收到请求后会根据角色产生不同的响应,服务器的角色包括:追随者Follower、申请者Candidate和领导者Leader,服务器处理请求并将结果存储到日志后,服务器完成追随者Follower角色时也同时完成领导者Leader的角色,追随者Follower将结果发送到领导者Leader,Leader直接发送给客户端;服务器完成Candidate角色时,在选举过程才会出现,Leader宕机后进入选举过程选举新的Leader。选举过程中服务器不响应客户端的请求;

S2:服务器间同步请求执行结果,保证一致性。

进一步地,所述步骤S1中:

服务器集群中,若追随者Follower收到客户端client的请求,执行请求并将请求与结果的哈希值Hash存储到日志Log中,然后将结果Hash值通过创建新条目的远程程序调用发送给领导者Leader,Hash值计算公式如下:

Hashn=H(Hashn-1||operationn)

上述公式表示执行索引index为n的操作后得到的Hash值,若Hash值相同,则执行过的所有操作均一致。

进一步地,所述步骤S1中:

若领导者Leader收到请求,执行并将请求存储到日志Log中,然后将结果返回给客户端client。

进一步地,所述步骤S2中:

领导者Leader接收到追随者Follower的新条目的远程程序调用new entry RPC,先检查其中的索引index,若索引值小于已提交的索引值commitIndex,则直接发出修正结果的远程程序调用correct RPC,远程程序调用correct RPC中index值为远程程序调用new entry RPC的索引值;若该索引>本地索引,即领导者Leader还未收到此请求,则执行新条目的远程程序调用中的请求并返回结果给客户端;若index>=commitIndex且index<=本地index,则比较执行结果的Hash值,若一致则发出让Follower提交结果的远程程序调用commit RPC,其index即为new entry RPC中的index;当超过半数追随者Follower执行此命令且Hash值一致时将本地commitIndex更新为此命令的index值;若不一致则返回correct RPC令相应追随者Follower进行修改,此时correct RPC中index值为本地commitIndex。

进一步地,所述步骤S2中:

追随者Follower若收到领导者Leader的commit RPC,若RPC中Hash值与本地Log中对应的commitIndex请求执行后的Hash值相同,则将本地的commitIndex变量值更新为commit RPC中的index值,若不同,发送new entry RPC给Leader,new entry RPC中index值为本地Log中最新的请求的index,Log为该index对应的命令,Hash即为其运行结果的Hash值;若本地当前周期curTerm小于commit RPC中的curTerm值,将其更新为与commit RPC中的值;若收到Leader的correct RPC,则向前回滚到correct RPC中的index的请求执行后的状态,然后依次执行correct RPC的Log中的请求。

本发明旨在提出一种利用SDN(Software Defined Network,即软件定义网络)优化的共识算法来提高区块链达成共识的效率。预设环境为私有链,考虑到私有链不存在拜占庭将军问题,可使用传统的分布式共识算法,故采用Raft算法来实现共识机制。

SDN将网络的控制和转发相分离,将数据平面与控制平面解耦合,允许用户自定义路由器功能模块,实现了网络的可编程,为研发网络新应用提供了一种新的解决方案。下面先介绍本发明的第一部分,基于SDN的对私有链网络层的优化。

在传统的网络中,软件的可靠性完全依赖应用层来实现。本发明将数据的有序性与可靠性分离,利用SDN,在网络层实现对有序性的保证。数据的有序性是指,如果集群中一个服务器先接收到a,后接收到b,那么集群中没有任何服务器会在接收a之前接收到b。在这个网络中,虽然保证了有序性,但信息仍有可能丢失、延迟,对信息可靠性的保证我们交给应用层实现。

私有链网络的结构如图1所示,由于私有链范围较小,我们可以看做在一个数据中心内。数据中心网络的拓扑结构如图2所示,在这个数据中心的网络中,我们要在这异步、不可靠的网络上实现有序广播。异步是指信息的延迟不确定,不可靠是指信息传播过程中存在丢失的可能。

sequencer的作用是接收并转发client发来的包,并在包的头部添加编号。每个sequencer维护一个counter,counter的值即是包头部的编号,每封装一个包counter+1。利用SDN,我们将接收多播的分组中所有server的公共父节点的switch作为sequencer,如果广播给大范围的server,需要把一个Root switch作为sequencer,而如果是小范围的广播,则可以看情况选择Aggregation switch或ToR(top of Rack)switch作为sequencer,这样设计不会增长信息传递的路径,所以不会增加额外的信息传递延迟。server的acpLib会识别包头的编号,按顺序将包中的消息传送给server,编号不连续的信息会被拒绝接收。这样便实现了信息的有序传递。

在此基础上,我们实现本发明的第二部分,用改进的Raft算法实现私有链的共识机制。

在Raft算法中,server有三种角色:Follower、Candidate、Leader,这三种角色的关系如图3所示。一个Leader从被选举到结束的时间为一个term,term时间长度不固定,每个server中都存着一个current term的数字变量curTerm,选举新Leader后数字加1,server的Log中记录着已经收到的请求,每条请求有对应的index,Log的结构如图4所示。一个term中最多有一个leader。Server之间使用RPC(Remote Procedure Call)进行通信。表1总结了server三种角色的变量和方法,表2总结了server所有方法的参数及作用。

表1 server三种角色的变量与方法

表2 server关键方法的参数及作用

server三种角色的责任如下:

Follower:

若接收到client的请求,执行并将请求存到Log中,执行后将请求和执行结果的Hash值通过new entry RPC发送给leader。

(1)若收到Leader的commit RPC,若RPC中Hash值与本地Log中对应的commitIndex请求执行后的Hash值相同,则将本地的commitIndex变量值更新为commit RPC中的index值,若不同,发送new entry RPC给Leader,new entry RPC中index值为本地Log中最新的请求的index,Log为该index对应的命令,Hash即为其运行结果的Hash值。若本地curTerm小于commit RPC中的curTerm值,将其更新为与commit RPC中的值。

(2)若收到Leader的correct RPC,则向前回滚到correct RPC中的index的请求执行后的状态,然后依次执行correct RPC的Log中的请求。

(3)若收到Leader的submit RPC,重置计时,如果submitRPC不为空,则更新本地维护的区块链的值。

(4)若一个规定的时间内没有收到Leader固定发送的submit RPC,则认为需要重新开始选举,此时使自己的curTerm+1并转变为Candidate状态。

(5)若接收到Candidate的request vote RPC,则将其中的<curTerm,index>与自己的相比较,若自己的大,则返回deny RPC,反之发送vote RPC为其投票并将本地curTerm的值更新为request vote RPC中的值。投过票后若再收到request vote RPC不作回应。

Candidate:

(1)向所有server广播request vote RPC争取选票并给自己投票。

(2)若接收到超过半数server的选票且未收到deny RPC,则转变状态为Leader,并向集群广播空的submit RPC。

(3)若接收到deny RPC、commit RPC或submit RPC,返回Follower状态。

(4)若超时仍未收到超过半数选票,则保持Candidate状态,将curTerm+1并重新广播request vote RPC。超时的设定时间为一定范围内的随机数(如150-300ms)。超时的原因是选票被平分,例如有5个server,一个Leader宕机后,两个Follower同时成为Candidate开始竞选,剩下两个Follower给两个Candidate各投一票,则无法决定出下个Leader,只能超时后重新选举。

(5)若接收到Candidate的request vote RPC,则将其中的<curTerm,index>与自己的相比较,若自己的大,则发出deny RPC,反之返回Follower状态,将本地curTerm的值更新为request vote RPC中的值并发出vote RPC为其投票。

Leader:

(1)被选举为Leader后,若Log不为空,先对Log中committed标记之后的请求进行同步,广播commit RPC并将各请求的结果返回给相应client。

(2)若接收到client的请求,执行并将请求存到Log中,将结果返回给client。

(3)若接收到Follower的new entry RPC,先检查其中的index,若index<commitIndex,则直接发出correct RPC,correct RPC中index值为new entry RPC的index值;若index>本地index,即Leader还未收到此请求,则执行new entry RPC中的请求并返回结果给用户;若index>=commitIndex且index<=本地index,则比较执行结果的Hash值,若一致则发出commit RPC,其index即为new entry RPC中的index。当超过半数Follower执行此命令且Hash值一致时将本地commitIndex更新为此命令的index值。若不一致则返回correct RPC令相应Follower进行修改,此时correct RPC中index值为本地commitIndex。

(4)每隔一个固定的时间向集群中所有Follower广播submit RPC,上一个submitted请求后若有新的committed请求则将committed请求打包成一个区块添加到区块链尾部,并将请求及新区块链的数据添加到submit RPC中;若没有新的committed请求,则广播空的submit RPC。

(5)若收到Candidate的request vote RPC,返回deny RPC。

(6)若收到Leader的commit RPC且其中的<curTerm,index>大于或等于本地的<curTerm,index>,则返回到Follower状态,更新本地curTerm值,并发回new entry RPC,其中index值为本地index变量值。反之发回commit RPC,index为本地index变量值。

算法安全性分析:

(1)若client发送给Leader的请求丢失或Leader执行请求前宕机,Leader可从Follower发送的new entry RPC中得到请求。

(2)若client发送给Follower的请求丢失或Follower宕机一段时间后恢复,可根据Leader的correct RPC进行改正。

(3)若Leader在执行请求后广播commit RPC前宕机,由于网络层保证了请求的有序性且选举机制保证了新Leader的Log的完整性,新Leader被选举后会先广播commit RPC保证数据的一致。

(4)若Leader在添加区块前宕机,新Leader在新term结束时仍会添加区块,根据区块链的性质,虽然区块数量不同,但对数据的一致性和安全性没有影响。

本发明使用SDN设计网络层,保证数据传输的有序性后,简化了应用层算法的设计,改进后的Raft拥有更高的响应速度。使用Raft作为私有链的共识算法,避免了PoW等共识算法对算力资源的浪费,缩短了生成区块的时间,大大提高了共识机制的效率和单位时间可处理的交易量。

相同或相似的标号对应相同或相似的部件;

附图中描述位置关系的用于仅用于示例性说明,不能理解为对本专利的限制;

显然,本发明的上述实施例仅仅是为清楚地说明本发明所作的举例,而并非是对本发明的实施方式的限定。对于所属领域的普通技术人员来说,在上述说明的基础上还可以做出其它不同形式的变化或变动。这里无需也无法对所有的实施方式予以穷举。凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明权利要求的保护范围之内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1