先构造一个长度为232的整数环(这个环被称为一致性Hash环),根据节点名称的Hash值(其分布为[0, 232-1])将服务器节点放置在这个Hash环上,然后根据数据的Key值计算得到其Hash值(其分布也为[0, 232-1]),接着在Hash环上顺时针查找距离这个Key值的Hash值最近的服务器节点,完成Key到服务器的映射查找。 这种算法解...
8 import java.util.TreeMap; 9 10 public class HashMapLinkedHashMap 11 { 12 public static void main(String args[]) 13 { 14 System.out.println("***LinkedHashMap***"); 15 Map<String,String> linkedHashMap = new LinkedHashMap<String,String>(); 16 linkedHashMap.put("3", "apple"); ...
这就是一致性hash,一致性hash 算法都是将 value 映射到一个 32 位的 key 值,也即是 0~2^32-1 次方的数值空间;我们可以将这个空间想象成一个首( 0 )尾( 2^32-1 )相接的圆环,当有数据过来按顺时针找到离他最近的一个点,这个点,就是我要的节点机器。如下图: hash("192.168.128.670") --->A //...
/*** 假设我们一共初始化有8个节点(可以是ip, 就理解为ip吧);* 把 1024个虚拟节点跟 8个资源节点相对应*/public static Map<Integer, String> realNodeMap = new HashMap<>;public static int V_NODES = 1024; // 假设我们的环上有1024个虚拟节点static TreeMap<Integer, String> virtualNodeMap = new...
key hash值来选择具体调用那个provider publicclassConsistentHashRouterimplementsRouter{private TreeMapConsistentHash hash=newTreeMapConsistentHash();/** * values: List<String> servers = Lists.newArrayList("127.0.0.1","192.168.11.1" ...) * key: consumer的特定数值,比如根据userId ...