zl程序教程

您现在的位置是:首页 >  后端

当前栏目

常见的一致性哈希算法#Java实现#

2023-09-14 09:04:40 时间
    之前参与过缓存框架的封装与测试工作,并对一致性哈希算法进行了相关的调研。通过对spymemcached与jedis等客户端源码的阅读对一致性哈希算法的Java实现进行调研: 1. 使用TreeMap实现,TreeMap本身继承NavigatableMap,因此具备节点导航的特点

    之前参与过缓存框架的封装与测试工作,并对一致性哈希算法进行了相关的调研。通过对spymemcached与jedis等客户端源码的阅读对一致性哈希算法的Java实现进行调研:

1. 使用TreeMap实现,TreeMap本身继承NavigatableMap,因此具备节点导航的特点

2. 通过在内存中构建虚拟节点,每个物理节点存在160(默认值,可设置)个虚拟节点映射


1. 如何处理节点故障问题

源码分析:通过hash算法获取到的节点属于问题节点便进行N次的rehash操作,若执行N次的rehash操作依然没有定位到可用节点即报错。我在测试时发现,rehash经历N次后可能依然会定位到同一个故障节点,原因是我实际的物理节点数只有两台,所以每台物理节点存在50%的概率被命中。因此我建议物理节点数尽可能的多,分担哈希环区间,减少故障节点多次被命中的情况。


2. Set操作没有涉及到冗余存储

若node-1存储成功,可以在node-2, node-3上进行冗余存储并设置TTL。若遇到node-1节点故障,failover至node-2, node-3节点,尽量保证缓存命中;多节点冗余存储涉及到一致性的问题稍微复杂,因此引入TTL尽量缓解一致性的问题。


。。。未完待续。。。

JAVA面试——JVM(二)垃圾回收与算法 JVM 是可运行 Java 代码的假想计算机 ,包括一套字节码指令集、一组寄存器、一个栈、一个垃圾回收,堆 和 一个存储方法域。JVM 是运行在操作系统之上的,它与硬件没有直接的交互