返回顶部
首页 > 资讯 > 前端开发 > html >如何理解一致性哈希
  • 485
分享到

如何理解一致性哈希

2024-04-02 19:04:59 485人浏览 泡泡鱼
摘要

这篇文章主要讲解了“如何理解一致性哈希”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何理解一致性哈希”吧!一技能:哈希算法分组韩信的一技能哈希算法:将士兵

这篇文章主要讲解了“如何理解一致性哈希”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何理解一致性哈希”吧!

一技能:哈希算法

分组

韩信的一技能哈希算法:将士兵的编号 num 值当做一个哈希值,再和总做小组数 N 做取余操作,得出的结果在 0 到 N - 1  之间,这个士兵就属于那个组。

如下图所示,每来一个士兵都有一个六位的 hash 值(也可以称作编号),然后被韩信用除以 3 取余数的方式分配到三个组。比如第一组中的编号为 123456  的士兵,除以 3 之后,整除,余数为 0,所以分配到第一组。

如何理解一致性哈希


哈希算法

查找士兵

现在已经分好组了,假如想找到编号为 666666 的士兵该怎么找?首先将 666666 除以 3,得到余数  0,说明在第一个组,然后去第一个组里面找就可以了。

这里有小伙伴可能会问,为什么不是把所有士兵放到一个组?

因为一个组太大了,影响行军速度。映射到互联网架构中,就是通过增加节点从而减小单节点的负载压力。

哈希分组弊端

刘邦看了这个一技能后,大呼:

韩将军真是厉害。

哈希算法看起来很完美,那我再给你五百士兵,需要分成四个组怎么办?

这时,韩信的副将说话了:

这还不简单,再用 4 取余不就好了吗?

刘邦摸着下巴思索片刻后,对副将说:

这个方案可行,但很多士兵都被重新分组了,刚刚建立的团队友情就被分解了。

我们来看下刘邦为什么觉得方案不可行。

比如原来分配到一组的编号为 3 的士兵,当分成四组的时候,通过公式计算:3%4=3,所以会分配到到第四组。

依次类推,会发现很多士兵进行了重新分配,只有小部分不会变换分组,比如 1,2,12 不会被重新分组。

韩信对着刘邦点点头,对着主公说道:

主公,您说得没错,这就是我的一技能的弱点所在。

不过我还有一个技能:一致性哈希。

二技能:一致性哈希哈希环

一致性哈希算法也用了取模运算,但是它与哈希算法不同的地方:

  • 哈希算法:对节点的数量进行取模运算。

  • 一致性哈希算法:对 2^32 进行取模运算。

可以想象一下,一致性哈希算法,是将整个哈希值空间组成了一个虚拟的圆环,也就是哈希环。

如下图,把 3 个组映射到固定大小为 2^32  的哈希环中。三个组一共将整个环分成了三个区域,C-A(第一组)、A-B(第二组)、B-C(第三组)。如下图所示:

如何理解一致性哈希


分成三组

  • 第一组负责存储落在 C-A 区间内的数据。

  • 第二组负责存储落在 A-B 区间内的数据。

  • 第三组负责存储落在 B-C 区间内的数据。

士兵分配

假定编号为 9527 的士兵,进行哈希运算后,落到 C-A 区域。如下图所示:

如何理解一致性哈希

士兵所站位置

第二步,让这个士兵顺时针往前走,遇到的第一个节点 A 就是他所在的组了。如下图所示:

如何理解一致性哈希

顺时针遇到第一个节点

增加分组

目前三个节点的时候,假定编号为 89757 的士兵经过哈希运算后,分配到了 B-C 区域(第三组),也就是属于 C 节点管控。如下图所示:

如何理解一致性哈希

属于 C 节点

回到刘邦刚问的问题,如果分组变成四组,该怎么进行士兵分配。

如下图所示,增加一个节点 D,原来的区域 B-C 变成了区域 B-D(第三组) 和 D-C(第四组)。

如何理解一致性哈希


增加 D 节点

那么这名士兵属于哪个节点管控呢?如下图所示,士兵顺时针往前走,先走到了 D 节点,所以属于 D  节点管控。虽然还是属于第三组,但是这名士兵的领导者已经变了:由 C 变成了 D。

如何理解一致性哈希


领导者变了

从上面的变化来看,只有 B-C 区域中的部分数据会进行迁移:B-D 之间的数据会由 C 节点迁移到 D 节点。

而其他数据不受影响,也不用进行迁移。而且节点越多,需要迁移的数据就越少。这就是多多益善了~

刘邦看了后,大赞韩信:

不亏是大将军,萧何当时月下追你,值了!

哈希环缺陷

萧何看了韩信画的哈希环后,觉得有些不对劲,思索片刻后,对韩信说:

将军,你这个哈希环上的节点分布不太均匀啊,你看第三组和第四组的的区域好小啊。

萧何说得没错,确实存在这个问题,放到互联网架构中,就存在如下问题:

节点分布不均匀,导致业务对节点的访问冷热不均。

韩信眼中充满着赞赏,知我者莫若萧何。然后胸有成竹地说道:

你说得没错,不过我还有一个技能,虚拟节点映射。

三技能:虚拟节点

一般虚拟节点比物理节点要多,并相对均匀地分布在哈希环上。如下图所示,12 个虚拟节点  N1~N12,相对均匀地分布在虚拟节点上。如果有士兵属于 N2/N3/N4 中的某一个,都会重新映射到 A 节点,依次类推,N5/N6/N7 属于 B  节点的虚拟节点映射。

如何理解一致性哈希


虚拟节点

我们来看下萧何的提出的问题,真实的 B-D 区域比较小,用虚拟节点后,N5/N6/N7 属于 B 节点,N8/N9/N10 属于 D  节点,他们分到的虚拟节点一样多,而且区域大致相等。所以士兵的分配也比较均匀。

感谢各位的阅读,以上就是“如何理解一致性哈希”的内容了,经过本文的学习后,相信大家对如何理解一致性哈希这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: 如何理解一致性哈希

本文链接: https://lsjlt.com/news/83825.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 如何理解一致性哈希
    这篇文章主要讲解了“如何理解一致性哈希”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何理解一致性哈希”吧!一技能:哈希算法分组韩信的一技能哈希算法:将士兵...
    99+
    2024-04-02
  • 如何理解一致性哈希算法
    本篇内容介绍了“如何理解一致性哈希算法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!要了解一致性哈希,首先...
    99+
    2024-04-02
  • 一篇文章读懂Java哈希与一致性哈希算法
    目录哈希 Hash 算法介绍分布式存储场景场景描述:实现思路:缺点:一致性Hash算法节点增加场景节点减少场景节点分布不均匀虚拟节点增加节点节点减少总结哈希 Hash 算法介绍 哈希...
    99+
    2024-04-02
  • Python小知识 - 一致性哈希算法
    一致性哈希算法 一致性哈希算法(Consistent Hashing Algorithm)是用于解决分布式系统中节点增减比较频繁的问题。它的思想是,将数据映射到0~2^64-1的哈希空间中,并通...
    99+
    2023-09-16
    Python YYDS
  • 详解Golang官方中的一致性哈希组件
    目录背景一致性哈希算法原理改进实现方式结构和接口添加节点重置节点获取Key对应的节点总结背景 在分布式缓存中,我们需要通过一组缓存节点来提高我们的缓存容量。比如我们有3个Redis节...
    99+
    2023-05-14
    Golang一致性哈希算法 Golang一致性哈希组件 Golang一致性哈希 Golang 哈希
  • 详解Java分布式系统中一致性哈希算法
    目录业务场景使用Hash取模的问题1.负载均衡2.分库分表基本思想原理如何提高容错性和扩展性的1. 新增服务器节点2. 删除服务器节点Hash环的数据倾斜问题总结业务场景 近年来B2...
    99+
    2024-04-02
  • 如何用PHP实现分布算法之一致性哈希算法
    目录传统算法缺陷算法思想算法实现总结传统算法缺陷 对于服务器分布,我们要考虑的东西有如下三点:数据平均分布,查找定位准确,降低宕机影响。 传统算法一般是将数据的键用算法映射出数字,对...
    99+
    2024-04-02
  • 一致性哈希概念与Python的简单实现
    好像从开始接触Zookeeper的时候就知道了有一致性哈希这东西。。。。不过倒是一直都没有去了解这到底是个啥东西。。。只是知道它在分布式系统设计中有十分重要的作用。。。。 好了,接下来用举例子的方式来说一下一致性哈希到底有啥用吧。。。场...
    99+
    2023-01-31
    概念 简单 一致性哈希
  • Golang官方中的一致性哈希组件怎么实现
    这篇“Golang官方中的一致性哈希组件怎么实现”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Golang官方中的一致性哈希...
    99+
    2023-07-05
  • 如何理解哈希算法类型hash-identifier
    这篇文章给大家介绍如何理解哈希算法类型hash-identifier,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。识别哈希算法类型hash-identifierhash-identifier是一款哈希算法识别工具。通过...
    99+
    2023-06-05
  • PHP如何解决哈希冲突
    今天小编给大家分享一下PHP如何解决哈希冲突的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。链地址法链地址法是最简单而且最常见...
    99+
    2023-07-06
  • java哈希冲突如何解决
    在Java中,哈希冲突可以通过以下几种方式来解决:1. 链地址法(链表法):当发生哈希冲突时,将冲突的元素存储在一个链表中。在查找元...
    99+
    2023-08-25
    java
  • 怎么使用PHP实现分布算法之一致性哈希算法
    这篇文章主要介绍怎么使用PHP实现分布算法之一致性哈希算法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!传统算法缺陷对于服务器分布,我们要考虑的东西有如下三点:数据平均分布,查找定位准确,降低宕机影响。传统算法一般是...
    99+
    2023-06-15
  • perl如何把哈希写入一个文件
    在Perl中,可以使用Storable模块来将哈希写入文件。下面是一个示例代码:```perluse strict;use warn...
    99+
    2023-10-07
    perl
  • 如何理解MySQL的一致性读
    如何理解MySQL的一致性读,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。一 前言   ...
    99+
    2024-04-02
  • JavaScript如何实现哈希表
    这篇文章将为大家详细讲解有关JavaScript如何实现哈希表,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、哈希表原理哈希表是一种非常重要的数据结构,几乎所有的编程语言都有直接或者间接的应用这种数据结...
    99+
    2023-06-22
  • Java中HashMap如何解决哈希冲突
    目录1. Hash算法和Hash表2. Hash冲突3. 解决Hash冲突的方法有四种4.HashMap在JDK1.8版本的优化1. Hash算法和Hash表 了解Hash冲突首先了...
    99+
    2024-04-02
  • 哈希表(散列表)原理详解
    哈希表(散列表)是一种常见的数据结构,其原理是通过哈希函数将键映射到一个固定大小的数组索引上,以实现高效的数据存储和检索操作。下面是...
    99+
    2023-08-24
    哈希表
  • 分布式缓存负载均衡的规则处理:虚拟节点对一致性哈希的改进 采用固定哈希算法平衡负载
    在大规模的缓存应用中,应运而生了分布式缓存系统。key-value如何均匀的分散到集群中?最常规的方式莫过于hash取模的方式。比如集群中可用机器适量为N,那么key值为K的的数据请求很简单的应该路由到ha...
    99+
    2024-04-02
  • C#中如何使用哈希表
    这篇文章将为大家详细讲解有关C#中如何使用哈希表,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。在.NET Framework中,Hashtable是System.Collections命名空...
    99+
    2023-06-18
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作