一致性hash理解 白话概述: 比如说存储图片,有10台服务器用来存储,对图片名进行hash(pic_name)%10得到的值就是图片存放的服务器序号.这是正常的hash算法分散图片存储.但是有一天,你觉得服务器不够了,需要加几台机器扩容存储.这时候,假设加了10台,变成20台,那么原先譬如11%10=1现在11%20=11,则存取图片会跑到11号服务器,如果仍旧用原来的算法,那所有图片几乎都要重新移动位置,这明显非常消耗性能. 一致性hash就是为了解决这一问题,它建立了hash环的概念,2^…
在做memcached分布式集群时往往要用到一致性hash算法来调节缓存数据的分布. 通常的hash算法是以服务器数量N作为模数,使用key%N的值来获得最终位置,显然当服务器数量发生变化即N发生变化是,所有的结果都会改变,导致缓存数据大面积失效,从而导致服务崩溃. 一致性hash的核心是模数采用不变的2**32次方作为模数,这样不管服务器的数量是否变化,服务器的hash值和数据的hash值都不会发生改变,但hash结果分布在0-2**32-1这个范围,那怎么才能对应呢? 一致性hash采用向后…
经历过技术面试的小伙伴想必对这个两个概念已经再熟悉不过了! 我当年参加面试的时候,不夸张地说,只要问到分布式相关的内容,面试官几乎是必定会问这两个分布式相关的理论. 并且,这两个理论也可以说是小伙伴们学习分布式相关内容的基础了! 因此,小伙伴们非常非常有必要将这理论搞懂,并且能够用自己的理解给别人讲出来. 这篇文章我会站在自己的角度对这两个概念进行解读! CAP理论 CAP 理论/定理起源于 2000年,由加州大学伯克利分校的Eric Brewer教授在分布式计算原理研讨会(PODC)上提出,因…
大约在五六年前,第一次接触到了当时已经是hot topic的NoSql.不过那个时候学的用的都是mysql,Nosql对于我而言还是新事物,并没有真正使用,只是不明觉厉.但是印象深刻的是这么一张图片(后来google到图片来自这里):     这张图片是讲数据库(包括传统的关系型数据库和NOSQL)与CAP理论的关系.由于并NoSql并没有实践经验,也没有去深入了解,对于CAP理论更是一知半解.因此,为什么某一款数据库被划分到哪一个阵营,并不清楚.     工作之后对MongoDB使用得比较多,…
[梁山好汉说IT] 如何理解一致性Hash 0x00 摘要 用梁山酒店分配客人为例来理解一致性Hash. 0x01. 与经典哈希方法的对比 经典哈希方法:总是假设内存位置的数量是已知且固定不变的.因为hash映射依赖节点/内存位置,所以如果需要变化集群,需要重新计算每一个key的哈希值.哈希表(服务器数量)大小的变更实际上干扰了所有映射. 一致性哈希:某种虚拟环结构.位置数量不再固定,环有无限数量的点,服务器节点可以放置在环上的随机位置.哈希表(服务器数量)大小改变会导致 只有一部分请求(相对于…
参考: http://www.blogjava.net/hello-yun/archive/2012/10/10/389289.html http://blog.csdn.net/cywosp/article/details/23397179 传统的hash算法在存储集群中很常用,比如数据库的sharding,我们就可以通过hash值映射到不同的服务器,架设有N台服务器,那么就是Key%N. 但是在分布式系统的场景中,随时可能添加新的服务器,或者有服务器宕机,这时就会出现映射故障. 一致性has…
今天阅读了一下大型网络技术架构这本苏中的分布式缓存一致性hash算法这一节,针对大型分布式系统来说,缓存在该系统中必不可少,分布式集群环境中,会出现添加缓存节点的需求,这样需要保障缓存服务器中对缓存的命中率,就有很大的要求了: 采用普通方法,将key值进行取hash后对分布式缓存机器数目进行取余,以集群3台分布式缓存为例子: 对于数据进行取hash值然后对3其进行取余,余数为0则进入node 0,余数位1则进入node1,余数位2则进入node2. 如果增加一个节点则对4进行取余,则会将node…
一般算法: 对对象先hash然后对redis数量取模,如果结果是0就存在0的节点上. 1.2同上,假设有0-3四个redis节点.20个数据: 进行取模后分布如下: 现在因为压力过大需要扩容,增加一台redis4.第五个节点: 现在只有4个节点还能够命中.命中率是:4/20 = 20%,命中率极其低下.(redis肯定是不会这样用的) 二.redis使用的consistent hashing(一致性hash算法) 1.环形hash空间: 把对象映射到0-2的32次幂减1的空间里. 现在假设有4个…
   一致性哈希算法在1997年由麻省理工学院提出的一种分布式哈希(DHT)实现算法,设计目标是为了解决因特网中的热点(Hot spot)问题,初衷和CARP十分类似.一致性哈希修正了CARP使用的简 单哈希算法带来的问题,使得分布式哈希(DHT)可以在P2P环境中真正得到应用.        一致性hash算法提出了在动态变化的Cache环境中,判定哈希算法好坏的四个定义:   1.平衡性(Balance):平衡性是指哈希的结果能够尽可能分布到所有的缓冲中去,这样可以使得所有的缓冲空间都得到利…
一致性hash算法解决的核心问题是,当solt数发生变化的时候能够尽量少的移动数据.该算法最早在<Consistent Hashing and Random Trees:Distributed Caching Protocols for Relieving Hot Spots on the World Wide Web>一文中被提出.它能够在添加/移除一台缓存服务器的时候,尽可能小的改变已存在key的映射关系,避免大量key的重新映射. 原理 一致性hash算法将Hash函数的值域空间组织成一…