`
blackbeans
  • 浏览: 140715 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

带虚拟节点的一致性哈希

 
阅读更多

 

将物理节点hash和虚拟节点形成映射
    private void hash() {
        /**
        *  将物理节点散列成虚拟节点
        * */
        for (INode node : this.physicalNodes) {

            for (int i = 0; i < virtualCount / 4; i++) {

                byte[] hashCodeBytes = (node.getKey().toString() + i).getBytes();

                hashCodeBytes = Utils.md5Encode(hashCodeBytes);


                for (int j = 0; j < 4; j++) {

                    int virtualKey = (hashCodeBytes[3 + 4 * j] & 0xFF) << 24 | (hashCodeBytes[2 + 4 * j] & 0xFF) << 16 | (hashCodeBytes[1 + 4 * j] & 0xFF) << 8 |
                            (hashCodeBytes[4 * j] & 0xFF);

                    this.sortedHashNode.put(virtualKey, node);

                }

            }
        }

    }

给定Key查找数据的物理节点逻辑
   /**
     * 这里是用来给定一个key来通过虚拟节点定位到于物理节点的逻辑
     *
     * @param key
     * @return
     */
    public INode locate(Key key) {

        int virtualKey = key.key2VirtualKey();

        if (!this.sortedHashNode.containsKey(virtualKey)) {

            SortedMap<Integer, INode> sortedNodes = this.sortedHashNode.tailMap(virtualKey);


            if (sortedNodes.isEmpty()) {

                virtualKey = this.sortedHashNode.firstKey();
            } else {

                virtualKey = sortedNodes.firstKey();
            }

        }


        return this.sortedHashNode.get(virtualKey);
    }
 
 

 

分享到:
评论

相关推荐

    一致性哈希算法(ketama hashing)

    对已有的负载平衡的改进算法,通过一致性哈希算法,负载平衡更加的有效。

    一致性哈希与Chord1

    引入虚拟节点,可以有效地防止物理节点(机器)映射到哈希环中出现不均匀的情况。比如上图中的机器 A、B、C 都映射在环的右半边上。一般,虚拟节点会比物理节点多很多

    一致性哈希算法及其在分布式系统中的应用

    本文将会从实际应用场景出发,介绍一致性哈希算法(Consistent Hashing)及 其在分布式系统中的应用。首先本文会描述一个在日常开发中经常会遇到的问题 场景,借此介绍一致性哈希算法以及这个算法如何解决此问题;接...

    解决分布式数据插入数据库~一致性hash算法

    随着虚拟节点的增加,数据量分配就比较平均了,但是并不是虚拟节点数量越多就越好,因为要考虑这些虚拟节点带来的性能开销以及算法的复杂性;

    consistent-hash:一致的哈希追踪器项目符号

    环一致散列跳转一致哈希集合一致哈希磁悬浮一致性哈希 (第3.4节)粗略设计注意事项从与Karger等人成一直线的圆圈开始N个节点可以复制R次以改善分片分布。 复制的节点称为虚拟节点。 分片复制节点的散列在cicle上成...

    redis cluster

    2、一致性哈希: 此哈希算法存在同一个master内可能有太多的数据,可以用虚拟节点解决。 3、哈希slot算法: 此算法也是为了解决同一个master内有大量的数据。 二、节点之间的通信机制 1、基础通信原理 (1)redis ...

    论文研究-海量存储系统的数据分布策略研究.pdf

    该算法采用一致性哈希的存储思想,利用“二分”的映射方式映射物理存储节点,摒弃了Chord算法中每台节点对路由表维护的做法,实现[O(1)]时间内直接路由。该算法还采用了“微分逼近”的思想,实现数据的均匀分布性。...

    java8看不到源码-PAD-project:使用八卦、一致性哈希和向量时钟的弱一致性分布式文件系统

    该项目的目标是通过使用八卦、一致散列和矢量时钟来创建一个弱一致的分布式文件系统。 这是分布式使能平台课程的项目,可以在报告中找到。 找到展示 PAD-FS 项目的幻灯片。 单击此处查看开发可视化的完整视频 介绍 ...

    websocket-cluster:这是一个针对WebSocket集群服务器的Spring Cloud项目。

    原理我们利用一致性哈希算法,构造一个哈希环,网关监听WebSocket服务实例的上下线消息,根据实例的变化动态地更新哈希环。将需要迁移的WebSocket客户端重新连接到新的实例上,这样的代价是最小的;当然也取决与虚拟...

    一致性Hash算法1

    引入“虚拟节点”后,映射关系就从{对象-&gt;节点}转换到了{对象-&gt;虚拟节点}。查询物体所在 cache时的映射关系如图 7 所示。图 7 查询对象所在 cach

    一致性Hash(Consistent Hashing)原理剖析1

    响的虚拟节点包括c31,c22,c11(顺时针查找到第个节点),这3个虚拟节点分别对应机器c3,c2,c1。即新加的台机器,同时影响到原有的3台机器。理想情况下

    基于go语言开发的分布式文件系统源码+项目说明.tar

    * 引入一致性哈希存储的文件名到节点的映射,支持虚拟节点 * 引入布隆过滤器降低文件树访问压力 * 支持文件树序列化和反序列化,同步对布隆过滤器进行更新 # usage 1. 在 main 函数中启动 nameserver 2. 在 main ...

    Doss:去分布式对象存储

    根据标准的一致性哈希算法实现了hashRing,并加入数据服务器存储空间大小不同等权重来平衡各节点的虚拟多维数据集复制因子,对象读取请求均根据对象名进行哈希运算映射到虚拟多维数据集上,再由虚拟多维数据集映射到...

    Redis集群

    一致性hash算法:对2的32次方取模,将哈希值空间组织成虚拟的圆环 比如通过各个节点的主机编号进行hash,这样就能确定每台服务器在hash环上的位置 数据存储 将数据key使用相同的函数进行hash计算出hash值,如果一个...

    大数据系统基础(自主模式)-清华大学-王建民、徐葳、陈康等 视频.txt

    │ 3 一致性哈希与数据分区.mp4 │ 4 数据副本及一致性.mp4 │ 5 节点本地数据存储.mp4 │ └─7. 流计算 0 Video.mp4 1 Video.mp4 2 Video.mp4 3 Video.mp4 4 Video.mp4 5 Video.mp4 6 Video.mp4 7 Video....

    2019年 Redis从入门到高可用 分布式实战教程

    9-5 一致性哈希分区.mp4 9-4 节点取余分区.mp4 9-3 数据分布概论.mp4 9-2 呼唤集群.mp4 9-16 原生命令和redis-trib.rb对比.mp4 9-14 ruby环境准备-操作.mp4 9-13 ruby环境准备-说明.mp4 9-12 原生安装-4.分配...

    memcached权威指南

    6.6 一致性哈希+虚拟节点对缓存命中率的影响................................................................. 23 6.7 一致性哈希的 PHP 实现....................................................................

    网络安全工程师知识点及题目.doc

    完整性:保证数据的一致性,防止数据被非法用户窜改。 可用性:保证合法用户对信息资源的使用不会被不正当的拒绝。 不可抵赖性:做过后,必须承认,不能抵赖。 2. 公开密钥密码体制使用不同的加密密钥及解密密钥,...

Global site tag (gtag.js) - Google Analytics