本申请涉及人工智能技术领域,特别是涉及一种节点位置确定方法、装置、计算机设备和存储介质。
背景技术:
在分布式系统中包括多个节点,为了保证分布式系统中各节点之间的负载均衡,传统技术中通过一致性哈希算法来确定每个节点对应的节点区域,但是在实际运用过程中,由于节点的个数相对于整个哈希环的大小来说,数量相对较小,在这种情况下,数据对象在节点的分布会很不均衡,造成了数据倾斜。
现有技术中为了解决数据倾斜实现数据均衡分配时,提出了虚拟节点的解决方法,但虚拟节点的方式无法解决在新增节点的时候造成的新的数据倾斜和平衡性的问题,导致分布式系统负载不均衡,使得数据处理效率低下。
技术实现要素:
基于此,有必要针对上述技术问题,提供一种能够提高系统负载均衡的节点位置确定方法、装置、计算机设备和存储介质。
一种节点位置确定方法,方法包括:
获取哈希环上的现有节点对应的节点区域值;
获取区域参考值,将节点区域值与区域参考值进行比对;
根据比对的结果确定哈希环均匀度,根据哈希环均匀度从哈希环中的现有节点中确定目标节点;
根据目标节点对应的目标节点区域确定新增节点的位置。
在一个实施例中,获取哈希环上的现有节点对应的节点区域值,包括:
获取哈希环上现有节点对应的哈希位置;
依照顺时针方向,在哈希环中获取现有节点对应的下一个相邻现有节点,根据现有节点以及下一个相邻现有节点分别对应的哈希位置,确定现有节点在哈希环上对应的节点区域值。
在一个实施例中,获取区域参考值,包括:
获取哈希环上现有节点对应的现有节点数量,以及哈希环中新增节点对应的新增节点数量;
计算新增节点数量与现有节点数量的相对值;
根据相对值确定区域参考值,区域参考值存储于区块链中。
在一个实施例中,根据比对的结果确定哈希环均匀度,根据哈希环均匀度从哈希环中的现有节点中确定目标节点,包括:
当哈希环中存在节点区域值大于区域参考值的现有节点时,将节点区域值大于区域参考值的现有节点确定为目标节点;
当哈希环中所有的现有节点对应的节点区域值皆小于或者等于区域参考值时,将哈希环中的所有的现有节点确定为目标节点。
在一个实施例中,哈希环中存在节点区域值大于区域参考值的现有节点;根据目标节点对应的目标节点区域确定新增节点的位置,包括:
根据哈希环上节点的节点数量,确定哈希环上的每一个节点对应的可分配区域,节点包括现有节点以及新增节点;
从目标节点对应的目标节点区域中划分出与可分配区域对应的区域范围,并将划分出的区域范围作为新增节点的新增节点区域;
根据新增节点区域确定新增节点的位置。
在一个实施例中,哈希环中所有的现有节点对应的节点区域值皆小于或者等于区域参考值;根据目标节点对应的目标节点区域确定新增节点的位置,包括:
根据哈希环上节点的节点数量,确定哈希环上的每一个节点对应的可分配区域,节点包括现有节点以及新增节点;
从现有节点中分别划分出子区域,使得根据各子区域得到的总区域与可分配区域对应的区域范围一致;
将每一个子区域作为新增节点的节点区域,并根据新增节点的节点区域确定新增节点的位置。
一种节点位置确定装置,装置包括:
获取模块,用于获取哈希环上的现有节点对应的节点区域值;
比对模块,用于获取区域参考值,将节点区域值与区域参考值进行比对;
第一确定模块,用于根据比对的结果确定哈希环均匀度,根据哈希环均匀度从哈希环中的现有节点中确定目标节点;
第二确定模块,用于根据目标节点对应的目标节点区域确定新增节点的位置。
一种计算机设备,包括存储器和处理器,存储器存储有计算机程序,处理器执行计算机程序时实现上述任意实施例的方法的步骤。
一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现上述任意实施例的方法的步骤。
上述节点位置确定方法、装置、计算机设备和存储介质,通过哈希环中的现有节点对应的节点区域值与参考区域值的比对结果,确定哈希环上的节点分布的均匀度,实现了根据哈希环的实际均匀度情况在现有节点中确定目标节点,并根据目标节点确定新增节点的位置。在哈希环均匀度值的约束下,确定新增节点的位置,使得当在哈希环中新增节点时仍然可以保证哈希环上节点分布的均匀度,实现了分布式系统中节点的负载均衡,提高了数据处理的效率。
附图说明
图1为一个实施例中节点位置确定方法的应用环境图;
图2为一个实施例中节点位置确定方法的流程示意图;
图3为一个实施例中提供的哈希环示意图;
图4为一个实施例中提供的一种在非均匀哈希环中新增节点的示意图;
图5为一个实施例中提供的一种在均匀哈希环中新增节点的示意图;
图6为一个实施例中节点位置确定装置的结构框图;
图7为一个实施例中计算机设备的内部结构图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
本申请提供的节点位置确定方法,可以应用于如图1所示的应用环境中。其中,终端102通过网络与服务器104进行通信。服务器104获取哈希环上的现有节点对应的节点区域值;获取区域参考值,将节点区域值与区域参考值进行比对;根据比对的结果确定哈希环均匀度,根据哈希环均匀度从哈希环中的现有节点中确定目标节点;根据目标节点对应的目标节点区域确定新增节点的位置。进一步地,将新增节点的位置推送至终端102。其中,终端102可以但不限于是各种个人计算机、笔记本电脑、智能手机、平板电脑和便携式可穿戴设备,服务器104可以用独立的服务器或者是多个服务器组成的服务器集群来实现。
在一个实施例中,如图2所示,提供了一种节点位置确定方法,以该方法应用于图1中的服务器为例进行说明,包括以下步骤:
步骤202,获取哈希环上的现有节点对应的节点区域值。
其中,哈希环是根据哈希(hash)算法构建的一个环形hash空间。具体地,根据hash算法来将数值哈希到一个具有2^32次方的空间中,即0~(2^32)-1的数字空间中,并将这些数字头尾相连,想象成一个闭合的环形即哈希环。现有节点是哈希环中已经存在的节点,节点可以是指计算机设备,具体地,在一个分布式系统中包括四台机器(计算机设备或者节点),那么该分布式系统中就包括四个现有节点。节点区域是现有节点在哈希环中所占的区域范围,节点区域值是用于度量节点区域的范围大小。在一个分布式系统中,可以包括多于一个的现有节点,并且每一个现有节点对应一个节点区域值,若现有节点在哈希环中是均匀分布的,那么哈希环中的每一个现有节点对应的节点区域值应该是大致相同的。具体地,哈希环中的每一个现有节点对应一个具有数据处理功能的计算机设备,并且当分布式系统接收到数据处理请求时,可以通过请求分配算法将对应的请求分配至分布式存储系统中的其中一个现有节点对应的计算机设备中,以利用对应的计算机设备对分配到的请求进行处理。
参考图3所示,图3为一个实施例中提供的哈希环示意图。将分布式系统对应为哈希环时,那么将对应的四个节点分布至对应的哈希环中的步骤包括:假设现在有a、b、c、d四台机器,通过hash算法得到每台机器对应的key值,然后根据key值将每一个现有节点映射到哈希环中,具体为:hash(a)=key1、hash(b)=key2、hash(c)=key3以及hash(d)=key4。
继续参考图3,在图3中可以看出在哈希环中存在a、b、c、d四个现有节点,并且沿着顺时针方向确定每个现有节点的节点区域,如圆弧ab为现有节点a对应的节点区域,圆弧bc为现有节点b对应的节点区域,圆弧cd为现有节点c对应的节点区域,圆弧da为现有节点d对应的节点区域。并且,节点区域值是用于度量节点区域对应的区域范围的量化值,如节点区域值可以是节点区域的圆弧长度,或者是节点区域对应的圆心角等,在此不做限制。
继续参考图3,在一个实施例中,当分布式系统接收到请求数据时,可以将对应的对象数据通过hash函数计算出对应的key值,然后根据key值将对应的对象数据分配至对应的节点中。具体地,把数据通过一定的hash算法处理后映射到环上,如将object1、object2、object3、object4四个对象通过特定的hash函数计算出对应的key值,然后散列到hash环上。hash(object1)=key1;hash(object2)=key2;hash(object3)=key3;hash(object4)=key4。通过图3可以看出对象与机器处于同一哈希空间中,这样按顺时针转动object1存储到了现有节点b中,object2存储到了现有节点c中,object3存储到了现有节点d中,object4存储到了现有节点a中。在这样的部署环境中,hash环是不会变更的,因此,通过算出对象的hash值就能快速的定位到对应的机器中,这样就能找到对象真正的存储位置了。
步骤204,获取区域参考值,将节点区域值与区域参考值进行比对。
其中,区域参数值是预先确定的,是用于度量哈希环均匀度的指标,区域参考值用于表征当哈希环中的现有节点为均匀分布时,每一个现有节点应当所占的区域大小。具体是,当哈希环中的现有节点是均匀分布时,每一个现有节点对应的节点区域范围应该是大致相同的,也就是说将哈希环对应的圆周均匀分配至每一个现有节点,得到每一个现有节点对应的节点区域,并且此时每一个现有节点都在哈希环中均匀分布,也就是说哈希环中的现有节点是均匀分布的。
具体地,区域参考值可以是根据哈希环的圆周长以及现有节点的总数进行确定的,具体可以是根据圆周长与节点总数的比值确定区域参考值。
在一个实施例中,计算机设备可以将节点区域值与区域参考值进行大小比对,根据大小比对结果确定哈希环上的节点是否为均匀分布的。
步骤206,根据比对的结果确定哈希环均匀度,根据哈希环均匀度从哈希环中的现有节点中确定目标节点。
其中,现有节点是哈希环中已经存在的节点,新增节点是将要在哈希环中新增的节点。目标节点是从现有节点中提取出来的,用于确定新增节点位置的节点,具体可以是根据目标节点在哈希环中对应的目标节点区域确定新增节点的位置。
一般来说,当节点区域值大于区域参考值时,说明节点区域值大于区域参考值的现有节点在哈希环中所占的面积较大,换言之,也说明在该哈希环中可能存在所占区域较小的现有节点,即哈希环中对应的现有节点存在分布不均匀的可能性。当节点区域值小于或者等于区域参考值时,说明节点区域值小于或者等于区域参考值的现有节点在哈希环中所占的区域面积较小,即该哈希环中存在节点分布不均匀的可能性。
在一个实施例中,计算机设备获取哈希环中的每一个现有节点对应的节点区域,并将每一个节点区域对应的节点区域值与参考区域值进行比对,根据比对结果,确定每一个现有节点在哈希环中的分布情况。一般来说,当节点区域值大于区域参考值时,判定此现有节点为区域范围较大的节点,反之,判定现有节点为区域范围较小的节点。
并且,计算机设备还会根据哈希环中的各节点的均匀度情况,判定哈希环的均匀度。并根据哈希环的均匀度,在哈希环中确定新增节点的位置。
需要说明的是,为了保证分布式系统上现有节点的负载均衡,需要尽量保证现有节点在分布式系统中能够均匀分布。故而,当分布式系统中需要新增节点时,需要在哈希环中确定新增节点的位置,以保证新增节点后,该哈希环中的现有节点以及新增节点是均匀分布的。在一个实施例中,当哈希环中的现有节点不是均匀分布时,当在哈希环中新增节点时,尽量使得哈希环中新增节点后形成一个节点是均匀分布的哈希环。在另一个实施例中,当哈希环中的现有节点是均匀分布时,当在哈希环中新增节点时,保证哈希环中新增节点后仍然是均匀分布的。
具体地,根据均匀度确定新增节点位置确定策略。在一个实施例中,哈希环均匀度分为不同的均匀度等级,并且不同的均匀度等级对应不同的新增节点位置确定策略。如当哈希环为均匀分布时,对应的位置确定策略可以是均匀确定策略,并根据均匀策略确定目标节点,当哈希环为非均匀分布时,对应的位置确定策略可以是非均匀确定策略,并根据非均匀策略确定目标节点。
步骤208,根据目标节点对应的目标节点区域确定新增节点的位置。
具体地,根据位置确定策略确定新增节点的位置。在一个实施例中,可以将现有节点中的其中一个或者多个的节点确定为目标节点,并根据目标节点在哈希环中对应的目标节点区域确定新增节点的位置。
在一个实施例中,将现有节点中的其中一个节点提取为目标节点,并在目标节点对应的目标节点区域中的划分出一个子区域,将子区域作为新增节点对应的新增节点区域,并根据新增节点区域的边界点确定新增节点的位置。
在另一个实施例中,将现有节点中的其中多个或者全部的节点提取为目标节点,并在每一个目标节点中划分出一个子区域,并根据所有的子区域作为新增节点的新增节点区域,并根据新增节点区域确定新增节点的位置。并且,需要说明的是,新增节点的位置可以为一个位置也可以是多个位置,在此不做限制。
上述实施例中,通过哈希环中的现有节点对应的节点区域值与参考区域值的比对结果,确定哈希环上的节点分布的均匀度,进而根据哈希环的实际均匀度情况在现有节点中确定目标节点,进而可以根据目标节点确定新增节点的位置,进而实现了在哈希环均匀度值得约束下,确定新增节点位置的技术效果,当在哈希环中新增节点时仍然可以保证哈希环的均匀度。实现了分布式系统中节点的负载均衡,提高了数据处理的效率。
在一个实施例中,获取哈希环上的现有节点对应的节点区域值,包括:获取哈希环上现有节点对应的哈希位置;依照顺时针方向,在哈希环中获取现有节点对应的下一个相邻现有节点,根据现有节点以及下一个相邻现有节点分别对应的哈希位置,确定现有节点在哈希环上对应的节点区域值。
其中,节点区域值是指节点的存储范围占整个哈希环的比例,具体可以根据弧线长度占比来计算占比。哈希位置是指节点在哈希环中对应的位置,具体可以通过坐标等数据进行表征。并通过哈希环中相邻节点分别对应的哈希位置确定哈希环上相邻节点之间的区域数值,并用区域数值表征节点对应的节点区域值。具体地,然后将每一个区域的弧长与计算得到的参考值进行比对,以确定该区域弧长是否存在数据倾斜的问题。具体的,超过这个数值代表着,数据倾斜量比较大了,有足够的空间容纳新节点数据。继续参考图3,图3中的现有节点a与现有节点d之间的区域对应的节点区域值为大于75%,说明现有节点d对应的节点区域da为非均匀区域,说明在现有节点d中存在数据倾斜的问题。
上述实施例中,通过计算哈希环中的各节点对应的哈希值,确定每个现有节点对应的节点区域值,使得计算节点区域值简单、高效,提高了节点区域值的计算效率。
在一个实施例中,获取区域参考值,包括:获取哈希环上现有节点对应的现有节点数量,以及哈希环中新增节点对应的新增节点数量;计算新增节点数量与现有节点数量的相对值;根据相对值确定区域参考值,区域参考值存储于区块链中。
在一个具体的实施例中,区域参考值的计算公式可以为:参考区域值=(现有节点数量-新增节点数量)/现有节点数量。需要强调的是,为进一步保证上述区域参考值的私密和安全性,上述区域参考值还可以存储于一区块链的节点中。
上述实施例中,通过设定对应的参考区域值计算公式,可以适用于任何场景中的参考区域值计算过程,即不论哈希环中的节点数量为多个,都能通过该设定的公式快速准确地得到对应的参考区域值,通过公式确定参考区域值,不仅使得参考值可以快速确定,并且也使得参考值的确定都是基于同一个标准,极大地提高了参考区域值确定的准确性以及确定的效率。
在一个实施例中,根据比对的结果确定哈希环均匀度,根据哈希环均匀度从哈希环中的现有节点中确定目标节点,包括:当哈希环中存在节点区域值大于区域参考值的现有节点时,将节点区域值大于区域参考值的现有节点确定为目标节点;当哈希环中所有的现有节点对应的节点区域值皆小于或者等于区域参考值时,将哈希环中的所有的现有节点确定为目标节点。
在一个实施例中,根据比对的结果确定哈希环均匀度,并根据均匀度确定新增节点位置确定策略。
哈希均匀度用于表征哈希环中节点的分布情况,一般哈希均匀度越高说明哈希环上的现有节点分布越均匀,在分布式系统中越能实现负载均衡。具体地,当哈希环中的现有节点的节点区域值大于区域参考值时,判定哈希环中的现有节点存在分布不均衡的情况,判定哈希环的均匀度越低。
在一个实施例中,当哈希环中存在现有节点的节点区域值的数值大于参考区域值时,将对应的现有节点确定为目标节点,可以理解,此时的目标节点是在哈希环中分布不均匀的节点(该目标节点在哈希环中的占比较大),故而,当此时需要在哈希环中新增节点时,就可以将新增节点的位置确定在目标节点所占的节点区域范围内,以利用新增节点对现有的哈希环中的节点的分布进行调整,使得根据现有节点以及新增节点确定的哈希环更加均匀,进一步实现负载均衡。
在另一个实施例中,当哈希环中的节点分布相对均匀时,如哈希环中的节点对应的节点区域值都不大于参考区域值,或者哈希环中的节点区域值大致相同时,说明此时分布时系统基本能够实现负载均衡。此时需要在哈希环中继续新增节点时,还包括将哈希环中所有现有节点都确定为目标节点,以根据所有的目标节点确定新增节点的位置。如可以分别从目标节点对应的节点区域中划分出部分区域作为新增节点的新增节点区域。这样,通过从所有的节点中分别划分出一个子区域,共同组成新增节点的新增节点区域,还能保证即使新增节点后仍然满足分布时系统中的节点分布均匀,进而大致实现负载均衡。
上述实施例中,根据比对的结果确定哈希环均匀度,并根据均匀度确定新增节点位置确定策略。实现了对于不同的哈希环均匀度情况自适应确定目标节点,并根据目标节点自适应确定新增节点的位置的方式策略,实现了在不同场景下选择与场景最匹配的方式确定新增节点的位置,进而保证了在不同情况下都能实现负载均衡的目标。
在一个实施例中,哈希环中存在节点区域值大于区域参考值的现有节点;根据目标节点对应的目标节点区域确定新增节点的位置,包括:根据哈希环上节点的节点数量,确定哈希环上的每一个节点对应的可分配区域,节点包括现有节点以及新增节点;从目标节点对应的目标节点区域中划分出与可分配区域对应的区域范围,并将划分出的区域范围作为新增节点的新增节点区域;根据新增节点区域确定新增节点的位置。
如图4所示,图4为一个实施例中提供的一种在非均匀哈希环中新增节点的示意图。在图4中,哈希环中的现有节点为节点a、b、c、d,新增节点为节点e,在图3中计算节点d的节点区域值为大于参考区域值75%,故而将节点d作为目标节点,并将节点d对应的节点区域da作为目标节点区域。然后根据现有节点以及新增节点对应的总数量,根据哈希环以及总数量计算每一个节点对应的可分配区域,具体地可以计算哈希环对应的圆周与节点总数量的比值,根据比值确定在哈希环上新增节点后,每一个节点在哈希环中应该对应的可分配区域值。
在一个实施例中,由于目标节点区域是在哈希环中存在的节点区域值大于区域参考值的区域,故而可以通过从目标节点区域中划分出部分区域,并作为新增节点区域,进而不仅使得较大的目标区域得到了向参考区域值趋近,也解决了在哈希环中新增节点后也保证节点分布相对均匀的技术效果。
在一个实施例中,可以在目标区域中划分出与可分配区域的范围一致的区域作为新增节点区域,这样可以至少保证新增节点区域与其他非目标区域对应的区域值是一致的,都是可分配区域值。
在另一个实施例中,还可以将目标区域均匀划分为两部分,其中一部分继续作为目标区域,另一部分可以作为新增节点区域。在该实施例中,可以保证目标区域与新增节点区域的一致性,防止新增节点后,目标区域与新增区域的区域值差别值过大,造成节点在哈希环中的分布不均匀。
在一个实施例中,哈希环中所有的现有节点对应的节点区域值皆小于或者等于区域参考值;根据目标节点对应的目标节点区域确定新增节点的位置,包括:根据哈希环上节点的节点数量,确定哈希环上的每一个节点对应的可分配区域,节点包括现有节点以及新增节点;从现有节点中分别划分出子区域,使得根据各子区域得到的总区域与可分配区域对应的区域范围一致;将每一个子区域作为新增节点的节点区域,并根据新增节点的节点区域确定新增节点的位置。
如图5所示,图5为一个实施例中提供的一种在均匀哈希环中新增节点的示意图,在图5中,哈希环中的现存节点为节点a、b、c、d,新增节点为节点e,在图5中计算现有节点a、b、c、d的节点区域值皆不大于参考区域值75%,并且,现有节点的节点区域值大致相同,故而可以将所有的现有节点同时作为目标节点,并将目标节点对应的节点区域ab、bc、cd、以及da作为目标节点区域。然后根据现存节点以及新增节点对应的总数量,根据哈希环以及总数量计算每一个节点对应的可分配区域,具体地可以计算哈希环对应的圆周与节点总数量的比值,根据比值确定在哈希环上新增节点后,每一个节点在哈希环中应该对应的可分配区域值。
在一个实施例中,由于目标节点区域在哈希环中均匀分布的区域,故而可以通过从每一个目标节点区域中划分出部分区域,并作为新增节点的子区域,进而通过从每一个目标节点区域中分别划分出对应的子区域,保证了目标节点在划分出子区域后仍然保证了均匀性。同时从目标节点区域中划分的所有子区域组成的新增节点区域大致与可分配区域的数值大小一致,故而也保证了新增节点区域与哈希环中的目标区域的区域值也是一致的,进而保证了在均匀的哈希环中新增节点后,仍然保证了哈希环上的节点分布的均匀性。
在一个实施例中,可以按照顺时针方向,在每一个目标区域的前半段区域中划分出新增节点的子区域。在另一个实施例中,还可以按照顺时针方向,在每一个目标节点区域的后半段区域中划分出新增节点的子区域。或者,在其他实施例中,对于是在前半部分或者后半部分划分出对应的子区域并不做具体地限定。
在另一个实施例中,当现存节点区域的节点区域值并不是相对均匀时,还可以按照各现存节点区域值构建比例关系,并根据对应的比例关系确定从对应的现存节点区域中划分出的子区域的范围,以使得将划分后子区域后剩余的区域范围大致相同,进一步实现了分布式系统中的节点负载均衡。
如图5所示,在图5中,对于新增节点e,子区域(a:e-1)、子区域(b:e-2)、子区域(c:e-3)、子区域(d:e-1)四个部分的组成了新增节点e的新增子区域,并根据4个新增子区域确定新增节点的新增区域。也就是说,在图5中实现了通过abcd四个区域每个分出e所需要空间的四分之一给e。
需要说明的是,在其他实施例中,在哈希环中新增节点后还可以通过新增虚拟节点进一步实现哈希环中的节点的均匀分布。具体地,由实际节点虚拟复制而来的节点被称为"虚拟节点",即对每一个节点计算多个哈希,每个计算结果位置都放置一个节点,称为虚拟节点。具体做法可以在服务器ip或主机名的后面增加编号来实现。在实际应用中,通常将虚拟节点数设置为32甚至更大,因此即使很少的服务节点也能做到相对均匀的数据分布。由于虚拟节点数量较多,与虚拟节点的映射关系也变得相对均衡了。在本实施例中,在考虑哈希环中节点分布均匀性的限制性,确定新增节点的位置,并且还可以进一步在哈希环中布置虚拟节点,实现了在多维度控制哈希环上节点分布的均匀性。进一步实现了负载均衡。
在传统技术中,可以通过在哈希环中设置虚拟节点的方式,来实现哈希环中的节点分布相对均衡,但是传统方法中无法解决在新增节点的时候造成的新的数据倾斜和平衡性的问题。通过本提案中以哈希环的均匀度值确定对应的新增节点位置确定策略,是以哈希环均匀度为限制条件的新增节点,进而保证了在新增节点后仍然符合哈希环均匀性的标准。并且,在本提案中还可以配合新增虚拟节点的方案,进而实现了在双重条件下保证哈希环的均匀性。采用这种扩容方式的时候,无论是原始的一致性hash算法情况下啊,或者在虚拟节点下的一致性算法的情况下,都可以有效防止数据倾斜的情况,大大提高节点扩容后系统的平衡性。
在另一个实施例中,在构建hash环的基础上还可以缩小哈希环的整体大小。例如将2^32大小的哈希环缩小至2^20大小。因为传统的一致性hash是需要设置相当数量的虚拟节点,大点的环有助于减少偶然性。现在改进后的一致性hash不需要设置虚拟节点,所以哈希环太大会加大计算量,适量缩小。但是在节点比较多的情况下,太小的环会造成数据拥挤,所以2^20处于合适的范围,并不绝对,并且,在不同的实施例中,哈希环的空间大小可以根据需求进行适当的放大或者缩小处理。
在一个实施例中,新增多个节点时,可以先在哈希环中新增一个节点,结束之后,再新增一个节点,重复执行。
上述实施例中通过一个均匀性约束条件确定新增节点在哈希环中的位置,以保证在哈希环中新增节点后实现更加均匀的节点分布效果。具体是通过计算各节点在哈希环中所占的区域占比,来确定新增节点的位置确定策略的。并且,通过本申请中的方案,只需根据实际的节点就能保证哈希环上节点的均匀性,由于节点数较少,减少了对节点的管理,使得节点能够更加方便的扩容。本申请中还根据哈希环上的节点实际分布情况,分两种不同的策略确定新增节点的位置确定方法,第一种是哈希环上现存节点为均匀分布情况下的新增节点确定策略,一种是哈希环中现存节点为非均匀分布情况下的新增节点确定策略。使得通过本申请提供的新增节点位置确定策略更加合理,适应更多的场景,以及通过相适应的方式确定得到的新增节点位置更加精准,更能实现负载均衡。以及本申请中还可以结合虚拟节点的方式,进一步实现负载均衡,方式更加灵活。
应该理解的是,虽然图2的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,图2中的至少一部分步骤可以包括多个步骤或者多个阶段,这些步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤中的步骤或者阶段的至少一部分轮流或者交替地执行。
在一个实施例中,如图6所示,提供了一种节点位置确定装置,包括:
获取模块602,用于获取哈希环上的现有节点对应的节点区域值;
比对模块604,用于获取区域参考值,将节点区域值与区域参考值进行比对;
第一确定模块606,用于根据比对的结果确定哈希环均匀度,根据哈希环均匀度从哈希环中的现有节点中确定目标节点;
第二确定模块608,用于根据目标节点对应的目标节点区域确定新增节点的位置。
在一个实施例中,获取模块602还用于获取哈希环上现有节点对应的哈希位置;依照顺时针方向,在哈希环中获取现有节点对应的下一个相邻现有节点,根据现有节点以及下一个相邻现有节点分别对应的哈希位置,确定现有节点在哈希环上对应的节点区域值。
在一个实施例中,比对模块604还用于获取哈希环上现有节点对应的现有节点数量,以及哈希环中新增节点对应的新增节点数量;计算新增节点数量与现有节点数量的相对值;根据相对值确定区域参考值。
在一个实施例中,第一确定模块606还用于当哈希环中存在节点区域值大于区域参考值的现有节点时,将节点区域值大于区域参考值的现有节点确定为目标节点;当哈希环中所有的现有节点对应的节点区域值皆小于或者等于区域参考值时,将哈希环中的所有的现有节点确定为目标节点。
在一个实施例中,第二确定模块608还用于根据哈希环上节点的节点数量,确定哈希环上的每一个节点对应的可分配区域,节点包括现有节点以及新增节点;从目标节点对应的目标节点区域中划分出与可分配区域对应的区域范围,并将划分出的区域范围作为新增节点的新增节点区域;根据新增节点区域确定新增节点的位置。
在一个实施例中,哈希环中所有的现有节点对应的节点区域值皆小于或者等于区域参考值;,第二确定模块608还用于根据哈希环上节点的节点数量,确定哈希环上的每一个节点对应的可分配区域,节点包括现有节点以及新增节点;从现有节点中分别划分出子区域,使得根据各子区域得到的总区域与可分配区域对应的区域范围一致;将每一个子区域作为新增节点的节点区域,并根据新增节点的节点区域确定新增节点的位置。
关于节点位置确定装置的具体限定可以参见上文中对于节点位置确定方法的限定,在此不再赘述。上述节点位置确定装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
在一个实施例中,提供了一种计算机设备,该计算机设备可以是服务器,其内部结构图可以如图7所示。该计算机设备包括通过系统总线连接的处理器、存储器和网络接口。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统、计算机程序和数据库。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的数据库用于存储节点数据。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种节点位置确定方法。
本领域技术人员可以理解,图7中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
在一个实施例中,提供了一种计算机设备,包括存储器和处理器,存储器中存储有计算机程序,该处理器执行计算机程序时实现以下步骤:获取哈希环上的现有节点对应的节点区域值;获取区域参考值,将节点区域值与区域参考值进行比对;根据比对的结果确定哈希环均匀度,根据哈希环均匀度从哈希环中的现有节点中确定目标节点;根据目标节点对应的目标节点区域确定新增节点的位置。
在一个实施例中,处理器执行计算机程序时还实现以下步骤:获取哈希环上现有节点对应的哈希位置;依照顺时针方向,在哈希环中获取现有节点对应的下一个相邻现有节点,根据现有节点以及下一个相邻现有节点分别对应的哈希位置,确定现有节点在哈希环上对应的节点区域值。
在一个实施例中,处理器执行计算机程序时还实现以下步骤:获取哈希环上现有节点对应的现有节点数量,以及哈希环中新增节点对应的新增节点数量;计算新增节点数量与现有节点数量的相对值;根据相对值确定区域参考值,区域参考值存储于区块链中。
在一个实施例中,处理器执行计算机程序时还实现以下步骤:当哈希环中存在节点区域值大于区域参考值的现有节点时,将节点区域值大于区域参考值的现有节点确定为目标节点;当哈希环中所有的现有节点对应的节点区域值皆小于或者等于区域参考值时,将哈希环中的所有的现有节点确定为目标节点。
在一个实施例中,处理器执行计算机程序时还实现以下步骤:根据哈希环上节点的节点数量,确定哈希环上的每一个节点对应的可分配区域,节点包括现有节点以及新增节点;从目标节点对应的目标节点区域中划分出与可分配区域对应的区域范围,并将划分出的区域范围作为新增节点的新增节点区域;根据新增节点区域确定新增节点的位置。
在一个实施例中,处理器执行计算机程序时还实现以下步骤:根据哈希环上节点的节点数量,确定哈希环上的每一个节点对应的可分配区域,节点包括现有节点以及新增节点;从现有节点中分别划分出子区域,使得根据各子区域得到的总区域与可分配区域对应的区域范围一致;将每一个子区域作为新增节点的节点区域,并根据新增节点的节点区域确定新增节点的位置。
在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现以下步骤:获取哈希环上的现有节点对应的节点区域值;获取区域参考值,将节点区域值与区域参考值进行比对;根据比对的结果确定哈希环均匀度,根据哈希环均匀度从哈希环中的现有节点中确定目标节点;根据目标节点对应的目标节点区域确定新增节点的位置。
在一个实施例中,计算机程序被处理器执行时还实现以下步骤:获取哈希环上现有节点对应的哈希位置;依照顺时针方向,在哈希环中获取现有节点对应的下一个相邻现有节点,根据现有节点以及下一个相邻现有节点分别对应的哈希位置,确定现有节点在哈希环上对应的节点区域值。
在一个实施例中,计算机程序被处理器执行时还实现以下步骤:获取哈希环上现有节点对应的现有节点数量,以及哈希环中新增节点对应的新增节点数量;计算新增节点数量与现有节点数量的相对值;根据相对值确定区域参考值,区域参考值存储于区块链中。
在一个实施例中,计算机程序被处理器执行时还实现以下步骤:当哈希环中存在节点区域值大于区域参考值的现有节点时,将节点区域值大于区域参考值的现有节点确定为目标节点;当哈希环中所有的现有节点对应的节点区域值皆小于或者等于区域参考值时,将哈希环中的所有的现有节点确定为目标节点。
在一个实施例中,计算机程序被处理器执行时还实现以下步骤:根据哈希环上节点的节点数量,确定哈希环上的每一个节点对应的可分配区域,节点包括现有节点以及新增节点;从目标节点对应的目标节点区域中划分出与可分配区域对应的区域范围,并将划分出的区域范围作为新增节点的新增节点区域;根据新增节点区域确定新增节点的位置。
在一个实施例中,计算机程序被处理器执行时还实现以下步骤:根据哈希环上节点的节点数量,确定哈希环上的每一个节点对应的可分配区域,节点包括现有节点以及新增节点;从现有节点中分别划分出子区域,使得根据各子区域得到的总区域与可分配区域对应的区域范围一致;将每一个子区域作为新增节点的节点区域,并根据新增节点的节点区域确定新增节点的位置。
本发明所指区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。区块链(blockchain),本质上是一个去中心化的数据库,是一串使用密码学方法相关联产生的数据块,每一个数据块中包含了一批次网络交易的信息,用于验证其信息的有效性(防伪)和生成下一个区块。区块链可以包括区块链底层平台、平台产品服务层以及应用服务层等。
需要说明的是,本申请可用于众多通用或专用的计算机系统环境或配置中。例如:个人计算机、服务器计算机、手持设备或便携式设备、平板型设备、多处理器系统、基于微处理器的系统、置顶盒、可编程的消费电子设备、网络pc、小型计算机、大型计算机、包括以上任何系统或设备的分布式计算环境等等。本申请可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本申请,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中”。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,的计算机程序可存储于一计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和易失性存储器中的至少一种。非易失性存储器可包括只读存储器(read-onlymemory,rom)、磁带、软盘、闪存或光存储器等。易失性存储器可包括随机存取存储器(randomaccessmemory,ram)或外部高速缓冲存储器。作为说明而非局限,ram可以是多种形式,比如静态随机存取存储器(staticrandomaccessmemory,sram)或动态随机存取存储器(dynamicrandomaccessmemory,dram)等。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。
1.一种节点位置确定方法,其特征在于,所述方法包括:
获取哈希环上的现有节点对应的节点区域值;
获取区域参考值,将所述节点区域值与区域参考值进行比对;
根据比对的结果确定哈希环均匀度,根据所述哈希环均匀度从所述哈希环中的所述现有节点中确定目标节点;
根据所述目标节点对应的目标节点区域确定新增节点的位置。
2.根据权利要求1所述的方法,其特征在于,所述获取哈希环上的现有节点对应的节点区域值,包括:
获取哈希环上现有节点对应的哈希位置;
依照顺时针方向,在所述哈希环中获取现有节点对应的下一个相邻现有节点;
根据所述现有节点以及所述下一个相邻现有节点分别对应的所述哈希位置,确定所述现有节点在所述哈希环上对应的节点区域值。
3.根据权利要求1所述的方法,其特征在于,所述获取区域参考值,包括:
获取哈希环上现有节点对应的现有节点数量,以及所述哈希环中新增节点对应的新增节点数量;
计算所述新增节点数量与所述现有节点数量的相对值;
根据所述相对值确定区域参考值,所述区域参考值存储于区块链中。
4.根据权利要求3所述的方法,其特征在于,所述根据比对的结果确定哈希环均匀度,根据所述哈希环均匀度从所述哈希环中的所述现有节点中确定目标节点,包括:
当所述哈希环中存在所述节点区域值大于所述区域参考值的所述现有节点时,将所述节点区域值大于所述区域参考值的所述现有节点确定为目标节点;
当所述哈希环中所有的所述现有节点对应的所述节点区域值皆小于或者等于所述区域参考值时,将所述哈希环中的所有的所述现有节点确定为目标节点。
5.根据权利要求4所述的方法,其特征在于,所述哈希环中存在所述节点区域值大于所述区域参考值的所述现有节点;所述根据所述目标节点对应的目标节点区域确定新增节点的位置,包括:
根据所述哈希环上节点的节点数量,确定所述哈希环上的每一个所述节点对应的可分配区域,所述节点包括所述现有节点以及所述新增节点;
从所述目标节点对应的目标节点区域中划分出与所述可分配区域对应的区域范围,并将划分出的所述区域范围作为所述新增节点的新增节点区域;
根据所述新增节点区域确定所述新增节点的位置。
6.根据权利要求4所述的方法,其特征在于,所述哈希环中所有的所述现有节点对应的所述节点区域值皆小于或者等于所述区域参考值;所述根据所述目标节点对应的目标节点区域确定新增节点的位置,包括:
根据所述哈希环上节点的节点数量,确定所述哈希环上的每一个节点对应的可分配区域,所述节点包括所述现有节点以及所述新增节点;
从所述现有节点中分别划分出子区域,使得根据各所述子区域得到的总区域与所述可分配区域对应的区域范围一致;
将每一个所述子区域作为所述新增节点的节点区域,并根据所述新增节点的节点区域确定所述新增节点的位置。
7.一种节点位置确定装置,其特征在于,所述装置包括:
获取模块,用于获取哈希环上的现有节点对应的节点区域值;
比对模块,用于获取区域参考值,将所述节点区域值与区域参考值进行比对;
第一确定模块,用于根据比对的结果确定哈希环均匀度,根据所述哈希环均匀度从所述哈希环中的所述现有节点中确定目标节点;
第二确定模块,用于根据所述目标节点对应的目标节点区域确定新增节点的位置。
8.根据权利要求7所述的装置,其特征在于,所述获取模块还用于获取哈希环上现有节点对应的哈希位置;依照顺时针方向,在所述哈希环中获取现有节点对应的下一个相邻现有节点,根据所述现有节点以及所述下一个相邻现有节点分别对应的所述哈希位置,确定所述现有节点在所述哈希环上对应的节点区域值。
9.一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至6中任一项所述的方法的步骤。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至6中任一项所述的方法的步骤。
技术总结