`
sw1982
  • 浏览: 511460 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Consistent Hashing 一致性hash

阅读更多

       copy一下一致性哈希的定义:首先求出memcached服务器(节点)的哈希值,并将其配置到0~232 的圆(continuum)上。然后用同样的方法求出存储数据的键的哈希值,并映射到圆上。然后从数据映射到的位置开始顺时针查找,将数据保存到找到的第一个服务器上。如果超过232 仍然找不到服务器,就会保存到第一台memcached服务器上。


其核心是取代传统取模求余的常规算法,改为大数域内的Hash,以及线形冲突的Hash处理 (为什么是2的32次方,这个问题我还没弄清楚。mark)。    一致性hash的概念讲的很多了,公司最近的Memcached改造正在引入这个东西,来提高分布式cache的容灾能力及移除传统分布式cache的瓶颈。

 

 

首先分析传统按模划分的利弊端:

按模取余算法非常简单,效率很高。比如后台有3台cache机, 只需要将数据key模3,根据其余数就可以知道应该写入到哪台机器,而且也很容易得知数据分布在哪台具体机器上。

 

但是按模取余存在两个方面的弊端:

1.虽然是分布式cache,但是众多cache存储机器必须有一个集中的前台管理机器,来完成取模算法与写入控制。这里称为前端机头 。因此这台前端机头就会成为一个比较大的瓶颈(特别是在java上,Java内存消耗超过2g会出一些莫名的异常,并且内存回收效率会有问题)。
 2.由于只有一台前端机头,因此一旦crash将会使得后面所有cache机器失效。如此又必须热备前端机头。

3.后续增减cache机器,将会牵涉到大量数据的迁移过程。 由于模3和模4导致的数据迁移将会相当大。瞬间可能超过负荷。

 

于是就诞生了一致性hash的应用:



 回归到数据结构中最简单的线性表冲突处理来做真正的HASH。


 

  • 大小: 19.6 KB
  • 大小: 40.2 KB
  • 大小: 46.1 KB
分享到:
评论

相关推荐

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

    一致性哈希(Consistent Hashing)是一种用于分布式系统的哈希算法,主要应用于分布式缓存、分布式数据库等场景,目的是在节点动态增减时保持哈希表的稳定性,从而最小化数据迁移的影响。它解决了传统哈希取模方法在...

    Ketama一致性Hash算法(含Java代码) 1

    一致性哈希算法(Consistent Hashing)是一种在分布式系统中平衡数据分布的策略,尤其适用于缓存服务如Memcached或Redis。它的核心思想是通过哈希函数将对象映射到一个固定大小的环形空间中,然后将服务器也映射到这个...

    一致性Hash简单实现

    一致性哈希(Consistent Hashing)是一种分布式哈希表(DHT)的算法,它主要应用于分布式缓存、负载均衡等场景,旨在解决在动态扩展或收缩系统规模时,尽量减少数据迁移的问题。在这个简单的实现中,我们将探讨如何...

    consistent-hash:一致性哈希工具类 Implementing Consistent Hashing in Kotlin

    一致性哈希 consistent-hash Implementing Consistent Hashing in Kotlin Java Kotlin实现的一致性哈希工具 简单示例 val a = HostPortPhysicalNode("A", "192.169.1.1", 8080) val b = HostPortPhysicalNode("B", ...

    一致性哈希算法 consistent hashing

    在分布式系统中,常常需要使用缓存,而且通常是集群,访问缓存和添加缓存都需要一个 hash 算法来寻找到合适的 Cache 节点。但,通常不是用取余hash,而是使用我们今天的主角—— 一致性 hash 算法。

    fly-arch:分布式架构consistent-hashing(一致性hash) http

    #fly-archflylib创立的各种常见的架构技术内容列表cassandra-demo cassandra数据库的入门编程consistent-hash Java implementation of consistent-hashing基于java的一致性hash的实现一致性hash(consistent-hashing)...

    Consistent-Hashing:Consistent Hashing 一致哈希

    一致性哈希(Consistent Hashing)是一种分布式哈希算法,主要应用于分布式缓存、负载均衡等领域,例如在Redis、Memcached等系统中广泛使用。它解决了传统哈希算法在节点动态增减时导致的大量数据迁移问题。在Java中...

    Jump-Consistent-Hashing-Evaluation:对一致性哈希的评估,尤其是 Google 的 Jump Consistent Hashing

    跳跃一致哈希计算 甚至服务器之间的数据分布也非常重要:另一个重要方面是能够... 关于一致性哈希,使用的算法是谷歌的论文“A Fast, Minimal Memory, Consistent Hash Algorithm”中提出的Jump Consistent Hashing。

    一致性Hash算法的原理及实现

    ### 一致性Hash算法的原理及实现 #### 一、引言 一致性Hash算法是一种用于解决分布式环境下数据存储和检索问题的重要技术。它最初由David Karger等人在1997年的论文《Consistent Hashing and Random Trees: ...

    一致性hashjava实现

    一致性哈希(Consistent Hashing)是一种分布式哈希算法,主要应用于分布式缓存、负载均衡等领域,以解决在分布式环境中动态添加或删除节点时,尽可能少地改变已有的哈希映射关系。在这个Java实现中,我们看到的是...

    ConsistentHash(Ketama)

    一致性哈希(Consistent Hashing)是一种分布式哈希(Distributed Hash Table,DHT)算法,主要用于解决在分布式系统中的数据存储和检索问题。在云计算、缓存系统(如Redis、Memcached)以及负载均衡等领域广泛应用...

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

    一致性哈希算法(Consistent Hashing)是一种常用于分布式系统中的数据分片策略,它有效地解决了数据在多台服务器间均匀分布的问题,同时减少了因节点加入或离开时的数据迁移成本。 首先,一致性哈希的基本原理是将...

    Go-Consistent-hashing:Go中的散列环实现

    一致性哈希(Consistent Hashing)是一种在分布式系统中解决数据分片问题的算法,它在Go语言中的实现对于构建可扩展且容错的服务至关重要。在Go开发中,尤其是在涉及分布式缓存、负载均衡等场景下,一致性哈希能够...

    ConsistentHash:一致性hash算法案例

    一致性哈希(Consistent Hashing)是一种分布式哈希表(DHT, Distributed Hash Table)的算法,主要用于解决在分布式系统中数据分片、负载均衡、缓存分发等问题。在云计算和大数据领域,一致性哈希算法有着广泛的应用,...

    一致性Hash算法1

    一致性哈希算法(Consistent Hashing)是一种特殊的哈希算法,设计目的是为了在分布式缓存系统中解决节点动态增减时导致的键值映射大量变更的问题。它最早在1997年的论文《Consistent hashing and random trees》中被...

    ConsistentHash:一致性hash算法的 java 和 C++ 实现

    一致性哈希(Consistent Hashing)是一种分布式哈希表(DHT, Distributed Hash Table)算法,主要用于解决在分布式系统中数据存储和检索的问题,尤其是在动态扩展集群节点时,能够尽可能地减少缓存重建,保持系统...

Global site tag (gtag.js) - Google Analytics