哈希值的分配方半岛体育- 半岛体育官方网站- APP下载法及装置
2025-09-02半岛,半岛体育,半岛体育app,半岛官网,半岛电竞,半岛真人,半岛棋牌,半岛体育官网注册,半岛体育官方app下载,半岛体育app下载,半岛体育怎么样,半岛体育官网,半岛体育登录入口,半岛体育官方网站
(73)专利权人南京亚信智网科技有限公司地址210000江苏省南京市江宁区秣周东路12号未来科技城
本申请提供一种哈希值的分配方法及装置,涉及数据处理领域,能够为数据处理系统中的各个节点均匀的分配哈希值。该方法包括,服务器确定数据处理系统的环形哈希空间的大小M,以及数据处理系统中的节点的数量X,M和X均为正整数(M)X,服务器根据环形哈希空间的大小M,以及节点的数量X,确定哈希值序列,哈希值序列包括M个哈希值,哈希值序列中的前2a×X个哈希值在环形哈希空间中均匀分布,a为整数,2a×X(M)服务器从哈希值序列中选择前X个哈希值,并将前X个哈希值分配给该X个节点。本申请用于哈希值的分配的过程中。
服务器确定数据处理系统的环形哈希空间的大小M,以及所述数据处理系统中的节点的数量X,M和X均为正整数(M)X,
所述服务器根据所述环形哈希空间的大小M,以及所述节点的数量X,确定哈希值序列,所述哈希值序列包括M个哈希值,所述哈希值序列中的前2a×X个哈希值在所述环形哈希空间中均匀分布,a为正整数,2a×X(M)
所述服务器从所述哈希值序列中选择前X个哈希值,并将所述前X个哈希值分配给所述X个节点。
2.根据权利要求1所述的方法,其特征在于,在所述服务器将所述前X个哈希值分配给所述X个节点之后,在所述数据处理系统中增加了N个节点的情况下,所述方法还包括,
所述服务器从所述哈希值序列中依次选择第X+1个哈希值到第X+N个哈希值,N为正整数,X+N≤M,
所述服务器将所述第X+1个哈希值到第X+N个哈希值分别分配给所述N个节点。
所述服务器为所述哈希值序列中的第一哈希值设置第一标识,所述第一哈希值为已经分配给所述数据处理系统中的节点的哈希值,所述第一标识用于表征所述哈希值已经分配给所述数据处理系统中的节点。
4.根据权利要求3所述的方法,其特征在于,在所述服务器为所述哈希值序列中的第一哈希值设置第一标识之后,所述方法还包括,
所述服务器为所述L个节点对应的哈希值设置第二标识,所述第二标识用于表征所述哈希值未分配给所述数据处理系统中的节点。
5.根据权利要求1‑2任一项所述的方法,其特征在于,在所述将所述前X个哈希值分配给所述X个节点之后,所述方法还包括,
所述服务器从所述X个节点中确定第一节点,所述第一节点的哈希值与所述待处理数据的哈希值之间的相似度最大,
处理单元,用于确定数据处理系统的环形哈希空间的大小M,以及所述数据处理系统中的节点的数量X,M和X均为正整数(M)X,
所述处理单元,还用于根据所述环形哈希空间的大小M,以及所述节点的数量X,确定哈希值序列,所述哈希值序列包括M个哈希值,所述哈希值序列中的前2a×X个哈希值在所述环形哈希空间中均匀分布,a为整数,2a×X(M)
所述处理单元,还用于从所述哈希值序列中选择前X个哈希值,并将所述前X个哈希值分配给所述X个节点。
从所述哈希值序列中依次选择第X+1个哈希值到第X+N个哈希值,N为正整数,X+N≤M,
在所述将所述前X个哈希值分配给X个所述节点之后,为所述哈希值序列中的第一哈希值设置第一标识,所述第一哈希值为已经分配给所述数据处理系统中的节点的哈希值,所述第一标识用于表征所述哈希值已经分配给所述数据处理系统中的节点。
在所述数据处理系统中删除了L个节点的情况下,为所述L个节点对应的哈希值设置第二标识,所述第二标识用于表征所述哈希值未分配给所述数据处理系统中的节点L为小于等于X的正整数。
10.根据权利要求6‑9任一项所述的装置,其特征在于,所述装置还包括通信单元,所述处理单元,还用于,确定待处理数据的哈希值,从所述X个节点中确定第一节点,所述第一节点的哈希值与所述待处理数据的哈希值的相似度最大,
11.一种哈希值的分配装置,其特征在于,包括,处理器和通信接口,所述通信接口和所述处理器耦合,所述处理器用于运行计算机程序或指令,以实现如权利要求1‑5任一项中所述的哈希值的分配方法。
12.一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,其特征在于,当计算机执行该指令时,该计算机执行上述权利要求1‑5任一项中所述的哈希值的分配方法。
[0001]本申请涉及数据处理领域,尤其涉及一种哈希值的分配方法及装置。
[0002]分布式数据处理系统中,服务器通过一致性哈希技术,为分布式数据处理系统中的各个节点分配一个哈希值。当待处理数据到达分布式数据处理系统中时,服务器通过一致性哈希技术确定待处理数据的哈希值,服务器将该数据发送至与该数据的哈希值一致的节点处理,从而实现了数据处理系统中的负载分担和数据一致性。
[0003]为了实现分布式数据处理系统中的均匀负载,服务器为每个节点生成多个虚拟节点,并将该多节点以及虚拟节点分布在环形哈希空间中。但是这种方法存在需要多次哈希时为每个节点生成虚拟节点,实现较为复杂,并且节点均匀分布的效果较差。
[0004]本申请提供一种哈希值的分配方法及装置,用于为数据处理系统中的各个节点均匀的分配哈希值。
[0007] 服务器确定数据处理系统的环形哈希空间的M个哈希值,以及数据处理系统中的X 个节点,M和X均为正整数(M)X,服务器根据M个哈希值,以及X个节点,确定哈希值序列,哈希值序列包括M个哈希值,M个哈希值中的前2a×X个哈希值在环形哈希空间中均匀分布,a 为整数,2a×X(M)服务器从哈希值序列中选择前X个哈希值,并将前X个哈希值分配给该X 个节点。
[0008] 基于上述技术方案,服务器确定数据处理系统的环形哈希空间的M个哈希值,以及数据处理系统中的X个节点,服务器根据M个哈希值,以及X个节点,确定哈希值序列,哈希值序列包括M个哈希值,M个哈希值中的前2a×X个哈希值在环形哈希空间中均匀分布,a为整数,2a×X,M。这样,服务器只需根据环形哈希空间大小,以及真实节点数量,即可确定哈希值序列,大大降低了算法复杂度。同时,该哈希值序列中的前2a×X个哈希值在环形哈希空间中均匀分布。这样服务器可以通过灵活调整X的值,保证为节点分配的哈希值尽可能的在环形哈希空间中均匀分布。因此,本申请实施例提供的哈希值的分配方法可以降低算法复杂度,并且保证为节点分配的哈希值在环形哈希空间中均匀分布。
[0009] 第二方面,本申请提供一种哈希值的分配装置,该装置包括,处理单元,用于确定数据处理系统的环形哈希空间的大小M,以及数据处理系统中的节点的数量X,M和X均为正整数(M)X,处理单元,还用于根据环形哈希空间的大小M,以及节点的数量X,确定哈希值序列,哈希值序列包括M个哈希值,哈希值序列中的前2a×X个哈希值在环形哈希空间中均匀分布,a为整数,2a×X(M)处理单元,还用于从哈希值序列中选择前X个哈希值,并将前X个哈希值分配给该X个节点。
[0010] 第三方面,本申请提供了一种哈希值的分配装置,该装置包括,处理器和通信接口,通信接口和处理器耦合,处理器用于运行计算机程序或指令,以实现如第一方面和第一方面的任一种可能的实现方式中所描述的哈希值的分配方法。
[001 1] 第四方面,本申请提供了一种计算机可读存储介质,计算机可读存储介质中存储有指令,当指令在终端上运行时,使得终端执行如第一方面和第一方面的任一种可能的实现方式中描述的哈希值的分配方法。
[0012] 第五方面,本申请提供一种包含指令的计算机程序产品,当计算机程序产品在哈希值的分配装置上运行时,使得哈希值的分配装置执行如第一方面和第一方面的任一种可能的实现方式中所描述的哈希值的分配方法。
[0013] 第六方面,本申请提供一种芯片,芯片包括处理器和通信接口,通信接口和处理器耦合,处理器用于运行计算机程序或指令,以实现如第一方面和第一方面的任一种可能的实现方式中所描述的哈希值的分配方法。
[0014] 具体的,本申请中提供的芯片还包括存储器,用于存储计算机程序或指令。
[0023] 图9为本申请实施例提供的一种哈希值的分配装置的结构示意图,
[0024] 图10为本申请实施例提供的另一种哈希值的分配装置的结构示意图,
[0026] 下面结合附图对本申请实施例提供的哈希值的分配方法及装置进行详细地描述。
[0027] 本文中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示,单独存在A,同时存在A和B,单独存在B这三种情况。
[0028] 本申请的说明书以及附图中的术语“第一”和“第二”等是用于区别不同的对象,或者用于区别对同一对象的不同处理,而不是用于描述对象的特定顺序。
[0029] 此外,本申请的描述中所提到的术语“包括”和“具有”以及它们的任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或单元的过程、方法、系统、产品或设备没有限定于已列出的步骤或单元,而是可选地还包括其他没有列出的步骤或单元,或可选地还包括对于这些过程、方法、产品或设备固有的其它步骤或单元。
[0030] 需要说明的是,本申请实施例中, “示例性的”或者“例如”等词用于表示作例子、例证或说明。本申请实施例中被描述为“示例性的”或者“例如”的任何实施例或设计方案不应
被解释为比其它实施例或设计方案更优选或更具优势。确切而言,使用“示例性的”或者“例如”等词旨在以具体方式呈现相关概念。
[0031] 在本申请的描述中,除非另有说明,“多个”的含义是指两个或两个以上。
[0034] 哈希也叫散列,是指把任意长度的输入数据通过散列算法变换成固定长度的输出数据,该输出数据就是输入数据的哈希值。
[0036] 一致性哈希技术指的是,服务器建立一个环形哈希空间,将系统中的各个节点映射到该环形哈希空间中,每个节点对应一个哈希值。当数据到达时,服务器根据哈希算法,确定该数据的哈希值。服务器根据该数据的哈希值将该数据映射到环形哈希空间中,服务器确定距离该数据的哈希值最近的节点为处理该数据的节点。
[0037] 以环形哈希空间包括0‑9这10个哈希值,数据处理系统中包括三个节点为例,对一致性哈希技术进行说明。
[0038] 如图1所示,服务器首先建立如图1所示的环形哈希空间。该环形哈希空间中包括10个哈希值,分别为0‑9。该10个哈希值均匀分布在环形哈希空间中。该数据处理系统中包括三个节点,这三个节点的网际互联协议(internet protocol,ip)地址分别为ip1 ,ip2以及ip3。服务器计算该三个ip地址对应的哈希值,并根据哈希值在环形哈希空间中的位置,将ip地址映射到环形哈希空间中。服务器将ip地址映射到环形哈希空间中的位置如图1中的ip1,ip2和ip3所示。其中,ip1对应的哈希值为0,ip2对应的哈希值为3,ip3对应的哈希值为7。
[0039] 当数据到达该数据处理系统中后,服务器计算该数据的哈希值。并根据其哈希值在环形哈希空间中对应的位置,将该数据映射到环形哈希空间中。示例性的,服务器确定该数据的哈希值为2,服务器将数据映射到如图1中的数据1所示的位置。
[0040] 服务器确定距离该数据1最近的ip地址为ip2,则服务器确定将该数据交由ip2对应的节点处理。
[0041] 为了解决现有技术中实现哈希一致性时因为虚拟节点过多导致的算法实现较为复杂,且节点均匀分布的效果较差的问题。本申请实施例提供了一种哈希值的分配方法,服务器根据预先确定的环形哈希空间的大小M以及节点的数量X,确定一个哈希值序列。该哈希值序列包括M个哈希值,且满足哈希值序列中的前2a×X个哈希值在环形哈希空间中均匀分布的条件。服务器从哈希值序列中选择前X个哈希值,并将前X个哈希值分配给该X个节点。这样,服务器只需根据环形哈希空间大小,以及真实节点数量,即可确定哈希值序列,大大降低了算法复杂度。同时,该哈希值序列中的前2a×X个哈希值在环形哈希空间中均匀分布。这样服务器可以通过灵活调整X的值,保证哈希值尽可能的在环形哈希空间中均匀分布。
[0042] 如图2所示,为本申请实施例提供的一种数据处理系统100的系统架构图。该数据处理系统100中包括多个节点10,以及服务器20。
[0044] 服务器20用于为多个节点10分配哈希值。服务器20还用于当待处理数据到达该数
据处理系统100时,计算待处理数据的哈希值。服务器20根据待处理数据的哈希值,以及多个节点10的哈希值,从多个节点10中选择对应的节点10处理待处理数据。
[0045] 如图3所示,为本申请实施例提供的哈希值的分配方法的流程图,该方法包括以下步骤。
[0046] S101、服务器确定数据处理系统的环形哈希空间的大小M,以及数据处理系统中的节点的数量X。
[0047] 其中,M和X均为正整数(M)X。示例性的(M)1000(X)4。也即是说,环形哈希空间中包括1000个哈希值。数据处理系统中包括4个节点。
[0048] 环形哈希空间的大小,表征了环形哈希空间中具有的哈希值数量的多少。例如,当环形哈希空间的大小为M时,环形哈希空间中具有的哈希值的数量也为M。
[0049] 可选的,当环形哈希空间的大小M时,环形哈希空间中的哈希值的取值范围为0至M‑1。
[0050] 以M,1000为例来说,环形哈希空间中的哈希值的取值范围为0‑999。
[0051] 可以理解的是,服务器设置的环形哈希空间的大小,大于数据处理系统能够容纳的节点的数量的大小。这样,可以保证即使数据处理系统中后续增加节点,增加节点后数据处理系统中的节点总数量也不会超过哈希值序列中的哈希值的数量。
[0052] 此外,服务器将哈希值环形哈希空间的大小设置为一个较大的数,可以保证后续服务器计算数据的哈希值时,使哈希值能够尽可能均匀的落在环形哈希空间中,保证了数据处理系统的负载均衡。
[0053] 需要说明的是,该环形哈希空间的大小不能设置的过大,也不能设置的过小。如果环形哈希空间的大小设置的过大,将会增加生成哈希值序列是的算法的复杂度,造成服务器计算性能的浪费。如果环形哈希空间的大小设置的过小,将会导致服务器确定的待处理的数据的哈希值不能均匀的在环形哈希空间中分布。降低数据处理系统的负载均衡。并且,如果M的值设置的小于数据处理系统的最大节点数据K,将会导致服务器无法为数据处理系统的部分节点分配哈希值。其中,数据处理系统的最大节点数K,是数据处理系统中最大可扩容的节点数量,而不是数据处理系统中当前的节点数量。K为大于等于N的正整数。
[0054] 一般来说,服务器可以根据数据处理系统的最大节点数K,确定环形哈希空间的大小M。例如,服务器可以将环形哈希空间的大小设置为10×K,也即是说M,10×K。
[0055] 举例来说,一个数据处理系统中最大可扩容的节点数为100。则该环形哈希空间的大小可以设置为100×10,1000。
[0056] S102、服务器根据环形哈希空间的大小M,以及节点的数量X,确定哈希值序列。
[0057] 哈希值序列包括M个哈希值,哈希值序列中的前2a×X个哈希值在环形哈希空间中均匀分布,a为整数,2a×X,M。
[0058] 一种可能的实现方式中,服务器可以调用预先定义的genid函数,来确定哈希值序列,使得哈希值序列满足,前2a×X个哈希值在环形哈希空间中均匀分布的条件。如图4所示,该genid函数的逻辑流程如下所示,
[0059] 1、定义genid函数的初始变量n(0)以及哈希值序列的索引k,0。
[0064] 4.2、如果n大于等于X,则k值加1,n值赋值为‑1,服务器执行步骤5。
[0066] 5. 1、如果n大于或等于X与k的乘积,则序列k乘2,并且n值赋值为1。
[0068] 5.3、若哈希值r未被分配,则返回哈希值r,若哈希值r已被分配,则赋值r,r+1 ,返回哈希值r。
[0069] 需要说明的是,服务器依次将返回的哈希值存储到哈希值序列中,该哈希值序列,满足前2a×X个哈希值在环形哈希空间中均匀分布的条件。也即是说,该哈希值序列中的前X个哈希值,前2X个哈希值,前4X个哈希值……均在环形哈希空间中均匀分布。这样,服务器将前X个哈希值分配个X个节点时,可以保证该X个节点对应的哈希值在环形哈希空间中均匀分布。
[0077] S103、服务器从哈希值序列中选择前X个哈希值,并将前X个哈希值分配给该X个节点。
[0078] 一种可能的实现方式中,服务器从哈希值序列中的第一个哈希值开始,按照哈希值序列中哈希值的排列顺序,依次选择X个哈希值。服务器对该X节点进行排序,并依次将上述前X个哈希值分配给该X个节点。
[0079] 其中,服务器可以采用随机算法对该X个节点进行排序,也可以按照其他任意方式对该X个节点进行排序。
[0080] 一种示例,在M(8)X,2的情况下,服务器为第一个节点分配的哈希值为0,服务器为第二个节点分配的哈希值为4。
[0081] 又一种示例,在M(16)X,3的情况下,服务器为第一个节点分配的哈希值为0,服务器为第二个节点分配的哈希值为5、服务器为第三个节点分配的哈希值为10。
[0082] 可以理解的是,服务器在确定完每个节点的哈希值之后,可以将该节点的标识(例如ip地址) ,以及其对应的哈希值存入到预先设置的节点搜索表中。服务器可以直接通过该节点搜索表定位需要搜索的节点,以及该节点对应的哈希值。服务器可以将节点的哈希值作为索引,以方便后续数据到达数据处理系统中时,根据数据的哈希值,匹配对应的节点处理该数据。
[0083] 基于上述技术方案,服务器确定数据处理系统的环形哈希空间的M个哈希值,以及数据处理系统中的X个节点,服务器根据M个哈希值,以及X个节点,确定哈希值序列,哈希值序列包括M个哈希值,M个哈希值中的前2a×X个哈希值在环形哈希空间中均匀分布,a为整数,2a×X,M。这样,服务器只需根据环形哈希空间大小,以及真实节点数量,即可确定哈希值序列,大大降低了算法复杂度。同时,该哈希值序列中的前2a×X个哈希值在环形哈希空间中均匀分布。这样服务器可以通过灵活调整X的值,保证为节点分配的哈希值尽可能的在环形哈希空间中均匀分布。因此,本申请实施例提供的哈希值的分配方法可以降低算法复杂度,并且保证为节点分配的哈希值在环形哈希空间中均匀分布。
[0084] 基于图3所示的技术方案,如图5所示,在S103之后,本申请实施例提供的哈希值的分配方法还包括,
[0086] 其中,第一哈希值为已经分配给数据处理系统中的节点的哈希值,第一标识用于表征该哈希值已经分配给数据处理系统中的节点。
[0087] 可以理解的是,服务器为哈希值序列中已经分配给节点的哈希值设置第一标识,可以使服务器根据该第一标识即可确定该哈希值已经分配给数据处理系统中的节点。这样,当数据处理系统中增加了新的节点时,服务器可以跳过设置有第一标识的哈希值,直接从第一个未设置第一标识的哈希值开始分配。这样,可以避免服务器将已分配的哈希值又再次分配给其他节点,造成系统无法正常工作。同时,通过设置第一标识的方式,可以使服务器简单准确确定哈希值序列中的哈希值是否分配给数据处理系统中的节点。
[0088] 可选的,服务器还可以为还未分配给数据处理系统中的节点的哈希值设置第二标识。第二标识用于表征该哈希值未分配给数据处理系统中的节点。这样,可以使服务器更加简单准确确定哈希值序列中的哈希值是否分配给数据处理系统中的节点。
[0089] 一种示例,在M(8)X,2的情况下,由于哈希值0和4分别分配给了第一节点和第二节点,因此服务器为哈希值序列中的0和4这两个哈希值设置第一标识。服务器为哈希值序列中的2(6)1(3)5和7这六个哈希值设置第二标识。
[0090] 又一种示例,在M(16)X,3的情况下,由于哈希值0,5和10分别分配给了第一节点,第二节点和第三节点,因此服务器为哈希值序列中的0,5和10这三个哈希值设置第一标识。服务器为哈希值序列中2(8) 13( 1 )4(6)9( 12) 14(3)7, 11和15这十三个哈希值设置第二标识。