一致性hash的理解

参考:

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。

但是在分布式系统的场景中,随时可能添加新的服务器,或者有服务器宕机,这时就会出现映射故障。

一致性hash算法就是基于这种考虑产生的,它将映射的值形成环状,每次的数据是就近查找,如下:

但该方式下仍然会存在不均衡的问题,因此一致性hash算法还引入了虚拟节点的概念,如下:

时间: 2024-11-07 02:27:27

一致性hash的理解的相关文章

分布式缓存一致性hash算法理解

今天阅读了一下大型网络技术架构这本苏中的分布式缓存一致性hash算法这一节,针对大型分布式系统来说,缓存在该系统中必不可少,分布式集群环境中,会出现添加缓存节点的需求,这样需要保障缓存服务器中对缓存的命中率,就有很大的要求了: 采用普通方法,将key值进行取hash后对分布式缓存机器数目进行取余,以集群3台分布式缓存为例子: 对于数据进行取hash值然后对3其进行取余,余数为0则进入node 0,余数位1则进入node1,余数位2则进入node2. 如果增加一个节点则对4进行取余,则会将node

【数据结构与算法】一致性Hash算法及Java实践

追求极致才能突破极限 一.案例背景 1.1 系统简介 首先看一下系统架构,方便解释: 页面给用户展示的功能就是,可以查看任何一台机器的某些属性(以下简称系统信息). 消息流程是,页面发起请求查看指定机器的系统信息到后台,后台可以查询到有哪些server在提供服务,根据负载均衡算法(简单的轮询)指定由哪个server进行查询,并将消息发送到Kafka,然后所有的server消费Kafka的信息,当发现消费的信息要求自己进行查询时,就连接指定的machine进行查询,并将结果返回回去. Server

一致性Hash算法的理解

最近在使用集团内部的TimeTunnel时,想到了中间件的订阅调度策略,可能用到一致性Hash技术,所以查阅了网上其相关的博客与资料,顺便说说自己的一些粗浅理解. 1. 应用场景     如果从十几年前的文章标题”Consistent Hashing and Random Trees“中,可以看出一致性Hash算法的最初提出,是为了解决Web服务页面访问的Cache热点问题而引入的.其实一致性Hash算法已经广泛地应用在现在的web服务中,例如: a. 外层CDN架构里的Nginx代理服务: 全

对一致性hash原理的理解

一致性hash算法解决的核心问题是,当solt数发生变化的时候能够尽量少的移动数据.该算法最早在<Consistent Hashing and Random Trees:Distributed Caching Protocols for Relieving Hot Spots on the World Wide Web>一文中被提出.它能够在添加/移除一台缓存服务器的时候,尽可能小的改变已存在key的映射关系,避免大量key的重新映射. 原理 一致性hash算法将Hash函数的值域空间组织成一

关于一致性hash,这可能是全网最形象生动最容易理解的文档,想做架构师的你来了解一下

问题提出 一致性hash是什么?假设有4台缓存服务器N0,N1,N2,N3,现在需要存储数据OBJECT1,OBJECT2,OBJECT3,OBJECT4,OBJECT5,OBJECT5,OBJECT7,OBJECT8, 我们需要将这些数据缓存到这4台服务器上,相应的问题是 如何设计数据存放策略?即ObjectX 应该存放在哪台服务器上? 为了解决这个问题,我们有如下几个思路. 1. 余数hash方案 采用hash(Objectx)%4来确定服务器节点 假设 hash(OBJECT1)=2,由

分布式memcached学习(四)&mdash;&mdash; 一致性hash算法原理

    分布式一致性hash算法简介 当你看到"分布式一致性hash算法"这个词时,第一时间可能会问,什么是分布式,什么是一致性,hash又是什么.在分析分布式一致性hash算法原理之前,我们先来了解一下这几个概念. 分布式 分布式(distributed)是指在多台不同的服务器中部署不同的服务模块,通过远程调用协同工作,对外提供服务. 以一个航班订票系统为例,这个航班订票系统有航班预定.网上值机.旅客信息管理.订单管理.运价计算等服务模块.现在要以集中式(集群,cluster)和分布

分布式算法(一致性Hash算法)

一.分布式算法 在做服务器负载均衡时候可供选择的负载均衡的算法有很多,包括: 轮循算法(Round Robin).哈希算法(HASH).最少连接算法(Least Connection).响应速度算法(Response Time).加权法(Weighted )等.其中哈希算法是最为常用的算法. 典型的应用场景是: 有N台服务器提供缓存服务,需要对服务器进行负载均衡,将请求平均分发到每台服务器上,每台机器负责1/N的服务. 常用的算法是对hash结果取余数 (hash() mod N ):对机器编号

对一致性Hash算法,Java代码实现的深入研究

一致性Hash算法 关于一致性Hash算法,在我之前的博文中已经有多次提到了,MemCache超详细解读一文中"一致性Hash算法"部分,对于为什么要使用一致性Hash算法和一致性Hash算法的算法原理做了详细的解读. 算法的具体原理这里再次贴上: 先构造一个长度为232的整数环(这个环被称为一致性Hash环),根据节点名称的Hash值(其分布为[0, 232-1])将服务器节点放置在这个Hash环上,然后根据数据的Key值计算得到其Hash值(其分布也为[0, 232-1]),接着在

一致性hash与CRUSH算法总结

相同之处:都解决了数据缓存系统中数据如何存储与路由. 不同之处:区别在于虚拟节点和物理节点的映射办法不同 由于一般的哈希函数返回一个int(32bit)型的hashCode.因此,可以将该哈希函数能够返回的hashCode表示成一个范围为0---(2^32)-1 环 数据和节点使用相同的hash函数来保证 把数据和节点映射到相同的hash空间上.这样,按照顺时针方向,数据存放在它所在的顺时针方向上的那个机器上.这就是一致性哈希算法分配数据的方式! 物理节点:  使用ip或者唯一机器标识为key