一致性hash的原理 把server和key hash到同一个空间,然后同方向找最近的即可。
import java.util.Collection;
import java.util.SortedMap;
import java.util.TreeMap;
public class ConsistentHash<T> {
private final HashFunction hashFunction;
private final int numberOfReplicas;
private final SortedMap<Integer, T> circle = new TreeMap<Integer, T>();
public ConsistentHash(HashFunction hashFunction, int numberOfReplicas,
Collection<T> nodes) {
this.hashFunction = hashFunction;
this.numberOfReplicas = numberOfReplicas;
for (T node : nodes) {
add(node);
}
}
/**
* 把一个实际节点映射到多个位置上,多个位置的都指向到一个相同的节点。
* @param node
*/
public void add(T node) {
for (int i = 0; i < numberOfReplicas; i++) {
circle.put(hashFunction.hash(node.toString() + i), node);
}
}
public void remove(T node) {
for (int i = 0; i < numberOfReplicas; i++) {
circle.remove(hashFunction.hash(node.toString() + i));
}
}
/**
* 根据一个对象的key获得它的将要存储的节点
* @param key
* @return
*/
public T get(Object key) {
if (circle.isEmpty()) {
return null;
}
int hash = hashFunction.hash(key);
if (!circle.containsKey(hash)) {
SortedMap<Integer, T> tailMap = circle.tailMap(hash);
hash = tailMap.isEmpty() ? circle.firstKey() : tailMap.firstKey();
}
return circle.get(hash);
}
}
分享到:
相关推荐
别人写的一个一致性hash的java实现,分享下
ConsistentHash 一致性hash算法的 java 和 C++ 实现
如果没有找到,则取整个环的第个节点。测试结果测试代码是整理的,主体法没有变分布平均性测试:测试随机成的众多key是否会平均分布到各个结点上测试结果如下:最上是参
1、解决案:排序+List 2、解决案:遍历+List 1、最好情况是只有个服务器节点的Hash值于带路由结点的Hash值,其 2、最坏情况是所有服务器节点的H
一致性Hash算法,易于扩容;添加了 单元测试,使用Spring提供的RestTemplate调用RestFul风格的API接口;整合了 quartz 定时任务框架 ,并进行了封装,只需在构建完定时任务Job类后,在 application-quartz....
将hash一致性算法使用java实现,原理参考注释。将代码拷贝到ide环境中即可
本文实例讲述了PHP实现的一致性Hash算法。分享给大家供大家参考,具体如下: 一致性哈希算法是分布式系统中常用的算法,为什么要用这个算法? 比如:一个分布式存储系统,要将数据存储到具体的节点(服务器)上, 在...
Hash一致性
C#一致性hash算法,性能绝对最优。结算结果和Java版本结果完全相同。
比如你有 N 个 cache 服务器(后面简称 cache ),那么如何将一个对象 object 映射到 N 个 cache 上呢,你很可能会采用类似下面的通用方法计算 object 的 hash 值,然后均匀的映射到到 N 个 cache ; hash(object)%N
随着虚拟节点的增加,数据量分配就比较平均了,但是并不是虚拟节点数量越多就越好,因为要考虑这些虚拟节点带来的性能开销以及算法的复杂性;
Java Kotlin实现的一致性哈希工具 简单示例 val a = HostPortPhysicalNode("A", "192.169.1.1", 8080) val b = HostPortPhysicalNode("B", "192.169.1.2", 8080) val c = HostPortPhysicalNode("C", "192.168.1.13",...
本篇文章对一致性hash算法(consistent hashing)的使用进行了详细的分析介绍。需要的朋友参考下
#fly-archflylib创立的各种常见的架构技术内容列表cassandra-demo cassandra数据库的入门编程consistent-hash Java implementation of consistent-hashing基于java的一致性hash的实现一致性hash(consistent-hashing)...
引入虚拟节点,可以有效地防止物理节点(机器)映射到哈希环中出现不均匀的情况。比如上图中的机器 A、B、C 都映射在环的右半边上。一般,虚拟节点会比物理节点多很多
常见算法及部分java实现。。。包括各种排序算法、红黑树、负载均衡算法、crc算法、摘要算法、对称非对称加密算法、一致性hash算法等等。。。
ConsistentHash一致性hash算法案例
smart eredis 是基于ketama算法和eredis项目的redis erlang驱动,主要以一致性hash的方式存储数据,做到key的分布式存储
JAVA相关技术实现,文件流操作,常用的设计模式,数据结构实现,算法应用和案例,JAVA8一些新特性新功能(Lambda用法,Steam API用法),一致性hash算法代码实现,ELK集成,Hadoop HDFS实现等
JAVA相关技术实现,文件流操作,常用的设计模式,数据结构实现,算法应用和案例,JAVA8一些新特性新功能(Lambda用法,Steam API用法),一致性hash算法代码实现,ELK集成,Hadoop HDFS实现等.zip