简陋版一致性hash算法实现

玛吉 玛吉     2022-08-22     607

关键词:

 1     public function hashAction(){
 2             $server_list = range(14,114);
 3             $server_slot = $this->hashAri($server_list);
 4             $key_list = range(1,100000);
 5             $key_slot = $this->hashAri($key_list);
 6           
 7             //分配位子
 8             $result = $this->hashSlot($server_slot,$key_slot);
 9             $count = count($key_list);
10             foreach ($result as $key=>$val){
11                 echo "slot = ".$key." rate=".count($val)/$count."<br>";
12             }
13         }
14         
15         public function hashSlot($server_slot,$key_slot){
16             $result = array();
17             $min = 0;
18             foreach ($server_slot as $key=>$value){
19                 $max = $key;
20                 foreach ($key_slot as $k=>$v){
21                     if($k>$min && $k<$max)$result[$value][] = $v;
22                 }
23                 $min = $key;
24             }
25             return $result;
26         }
27         
28         public function hashAri($list){
29             $result = array();
30             foreach ($list as $key){
31                 $slot = rand(1,pow(2,30));
32                 $result[$slot] = $key;
33             }
34             ksort($result);
35             return $result;
36         }

 
 
 
解决问题:

  一般取余数的hash算法,新增或者删除机器,几乎所有的key都需要重新映射

原理:

将机器和key都按照同一个hash算法,映射到一个圆环上,所有的key顺时针,寻找离他最近的机器,找到并存储到该机器上

为了解决分布不均问题:

虚拟机器id

    就是把实体机器,复制出几个虚拟id,映射到圆环上,一定程度可以负载均衡

图例:

正常的一致性hash映射

删掉一个机器的映射

添加虚拟id之后的映射

    

对一致性hash算法,java代码实现的深入研究

一致性Hash算法关于一致性Hash算法,在我之前的博文中已经有多次提到了,MemCache超详细解读一文中"一致性Hash算法"部分,对于为什么要使用一致性Hash算法、一致性Hash算法的算法原理做了详细的解读。算法的具体原理这里再次贴... 查看详情

对一致性hash算法,java代码实现的深入研究

一致性Hash算法关于一致性Hash算法,在我之前的博文中已经有多次提到了,MemCache超详细解读一文中"一致性Hash算法"部分,对于为什么要使用一致性Hash算法和一致性Hash算法的算法原理做了详细的解读。算法的具体原理这里再次贴... 查看详情

对一致性hash算法,java代码实现的深入研究

原文:http://www.cnblogs.com/xrq730/p/5186728.html一致性Hash算法关于一致性Hash算法,在我之前的博文中已经有多次提到了,MemCache超详细解读一文中"一致性Hash算法"部分,对于为什么要使用一致性Hash算法、一致性Hash算法的算法原理做了... 查看详情

一致性hash算法原理,java实现,及用途

学习记录:一致性Hash算法原理及java实现:https://blog.csdn.net/suifeng629/article/details/81567777一致性Hash算法介绍,原理,及使用场景:https://blog.csdn.net/cbmljs/article/details/88021598纯转载,侵删 查看详情

架构实践使用golang实现一致性hash算法代码

【架构实践】使用golang实现一致性Hash算法代码文章目录【架构实践】使用golang实现一致性Hash算法代码分布式系统中的一致性Hash算法具体是什么?再详细一点讲讲一致性Hash算法存在的一些问题一致性Hash算法都有哪些实际的应用... 查看详情

编程实践一致性哈希(hash)算法实现

目录1为什么使用一致性哈希1.1我该访问谁?1.2节点数量变化了怎么办?2算法原理2.1步骤 查看详情

java面试题高阶版(代码片段)

...减少的时候,数据存取位置为发生变化;  什么是一致性hash算法?  一致性hash算法对2^32取模,整个Hash空间组织成一个虚拟的圆环,Hash函数的值空间为0~2^32-1(一个32位无符号整型),在hash环中顺序找到服务节点2.redis... 查看详情

一致性hash算法

...构:核心原理与案例分析》时,第一次比较完备的了解了一致性hash算法, 一致性哈希算法早在1997年由麻省理工学院提出的一种分布式哈希(DHT)实现算法,而该算法的核心是将hash环的数据结构实现KEY到缓存服务器的HASH映... 查看详情

一致性hash算法及java实现

一致性hash算法是分布式中一个常用且好用的分片算法、或者数据库分库分表算法。现在的互联网服务架构中,为避免单点故障、提升处理效率、横向扩展等原因,分布式系统已经成为了居家旅行必备的部署模式,所以也产出了... 查看详情

算法技术专题如何用java实现一致性hash算法(consistenthashing)(上)(代码片段)

一致性hash的历史【ConsistentHashing算法】早在1997年就在论文Consistenthashingandrandomtrees中被提出,目前在cache系统中应用越来越广泛;一致性hash的目的一致性哈希算法是分布式系统中常用的算法,一致性哈希算法解决了普... 查看详情

hash一致性算法

一致性hash算法是,1097麻省理工提出的分布式hashDHT实现算法,极倔internet的热点问题 平衡性hash结果尽可能的分布到所有的缓存中去,缓冲空间利用率最高单调性保持已有的缓存能映射到对应的位置,新加入的缓存能加入新的... 查看详情

一致性hash算法实现(伪码)(代码片段)

一致性Hash算法原理参考此博客,介绍的比较详细:https://www.cnblogs.com/lpfuture/p/5796398.html预设场景:所有请求过来,会根据一致性hash算法,选择一个服务器转发出去,一致性hash算法获取到的是服务器的ip。假定节点存储结构如下... 查看详情

手撸一致性hash算法(java实现)(代码片段)

正文在下面,先打个广告:一、一致性Hash(ConsistentHashing)原理剖析引入一致性哈希算法是分布式系统中常用的算法。一致性哈希算法解决了普通余数Hash算法伸缩性差的问题,可以保证在上线、下线服务器的情况下尽量... 查看详情

一致性hash算法

参考帖https://www.cnblogs.com/mushroom/p/4472369.html hash一致性算法hash函数的一种,他的目的在于实现负载均衡,并且每次访问的目标具有一致性,举个例子来说,根据客户端请求ip,经过hash一致性算法,每次计算出来的一致性hash值... 查看详情

一致性hash算法

https://blog.csdn.net/cb_lcl/article/details/81448570实现https://www.cnblogs.com/fanguangdexiaoyuer/p/6549306.html 查看详情

一致性hash算法

一致性哈希算法在1997年由麻省理工学院提出的一种分布式哈希(DHT)实现算法,设计目标是为了解决因特网中的热点(Hotspot)问题,初衷和CARP十分类似。一致性哈希修正了CARP使用的简单哈希算法带来的问题,使得分布式哈希(DHT... 查看详情

一致性hash算法

一致性哈希算法在1997年由麻省理工学院提出的一种分布式哈希(DHT)实现算法,设计目标是为了解决因特网中的热点(Hotspot)问题,初衷和CARP十分类似。一致性哈希修正了CARP使用的简单哈希算法带来的问题,使得分布式哈希(DHT... 查看详情

一致性hash算法

...载自:http://blog.csdn.net/cywosp/article/details/23397179  一致性哈希算法在1997年由麻省理工学院提出的一种分布式哈希(DHT)实现算法,设计目标是为了解决因特网中的热点(Hotspot)问题,初衷和CARP十分类似。一致性哈希修正了CAR... 查看详情