一种减少节点碰撞的区块链节点负载均衡方法及装置与流程

文档序号:18357205发布日期:2019-08-06 23:18阅读:173来源:国知局
一种减少节点碰撞的区块链节点负载均衡方法及装置与流程

本发明涉及区块链技术领域,具体地说是一种减少节点碰撞的区块链节点负载均衡方法及装置。



背景技术:

区块链网络中包括全账本节点、目录节点和钱包节点。全账本节点是是拥有完整区块链账本的节点,需要占用内存同步所有的区块链数据,能够独立校验区块链上的所有交易并实时更新数据,主要负责区块链上交易的广播和验证,因此全账本节点一般运行在高性能的服务器上;目录节点是存储区块链上所有全账本节点数据(包括标识码、协议标识、ip和端口、地理位置信息等数据)的节点,负责向申请这些数据的区块链其他节点发送相关的全账本节点数据;钱包节点不保存所有区块的数据,只保存跟自己交易相关的数据,所以体积很小,可以运行在电脑,手机,网页等地方,但是不具备将自身交易上链的功能,因此需要通过与全账本节点进行通信来完成数据交换、交易上链等行为。

每当有新加入区块链网络的钱包节点时,该钱包节点首先需要向某个或某几个全账本节点发送通信请求,全账本节点才能对此钱包节点进行交易上链等服务,因此需要设计钱包节点与为其提供服务的全账本节点的通信方法。

现有技术套用中心化系统的节点分配方法,包括为全账本节点从零开始编号,利用新加入区块链网络的钱包节点id除以全账本节点数目的余数,并规定余数所对应的全账本节点向该钱包节点提供服务。这种方法可能出现余数都为同一数值或同几个数值的情况,导致所有钱包节点都只与某一个或某几个全账本节点进行通信,而其余全账本节点不与任何钱包节点进行通信。全账本节点向钱包节点提供服务需要占用自身服务器内存空间,因此套用上述方法就会导致一部分全账本节点与过多钱包节点建立通信,进行交易处理时占用大量服务器内存空间,造成支撑全账本节点的服务器负载过重,容易故障;而另一部分全账本节点不与任何钱包节点建立通信,其服务器长时间空闲,产生资源浪费。此外,如果采用上述方法,一旦某个全账本节点出现故障,则可用的全账本节点数目减少,所有的钱包节点都需要重新计算,进而重新确定为自己进行服务的全账本节点,因此需要区块链网络中大部分乃至全部节点都重新建立通信。



技术实现要素:

本发明实施例中提供了一种减少节点碰撞的区块链节点负载均衡方法,以解决现有区块链中全账本节点负载不均衡,且应对全账本节点故障时操作繁琐的问题。

为了解决上述技术问题,本发明实施例公开了如下技术方案:

本发明第一方面提供了一种减少节点碰撞的区块链节点负载均衡方法,包括以下步骤:

全账本节点获取目录节点中所有全账本节点数据,根据chord协议构建chord环,并将所有全账本节点按照哈希值的大小顺序映射到所述chord环上;

当前钱包节点获取目录节点中所有全账本节点数据,根据一致性哈希算法构建哈希环,并将所有全账本节点和自身钱包节点按照哈希值的大小顺序映射到所述哈希环上;

在哈希环上,钱包节点从自身位置按顺时针方向,就近选取两个全账本节点,并对这两个全账本节点进行哈希校验;

钱包节点向上一步确定的两个全账本节点发送通信请求;

接收到通信请求的两个全账本节点,判断自身服务器的负载情况,在负载未满时,建立与当前钱包节点的通信关系,在负载已满时,沿chord环的顺时针方向,向chord环上的下一个全账本节点转发通信请求。

进一步地,所述对这两个全账本节点进行哈希校验的具体过程为:

钱包节点分别获取其一全账本节点的交易数据和另一个全账本节点的交易验证码;

计算所述交易数据的哈希值,对比该哈希值与所述交易验证码的一致性;

若一致,则通过校验,若不一致,则按照顺时针方向,选取当前两全账本节点的后两个全账本节点,重复进行哈希校验。

进一步地,所述在负载已满时,还包括以下步骤:

设置请求转发次数的阈值;

接收到请求的全账本节点判断请求转发次数是否超过阈值;

若是,则释放接收到的请求数据,返回负载已满的提示;

若否,向chord环上的下一个全账本节点转发通信请求。

进一步地,所述接收到通信请求的两个全账本节点分别独立处理所述通信请求。

本发明第二方面提供了一种减少节点碰撞的区块链节点负载均衡装置,所述装置包括全账本节点、目录节点和钱包节点;

所述全账本节点用于处理钱包节点的通信请求,并根据自身服务器负载和chord环选取为钱包节点提供服务的全账本节点;

所述目录节点用于存储全账本节点数据,并向请求数据的区块链节点发送所述全账本节点数据;

所述钱包节点用于构建哈希环,并根据所述哈希环发起并建立与全账本节点的通信。

进一步地,所述全账本节点包括:

第一全账本节点数据获取模块,用于向目录节点发送数据请求信息,并获取所有全账本节点数据;

chord环建立模块,用于建立chord环,并根据所有全账本节点数据的哈希值,将所有全账本节点按照哈希值从小到大的顺序顺时针映射到所述chord环上;

自身负载判断模块,用于判断自身服务器当前内存的剩余空间是否能够支撑为钱包节点提供服务;

通信消息处理模块,用于查看当前请求消息的转发次数,并根据转发次数阈值和所述自身负载判断模块的判断结果,向钱包节点返回通信成功与否的消息提示。

进一步地,所述目录节点包括:

全账本节点数据存储模块,用于存储当前区块链网络中所有全账本节点数据,所述全账本节点数据包括标识码、协议标识、地理位置信息、ip和端口信息;

钱包节点身份验证模块,接收钱包节点发送的自身id信息和区块链许可准入证书,验证钱包节点身份的合法性;

全账本节点数据发送模块,向通过身份验证的钱包节点发送所有全账本节点数据。

进一步地,所述钱包节点包括:

第二全账本节点数据获取模块,用于向目录节点发送自身身份信息,并请求获取所有全账本节点数据;

哈希环建立模块,根据一致性哈希算法建立哈希环,并将所有全账本节点和当前钱包节点按照哈希值的大小顺时针映射到所述哈希环上;

交易信息请求模块,在哈希环上,钱包节点从自身位置按顺时针方向,就近选取两个全账本节点,向其一全账本节点请求交易数据,向另一全账本节点请求交易数据的校验码;

交易数据哈希校验模块,计算所述交易数据的哈希值,并对比与所述校验码的一致性,若一致,则校验通过;

通信请求发送模块,向确定的两个全账本节点发送通信请求;

返回消息处理模块,根据全账本节点返回的消息提示,发送自身交易数据至全账本节点。

发明内容中提供的效果仅仅是实施例的效果,而不是发明所有的全部效果,上述技术方案中的一个技术方案具有如下优点或有益效果:

1、通过一致性哈希算法建立哈希环,将所有全账本节点和当前钱包节点均映射到哈希环上,钱包节点根据处于哈希环上的位置选择全账本节点,接收到请求的全账本节点根据自身负载情况,同时通过chord环,选择负载未满的全账本节点与钱包节点建立通信,实现钱包节点的交易上链。有效的保证钱包节点大致平均地分配到系统所有的全账本节点并建立通信,保证了支撑全账本节点的服务器负载均衡,不会有服务器负载过多导致故障,也不会有服务器空闲浪费资源。

2、钱包节点一旦与全账本节点建立通信后,将持续与此全账本节点进行直接通信,提高节点间的通信效率。且每个钱包节点与两个全账本节点同时建立通信关系,这两个全账本节点独立处理钱包节点的请求,进一步提高数据处理效率。

3、目录节点在向钱包节点发送全账本节点数据前,首先验证钱包节点身份的合法性;钱包节点在向两个全账本节点发送通信请求前,分别获取两个全账本节点的交易数据和验证码,验证两者的一致性,保证了通信和交易的合法性。

4、当有一个全账本节点出现故障时,只需要重新分配与该全账本节点连接的钱包节点即可,区块链网络中其他钱包节点不受影响,处理方式简便快捷。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1是本发明所述方法实施例的流程示意图;

图2是本发明全账本节点与钱包节点在哈希环上的分布结构示意图;

图3是本发明钱包节点与全账本节点通信流程示意图;

图4是本发明全账本节点之间通信流程示意图;

图5是本发明所述装置的结构示意图。

具体实施方式

为能清楚说明本方案的技术特点,下面通过具体实施方式,并结合其附图,对本发明进行详细阐述。下文的公开提供了许多不同的实施例或例子用来实现本发明的不同结构。为了简化本发明的公开,下文中对特定例子的部件和设置进行描述。此外,本发明可以在不同例子中重复参考数字和/或字母。这种重复是为了简化和清楚的目的,其本身不指示所讨论各种实施例和/或设置之间的关系。应当注意,在附图中所图示的部件不一定按比例绘制。本发明省略了对公知组件和处理技术及工艺的描述以避免不必要地限制本发明。

如图1所示,本发明减少节点碰撞的区块链节点负载均衡方法,包括以下步骤:

s1,全账本节点获取目录节点中所有全账本节点数据,根据chord协议构建chord环,并将所有全账本节点按照哈希值的大小顺序映射到所述chord环上;

s2,当前钱包节点获取目录节点中所有全账本节点数据,根据一致性哈希算法构建哈希环,并将所有全账本节点和自身钱包节点按照哈希值的大小顺序映射到所述哈希环上;

s3,在哈希环上,钱包节点从自身位置按顺时针方向,就近选取两个全账本节点,并对这两个全账本节点进行哈希校验;

s4,钱包节点向上一步确定的两个全账本节点发送通信请求;

s5,接收到通信请求的两个全账本节点,判断自身服务器的负载情况,在负载未满时,建立与当前钱包节点的通信关系,在负载已满时,沿chord环的顺时针方向,向chord环上的下一个全账本节点转发通信请求。

如图2所示,步骤s2中,哈希环上分布了区块链网络中所有全账本节点,并按照哈希值从小到大的顺序依次顺时针排列到哈希环上。同时当前钱包节点也基于自身哈希值的大小映射到该哈希环上。图2所示的钱包节点a位于全账本节点a和全账本节点b之间,钱包节点在选择全账本节点时,首先选择全账本节点b和全账本节点c,在全账本节点b和全账本节点c的哈希校验未通过时,在选择全账本节点d和全账本节点e,以此沿顺时针方向向下选择。

下面结合图3和图4对上述步骤s1-s5的具体实现过程进行详细说明。

如图3所示,新接入区块链网络的钱包节点与全账本节点的通信过程:

步骤s201,新加入区块链网络的钱包节点向存储着全部全账本节点相关信息的目录节点发送请求,发送自身节点id信息和区块链许可准入证书,并且请求获取所有可以对钱包节点提供服务的全账本节点数据。全账本节点数据包括标识码、协议标识、ip和端口、地理位置信息。

步骤s202,目录节点接收到请求后对钱包节点身份进行验证,具体操作为接收到钱包节点发送的节点id信息和区块链许可准入证书后,利用目录节点所持有的解密密钥对许可准入证书解密并获取证书中标明的钱包节点的节点id信息和证书有效日期,证书中的节点id信息和钱包节点发送的节点id信息一致且证书未到有效日期则完成对钱包节点的身份验证,否则驳回钱包节点的数据请求。通过钱包节点身份验证后,向钱包节点发送其请求的全账本节点数据。

步骤s203,钱包节点基于一致性哈希算法建立哈希环,具体过程为:(1)计算获取的全账本节点数据的哈希值;(2)建立一个足够大的圆环,圆环上均匀并且有序地分布0-232-1共计232个数字,0值在圆环的最上方,按照顺时针顺序从小到大排列数字,得到哈希环;(3)根据哈希值将所有全账本节点一一映射到圆环上;(4)计算自身钱包节点的哈希值,并且同样根据哈希值将钱包节点也映射到哈希环上。

步骤s204,钱包节点按照哈希环的顺时针顺序选择哈希环上距离钱包节点最近的两个全账本节点。

步骤s205,钱包节点与选择的两个全账本节点进行通信,向其中一个全账本节点请求交易数据,交易数据包括交易所在的区块高度、签名等信息,向另一个全账本节点请求上述交易相关数据哈希所形成的验证码(即交易相关数据的哈希值)。

步骤s206,钱包节点对请求到的交易数据进行哈希计算,与获得的验证码比对是否一致,一致则进行步骤s207,不一致则在哈希环上删除选择的两个全账本节点,并回到步骤s204。

步骤s207,钱包节点向步骤s204选定并且通过步骤s206哈希校验的两个全账本节点发送自身交易数据,请求建立通信。

步骤s208,钱包节点等待全账本节点的执行结果和返回消息,如果返回消息1:“当前系统负载已满,请稍后处理”,则等待10s后回到步骤s204,如果返回消息2:“通信成功”,则发送自身交易数据到全账本节点。

如图4所示,在上述步骤s207后,全账本节点接收到钱包节点的通信请求进行与当前钱包节点通信的全账本节点的进一步选择:

步骤s301,所有全账本节点向目录节点发送请求,请求获取目录节点中其他所有全账本节点数据(标识码、协议标识、ip和端口、地理位置信息等)。

步骤s302,全账本节点从目录节点获得步骤s301所请求的数据后,根据chord协议,完成chord环的构建,具体步骤为;(1)计算获取的全账本节点数据的哈希值;(2)建立一个足够大的圆环,圆环上均匀并且有序地分布0-232-1共计232个数字,0值在圆环的最上方,按照顺时针顺序从小到大排列232个数字,(3)根据哈希值将所有全账本节点一一映射到chord环上。

步骤s303,全账本节点接收到钱包节点请求后,判断自身服务器负载是否已满,负载未满则执行步骤s304,负载已满则执行步骤s305。自身服务器负载通过当前服务器内存空间的占用量进行判断。被钱包节点选择的两个全账本节点分别独立处理钱包节点的请求独立进行步骤s303-步骤s307的操作流程。

步骤s304,支撑全账本节点的服务器自身负载未满,直接接收处理消息,并向钱包节点返回消息2:“通信成功”,并等待处理钱包节点发送的交易数据;

步骤s305,支撑全账本节点的服务器判断自身负载已满,则按照chord环顺时针顺序把请求消息转发给chord环上该全账本节点的下一个全账本节点,并将消息的转发次数加一。

步骤s306,接收到请求消息的新全账本节点在处理消息前,判断转发次数是否超过规定阈值,超过阈值进行步骤s307,未超过阈值则回到步骤s303。

步骤s307,转发次数超过规定阈值,当前全账本节点抛弃接收到的消息,并向钱包节点返回信息1:“当前系统负载已满,请稍后处理”。

如图5所示,本发明还提供了减少节点碰撞的区块链节点负载均衡装置,包括钱包节点10、全账本节点11和目录节点12。

钱包节点10包括第二全账本节点数据获取模块101、哈希环建立模块102、交易信息请求模块103、交易数据哈希校验模块104、通信请求发送模块105和返回消息处理106,钱包节点负责通信的发起和建立,并且一旦建立起与某个全账本节点11的通信,除非全账本节点11故障,后续将持续与此全账本节点11进行直接通信。

第二全账本节点数据获取模块101,向目录节点12发送钱包节点的节点id信息和自身的区块链许可准入证书(许可准入证书是加密后的证书,需要持有解密密钥的节点进行解密才能看到钱包节点的证书信息),并请求可以为钱包节点10提供服务的全账本节点11的数据。

哈希环建立模块102,根据一致性哈希算法建立哈希环,并根据哈希值将所有全账本节点11和当前钱包节点一一映射到哈希环上。

交易信息请求模块103,全账本节点11请求获取交易信息,按照哈希环的顺时针顺序,选择哈希环上顺时针距离钱包节点10最近的两个全账本节点,向一个请求交易数据,向另一个请求交易数据的哈希值。交易数据的哈希值即称为交易校验码。

交易数据哈希校验模块104,根据从两个全账本节点处获得的交易数据和交易校验码(全账本节点提供的交易数据的哈希值),计算获得的交易数据的哈希值,与交易校验码比对是否一致,一致则进行后续的通信请求和建立等操作,不一致则排除模块103选择的两个全账本节点,并重新选择两个全账本节点11进行通信。若不一致,说明至少其中一个全账本节点所存储的数据有错误,所以不能进行后续通信。

所述的通信请求发送模块105,选择模块103选定的并且通过模块104校验的两个全账本节点,向两个全账本节点11同时发送通信请求,同时发送自身交易数据,请求建立通信以完成交易上链。

所述的返回消息处理模块106,根据全账本节点11的返回消息类型进行后续操作,如果返回消息为:“当前系统负载已满,请稍后处理”则等待一段时间后重新发送通信请求,如果返回消息为:“通信成功”,则向全账本节点发送自身交易数据。

全账本节点11包括第一全账本节点数据获取模块111、chord环建立模块112、自身负载判断模块113和通信消息处理模块114,在区块链系统中为用户提供交易合法性验证、交易上链等服务,负责通信消息的处理和负载均衡的保证。

第一全账本节点数据获取模块111,向目录节点12发送全账本节点11的信息并请求其他所有全账本节点的数据。

chord环建立模块112,基于chord协议建立chord环,将所有全账本节点按照哈希值从小到大的顺序顺时针映射到chord环上。

自身负载判断模块113,根据全账本节点11的服务器已经使用的内存空间大小,计算其剩余内存空间大小,由于为钱包节点10提供服务需要占用服务器内存空间,因此可以判断全账本节点服务器的当前内存空间是否足够支撑为钱包节点10提供服务。

通信消息处理模块114,查看消息转发次数,次数超过阈值则向钱包节点10返回消息:“当前系统负载已满,请稍后处理”;次数未超过阈值则根据自身负载判断模块113的判断结果处理钱包节点的通信请求消息,负载已满转发消息到chord环上顺时针方向临近的全账本节点,并且增加一次消息转发次数,负载未满则接收消息,并向钱包节点10返回消息:“通信成功”。

目录节点12包括全账本节点数据存储模块121、钱包节点身份验证模块122和全账本节点数据发送模块123,负责存储区块链中所有全账本节点数据,并向请求数据的区块链节点发送以上全账本节点数据。

全账本节点数据存储模块121,存储区块链网络中所有全账本节点数据,包括标识码、协议标识、ip和端口、地理位置信息等。

钱包节点身份验证模块122,接收到钱包节点10发送的节点id信息和区块链许可准入证书后,利用目录节点12所持有的解密密钥对许可准入证书解密并获取证书中标明的钱包节点的节点id信息和证书有效日期,证书中的节点id信息和钱包节点发送的节点id信息一致且证书未到有效日期则完成对钱包节点的身份验证,否则驳回钱包节点的数据请求。

全账本节点数据发送模块123,在钱包节点身份验证模块122对钱包节点的身份验证通过后,向钱包节点发送其请求的全账本节点数据。

本发明钱包节点和全账本节点建立通信时,通过目录节点获取全账本节点数据,基于获取的全账本节点数据、自身节点数据和一致性哈希算法建立哈希环,根据哈希环选择全账本节点进行通信请求,请求与全账本节点进行交易数据交换和哈希校验,最终发送自身交易消息到全账本节点,请求建立通信。全账本节点之间基于chord协议建立chord环,接收到钱包节点服务请求消息后,根据自身负载情况和消息的转发次数,选择处理消息或根据chord环转发消息,并最终根据消息的处理情况向钱包节点返回消息。整个过程中,全账本节点始终不会出现负载过满的情况,钱包节点选择全账本节点、全账本节点根据自身负载转发或处理消息的方法,都保证了区块链上全账本节点的服务器负载均衡。

以上所述只是本发明的优选实施方式,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也被视为本发明的保护范围。

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