精华内容
下载资源
问答
  • 一致性hash

    2020-06-02 19:07:50
    一致性hash 1、应用场景 Redis的集群 Hadoop 分库分表 ElasticSearch 2、算法原理 对于所有节点求哈希值,在对所有的key求哈希值,每个key求得hash值顺时针的去找最近的节点 3、一致性到底是什么? 所谓的一致...

    一致性hash

    1、应用场景

    • Redis的集群
    • Hadoop
    • 分库分表
    • ElasticSearch

    2、算法原理

    对于所有节点求哈希值,在对所有的key求哈希值,每个key求得hash值顺时针的去找最近的节点

    3、一致性到底指的是什么?

    所谓的一致性,其实就是保证新接入的节点对于已有节点的影响是一致的(一样的)

    通过增加相同虚拟节点的数量来实现一致性

    展开全文
  • 在分布式环境中,客户端请求时可能不知道所有服务器存在,只知道一部分服务器存在,如果多个客户端都把部分服务器作为完整的hash环,可能导致相同请求被映射到不同服务器上,分散性是指以上情况发生严重...

    关于一致性hash算法有很都帖子了,自己找了几篇,都会介绍到一致性hash算法的几个特性

    • 单调性:增加新的节点,原有请求只会映射到原来的或者新的服务器上,不会映射到原来其他的服务器上
    • 分散性:
    • 平衡性:通过虚拟节点,来实现负载均衡

    什么是分散性

    在分布式环境中,客户端请求时可能不知道所有服务器的存在,只知道一部分服务器的存在,如果多个客户端都把部分服务器作为完整的hash环,可能导致相同的请求被映射到不同的服务器上,分散性是指以上情况发生的严重程度。

    为什么一致性hash可以降低分散性

    因为一致性hash的取模运算,是对 2^32-1 取模,不是对服务器的数量取模,所以一致性hash保证相同请求的映射地址都是一样的,和服务器的数量没关系。这样只要不同的客户端都能知道到存储该数据的服务器,都可以准确的找到该服务器,不用考虑客户端知道的服务器的数量。

    一致性hash只要不同的客户端都能知道存储该请求数据的服务器存在,就可以得到正确的服务器地址。而普通的hash算法在知道存储该请求数据的服务器存在的情况下,hash运算之后,得到的可能也不是这个服务器地址

    比如A客户端识别到编号为1,2,3的三台服务器,一致性hash地址分别是100,200,300。
    B客户端识别到编号为2,3,4三台服务器,一致性hash地址分别是200,300,400。
    A,B请求的数据做一致性hash运算都是160,做对服务器数量的hash运算都是2。
    这么来看,A和B的请求采用一致性hash,定位到的服务器都是编号为2的服务器。
    如果采用对服务器数量进行hash计算,定位到的服务器分别是2和3,造成不一致。

    展开全文
  • 分布式一致性hash算法

    2021-06-08 07:14:05
    写在前面  在学习Redis集群内容时,看到这么一句话:Redis并没有使用一致性hash算法,而是引入哈希槽概念。而分布式缓存Memcached则使用分布式一致性hash算法来实现分布式存储。所以就专门学习了一下 什么是...

    写在前面
      在学习Redis的集群内容时,看到这么一句话:Redis并没有使用一致性hash算法,而是引入哈希槽的概念。而分布式缓存Memcached则是使用分布式一致性hash算法来实现分布式存储。所以就专门学习了一下

    什么是分布式?什么是一致性?什么是哈希?
      1)分布式(distributed)是指在多台不同的服务器中部署不同的服务模块,通过远程调用协同工作,对外提供服务。“分布式一致性hash算法”中的“分布式”就是指缓存数据的分布性。

      集中式将一个系统的所有服务模块部署到了不同的服务器上,构成一个集群,通过负载均衡设备对外提供服务。集中式部署就像茶水间同时有多个饮水机提供服务,服务冗余部署。分布式部署则将系统拆分成不同的服务模块,然后将不同的服务模块部署在不同的服务器上。

      2)一致性Wiki的定义:

      Consistent hashing is a special kind of hashing such that when a hash table is resized, only K/n keys need to be remapped on average, where K is the number of keys, and n is the number of slots. In contrast, in most traditional hash tables, a change in the number of array slots causes nearly all keys to be remapped because the mapping between the keys and the slots is defined by a modular operation.

      大概意思就是“一致性哈希是一种特殊的哈希算法,提供了这样的一个哈希表,当重新调整大小的时候,平均只有部分(k/n)key需要重新映射哈希槽,而不像传统哈希表那样几乎所有key需要需要重新映射哈希槽”。一致性hash能保证在分布式环境中,对key进行哈希的结果或者说key与节点之间的映射关系不会受节点的增加和删除而产生重大的变化。

      3)hash,俗称“哈希”,也叫散列,是一种将任意长度的消息(数据)压缩到某一固定长度的消息摘要(数据)的算法。常见的hash算法有MD5,SHA等。hash算法具有几个重要的特性:不可逆性(即从hash值反推出原消息是不可能的)、抗冲突性(即给定消息M1,不存在另一个消息M2,使得Hash(M1)=Hash(M2))和分布均匀性(即hash的结果是均匀分布的)。Memcached中,存取数据时都要进行哈希映射。正是这几个特性,保证了memcached缓存中key值得唯一性。

    分布式一致性hash算法使用背景
      我们已经知道,memcached的分布式主要在于客户端的分布式算法。memcached客户端就像一个网络中的路由,经过特定的算法将数据分散的存在到memcached服务端的机器上,又从分散的memcached服务端的机器上提取数据。实际中,常见的存储和提取数据的算法有取模算法和本文分析的一致性hash算法。

      取模算法算法的原理是:

    hash(key)%N
    1
      其中key 代表数据的键,N 代表memcached服务器的数量。取模的结果就是memcached客户端要定位的memcached服务器。取模算法很明显,结果受N的影响,当服务器数量N增加或者减少的时候,原先的缓存数据定位几乎失效,缓存数据定位失效意味着要到数据库重新查询,这对于高并发的系统来说是致命的。于是,人们提出了一致性hash算法,最终目的是实现在移除、添加一个memcached服务器时对已经存在的缓存数据的定位影响尽可能的降到最小。

    环形hash空间
      通常,一个缓存数据的key经过hash后会得到一个32位的值,也就是0~2^32 - 1数值范围。我们可以把这个数值范围抽象成一个首尾相连环形的空间,我们称这个空间为环形hash空间。如下图所示:

    映射key、server节点到环形hash空间
      有了环形hash空间之后,缓存数据的key经过hash后得到的值就映射到了环形hash空间。假设有key1、key2、key3、key4,经过hash后,映射到环形hash空间如下图所示。同理,我们可以把memcached服务器抽象成网络上的节点经过hash后映射到环形hash空间。假设有server1(可以是服务器的某些唯一标志信息,如ip等)、server2、server3

    映射key到server节点
      现在缓存key和server节点都经过一致性hash算法映射到了环形hash空间,现在就可以将缓存key和server节点的关系进行映射了。顺时针沿着环形hash空间,从某个缓存key开始,直到遇到一个server节点,那么该缓存key就存储到这个server节点上。如图:

      了解了key、server节点、hash空间之间的映射关系之后,已经清楚了缓存数据是怎样分布的存储到memcached服务器了。查找缓存数据的时候,也采用同样的映射方法来定位。

    删除server节点
      当在server集群中删除server2节点时,受影响的也仅是server1~server2之间的缓存数据Key3,这部分数据需要重新到数据库查找再次映射到server3节点上。如下图所示:

    添加server节点
      现在我们已经知道memcached存储和访问数据的策略了。那么当在server集群中增加一个server节点时,对数据访问的命中率又有什么影响呢。如下图,在server1和server2节点之间增加一个节点server4

      从上图可以看出,增加server4节点后,原有的缓存数据分布中,仅有server1和server4节点之间的数据进行了重新分布,这部分数据需要重新到数据库查找再次映射到新添加的server4节点上。尽管不能命中的缓存数据仍然存在,但相对于取模算法,已经是最大限度地抑制了hash键的重新分布。

    虚拟节点的引入
      我们已经知道,添加和删除节点都会影响缓存数据的分布。尽管hash算法具有分布均匀的特性,但是当集群中server数量很少时,他们可能在环中的分布并不是特别均匀,进而导致缓存数据不能均匀分布到所有的server上。

      为解决这个问题,需要使用虚拟节点的思想:为每个物理节点(server)在环上分配100~200个点,这样环上的节点较多,就能抑制分布不均匀。当为cache定位目标server时,如果定位到虚拟节点上,就表示cache真正的存储位置是在该虚拟节点代表的实际物理server上。另外,如果每个实际server节点的负载能力不同,可以赋予不同的权重,根据权重分配不同数量的虚拟节点。

      虚拟节点的hash计算可以采用对应节点的 IP 地址加数字后缀的方式。例如假设 serverA 的 IP 地址为 127.0.0.1 。

      引入虚拟节点前,计算serverA 的 hash 值:

    hash(“127.0.0.1”);
    1
      引入虚拟节点后,计算虚拟节点serverA1 和 serverA2 的 hash 值:

    hash(“127.0.0.1#1”);
    hash(“127.0.0.1#2”);
    1
    2
    一致性hash算法与取模算法的比较
      取模算法的方法简单,数据的分散性也可以,但其主要缺点是当添加或移除server节点时,缓存重新映射的代价相当巨大。添加或移除server节点时,余数就会产生巨变,这样就无法定位与存储时相同的server节点,从而影响缓存的命中率。

      而一致性hash算法则最大限度的减少了server节点变化带来的影响,当节点变化时,只影响一个server节点的部分数据,且hash算法能够保证需要重新分布的缓存数据能映射到新的server节点中。
    ---------------------
    原文:https://blog.csdn.net/u011489043/article/details/78944985

    展开全文
  • 这里的一致性指该算法可以保持memcached和数据库中的数据的一致性。 2 什么是一致性hash算法 2.1 为什么需要一致性hash算法 现在有大量的key value的数据需要分散的存储到不同的机器上的memcached中,如何...

    1 一致性hash算法的一致性

    这里的一致性指的是该算法可以保持memcached和数据库中的数据的一致性。

    2 什么是一致性hash算法

    2.1 为什么需要一致性hash算法

    现在有大量的key value的数据需要分散的存储到不同的机器上的memcached中,如何根据key来分派机器。

    简单的方法直接对机器数目取模,比如有3台机器,首先对key求hash,假如hash分别是1,2,3,4,5,6,7,8,那么

    3,6    分派到第一台机器

    1,4,7分派到第二台机器

    2,5,8分派到第三台机器

    但是,假如加了一台机器,4台机器,那么就要对4取模了,

    4,8分派到第一台机器

    1,5分派到第二台机器

    2,6分派到第三台机器

    3,7分派到第四台机器

    这样,3本来是第三台机器,现在分到了第4台机器,那么原来的数据就失效了,第四台机器的数据需要去数据库中重新取。4、5、6、7、8同理。

    这样导致的问题就是原来的memcached缓存的数据大量失效,需要重新获取,成本很高。

    2.2 一致性hash算法怎么做

    对机器根据ip也计算hash值,比如机器1是3,机器2是5,机器3是9。

    现在分派策略变成了,如果key的hash值大于9,就分派给机器1,如果大于3就分派给机器2,如果大于5就分派给机器3。

    如果新加一台机器4,hash值是8,那么如果key大于5分派给机器4,大于8给机器3,其它的都不变。

    这样只是机器3上的memcached需要更新部分数据,其它原来的机器上的memcached和数据库中保持一致。

    2 memcached

    它是一个分布式的缓存,它通过客户端实现了分布式缓存,根据key将数据缓存到不同的机器上。

    客户端可以使用xmemcached、spymemcached等

    boolean set(final String key, final int exp, final Object value);

    可见,任何对象都可以存放在memcached中。

     

    转载于:https://www.cnblogs.com/hustdc/p/8909802.html

    展开全文
  • 当你看到“分布式一致性hash算法”这个词时,第一时间可能会问,什么是分布式,什么是一致性,hash又是什么。在分析分布式一致性hash算法原理之前,我们先来了解一下这几个概念。 分布式 分布式(distributed)...
  • 说一下我今天学习心得。 首先关于分布式和集群区别。什么是分布式呢:分布式就是将一个系统拆分成多个子系统,比如我们网购系统,假设我们下订单,它可以拆分成一个订单系统...第二个知识点关于一致性hash算法
  • 当你看到“分布式一致性hash算法”这个词时,第一时间可能会问,什么是分布式,什么是一致性,hash又是什么。在分析分布式一致性hash算法原理之前,我们先来了解一下这几个概念。 分布式 分布式(distributed)...
  • 1 如果两个对象相同,那么它们hashCode值一定要相同。...2 如果两个对象hashCode相同,它们并不一定相同,这里对象相同指的是用eqauls方法比较。 Object类中hashCode()方法声明如下: Object类中hashCod...
  • 当你看到“分布式一致性hash算法”这个词时,第一时间可能会问,什么是分布式,什么是一致性,hash又是什么。在分析分布式一致性hash算法原理之前,我们先来了解一下这几个概念。 分布式 分布式(distributed)是指...
  • 列举一个常用Redis客户端并发模型。...分布式缓存,一致性hashLRU算法,slab分配,如何减少内存碎片如何解决缓存单机热点问题什么是布隆过滤器,其实现原理? False positive指的是?memcache与redis区别zookee
  • 简单说说一致性hash 关于hash 首先,什么是hash以及为什么要用hash?简单带过: hash本身就是将目标对象或者数据片段映射到另外一个数据片段中.在编程环境下,通常意味着将一个数据或数值数据或字符串数据等等,...
  • 一致性哈希

    2017-08-23 10:39:49
    参考: 漫画:什么一致性哈希?...平衡性(Balance):平衡性是指哈希结果能够尽可能分布到所有缓冲中去,这样可以使得所有缓冲空间都得到利用。很多哈希算法都能够满足这一条件。 单调性(Monotonicity
  • [转载] 一致性哈希

    2015-07-05 14:15:00
    学习分布式, 一致性哈希是最最基础的知识, 所以要理解好. 那什么一致性哈希呢?(what) 百度百科上的解释很专业术语. 要一句话定义貌似也有难度:一致性哈希算法是在哈希...1.平衡性是指 hash的结果应该平均分配...
  • 哈希和一致性哈希

    2020-11-17 17:37:05
    Hash,一般翻译做散列、杂凑,或音译为哈希,是指把任意长度输入(又叫做预映射pre-image)通过哈希算法变换成固定长度输出过程,该输出就是哈希值。 哈希算法(哈希函数) 哈希算法指是能把任意长度输入...
  • 什么是缓存雪崩?

    2021-04-01 22:22:52
    什么是缓存雪崩? 缓存雪崩是指缓存中数据大批量到过期时间而查询数据量巨大,引起数据库压力过大甚至down机,和缓存击穿...如何保证缓存与数据库双写时数据一致性? 更新数据库时候刷新缓存(清空) @为什么是删
  •  多态性是指允许不同类对象对同一消息作出响应。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享优势,很好解决了应用程序函数同名问题。 5、String是最基本数据类型...
  • SpringCloud之Ribbon实战

    2021-03-01 11:24:51
    一.简介 1.什么是负载均衡 负载均衡是指将工作任务进行平衡、分摊到多个操作单元上进行运行,从而协同完成工作任务。 2.负载均衡分类 2.1 服务端负载均衡 ...轮询、加权、一致性hash等 3. Ribbon简介
  • 手写负载均衡算法

    2020-08-07 15:02:03
    一致性哈希(Consistent Hash)四、总结 一、什么是负载均衡? 负载均衡是指,通过一定算法使请求可以均匀宠幸服务提供方,做到雨露均沾。市面上,软件硬件产品一大把,解决最最核心问题都是选谁。 二、...
  • 从线程模型角度看 Netty 为什么是高性能? 为自己搭建一个分布式 IM(即时通讯) 系统 附加技能 TCP/IP 协议 一个学渣阿里之路 如何成为一位「不那么差」程序员 如何高效使用 Git 联系作者 ...
  • 从线程模型角度看 Netty 为什么是高性能? 为自己搭建一个分布式 IM(即时通讯) 系统 附加技能 TCP/IP 协议 一个学渣阿里之路 如何成为一位「不那么差」程序员 如何高效使用 Git 联系作者 ...
  • XA 的一致性如何保证? 分布式会话 集群部署时的分布式 Session 如何实现? 高可用架构 Hystrix 介绍 电商网站详情页系统架构 Hystrix 线程池技术实现资源隔离 Hystrix 信号量机制实现资源隔离 Hystrix 隔离...
  • 2.3.7 IEEE802.3u标准是指? 2.3.8 如果要将两计算机通过双绞线直接连接,正确线序是? 2.3.9 在V.35和V.24规程中,控制信号RTS表示? 2.4.0 路由器作为网络互连设备,必须具备以下哪些特点? 2.4.1 路由器...
  • </li><li>chunkhash 根据模块计算出来 hash 值,所以某个文件改动只会影响它本身 hash 值,不会影响其他文件。</li></ul> 所以如果你只是单纯地将所有内容打包成同一个文件,那么 hash 就...
  • java 面试题 总结

    2009-09-16 08:45:34
    多态性是指允许不同类对象对同一消息作出响应。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享优势,很好解决了应用程序函数同名问题。 2、String是最基本数据类型吗? ...

空空如也

空空如也

1 2 3
收藏数 44
精华内容 17
关键字:

一致性hash的一致性是指什么