什么是一致性哈希

一致性哈希 一致性哈希算法由麻省理工学院在1997年提出,目的是解决分布式缓存的问题。其核心思想是将整个哈希值空间组织成一个虚拟的环,通常使用MD5或SHA-1等哈希函数将数据项和服务器节点都映射到这个环上,并通过比较哈希值来确定数据应该存储在哪个节点上。这个哈希环的取值范围通常为0到2^32-1,形成一个闭环结构。 阅读详情

这里是修真院技术分享,每篇分享文从

八个方面深度解析后端知识/技能,本篇分享的是:

【什么是一致性哈希】

【修真院Java小课堂】什么是一致性哈希

开场语:

大家好,我是IT修真院北京分院第32期的学员廖友,一枚正直纯洁善良的Java程序员,今天给大家分享一下,修真院官网Java任务五,深度思考中的知识点——什么是一致性哈希

一、背景介绍:

一致性哈希算法在1997年由麻省理工学院提出(参见扩展阅读[1]),设计目标是为了解决因特网中的热点(Hot spot)问题,初衷和CARP十分类似。一致性哈希修正了CARP使用的简单哈希算法带来的问题,使得DHT可以在P2P环境中真正得到应用。

二、知识剖析:

1、一致性哈希算法原理

研究过memcached缓存数据库的人都知道,memcached服务器端本身不提供分布式cache的一致性,而是由客户端来提供,具体在计算一致性hash时采用如下步骤:

(1)首先求出memcached服务器(节点)的哈希值,并将其配置到0~2‘32的圆(continuum)上。

(2)然后采用同样的方法求出存储数据的键的哈希值,并映射到相同的圆上。

(3)然后从数据映射到的位置开始顺时针查找,将数据保存到找到的第一个服务器上。如果超过232仍然找不到服务器,就会保存到第一台memcached服务器上。

3、一致性哈希算法特性之平衡性

平衡性是指哈希的结果能够尽可能分布到所有的缓冲中去,这样可以使得所有的缓冲空间都得到利用。很多哈希算法都能够满足这一条件。

4、 一致性哈希算法特性之单调性

单调性是指如果已经有一些内容通过哈希分派到了相应的缓冲中,又有新的缓冲区加入到系统中,那么哈希的结果应能够保证原有已分配的内容可以被映射到新的缓冲区中去,而不会被映射到旧的缓冲集合中的其他缓冲区。简单的哈希算法往往不能满足单调性的要求,如最简单的线性哈希:x = (ax + b) mod §,在上式中,P表示全部缓冲的大小。不难看出,当缓冲大小发生变化时(从P1到P2),原来所有的哈希结果均会发生变化,从而不满足单调性的要求。哈希结果的变化意味着当缓冲空间发生变化时,所有的映射关系需要在系统内全部更新。而在P2P系统内,缓冲的变化等价于Peer加入或退出系统,这一情况在P2P系统中会频繁发生,因此会带来极大计算和传输负荷。单调性就是要求哈希算法能够应对这种情况。

5、一致性哈希算法特性之分散性

在分布式环境中,终端有可能看不到所有的缓冲,而是只能看到其中的一部分。当终端希望通过哈希过程将内容映射到缓冲上时,由于不同终端所见的缓冲范围有可能不同,从而导致哈希的结果不一致,最终的结果是相同的内容被不同的终端映射到不同的缓冲区中。这种情况显然是应该避免的,因为它导致相同内容被存储到不同缓冲中去,降低了系统存储的效率。分散性的定义就是上述情况发生的严重程度。好的哈希算法应能够尽量避免不一致的情况发生,也就是尽量降低分散性。

6、 一致性哈希算法特性之负载

负载问题实际上是从另一个角度看待分散性问题。既然不同的终端可能将相同的内容映射到不同的缓冲区中,那么对于一个特定的缓冲区而言,也可能被不同的用户映射为不同的内容。与分散性一样,这种情况也是应当避免的,因此好的哈希算法应能够尽量降低缓冲的负荷。

三、常见问题:

xmemcached本身不具备分布式功能,那它是如何实现分布式应用的呢?

四、解决方案:

xmemcached的分布式实现是由客户端实现的,客户端采用了一致性哈希算法,从而能够计算出每条记录的存储位置。

五、编码实战

六、拓展思考:

解决数据分布的常用映射方式 Hash映射:

通过哈希算法将key映射到有限值上,例如crc16(key)%16384 范围映射:对key的值空间划分范围,根据数据ID缓存到对应区域 Hash与范围结合:典型算法为一致性哈希算法,统一对key进行哈希运算求得哈希值,通过对整个哈希空间划分范围,划分的节点为用来存储数据的缓存节点,然后将数据存储到对应的存储空间中。

七、参考文献:

[1]http://www.zsythink.net/archives/1182/

[2]《深入分布式缓存》

[3]https://www.cnblogs.com/lpfuture/p/5796398.html

八、更多讨论:

Q1:为什么需要一致性哈希

A1:在解决数据分布的问题上,若采用简单的哈希取模方式,由于模是与缓存服务器数据量绑定的,当对缓存服务器进行增减时,模也要变化,这会导致以前的数据全部失效;若采用一致性哈希算法,由于模固定,所以对服务器进行增减时不会导致全部数据失效,受影响的部分只是一小部分。

Q2:一致性哈希运用场景有哪些

A2:xmemcached的客户端是使用一致性哈希算法来解决数据分布问题的,redis默认采用crc16(key)%16384解决数据分布问题,但我们也可以将一致性哈希应用在redis的数据分布上,具体怎么选择看应用场景 。

Q3:使用虚拟节点技术解决平衡性问题,那么数据一定是均匀分布在各个服务器上吗?

A3:这个不一定,使用虚拟节点技术只能说能够尽量使节点均匀分布在哈希环上,但不能绝对均匀,若想提高平衡性,可以多虚拟出几个节点。

九、结束语:

今天的分享就到这里啦,欢迎大家点赞、转发、留言、拍砖~

一致性哈希及其在Greenplum中的应用 了解更多G... 阅读详情

相关推荐

Golang面试(一)莉莉丝游戏-Golang后端开发-中台部门

莉莉丝游戏-Golang后端开发-中台部门 开场白,双方自我介绍,对方介绍这个岗位情况,erlang语言,全部转向go。 聊项目,介绍IM架构以及使用Go写的服务简介 动态扩容相关问题:平常30万,现在100万,你们现在是如何应对的? 如果让你调整架构实现动态扩容,你会怎么做?回答了kafka,是一种,应该还要使用docker和k8s以及微服务框架等 如果使用kafka,你是如何确保消息有序?回答了redis,好像没回答到那个点 消息发送失败的问题,如何做到消息不丢?回答持久化存储、拉消息和ACK 发送失

xmcy001122的专栏 3898

一文读懂一致性哈希

在开始说一致性哈希之前,我们先来了解一下什么是哈希。

Doublelv 的博客专栏。 3324

QMT vs Ptrade:量化交易新手如何根据需求选择券商系统(附实战案例)

本文对比了QMT和Ptrade两大券商量化交易系统的核心差异,帮助量化交易新手根据需求选择合适的平台。QMT适合技术面策略开发,执行效率高;Ptrade则提供全面的财务数据和复杂策略支持。通过实战案例,展示了如何结合两平台优势实现高效量化交易。

weixin_42683394的博客 527

关于一致性哈希

定义: 数据倾斜(Data Skew)指的是在分布式系统中,数据并未均匀分布在各个节点上,导致某些节点存储或处理的数据量远远多于其他节点。数据倾斜会导致负载不均衡,从而影响系统的性能和稳定性。影响性能瓶颈:部分节点负载过重,可能成为系统的瓶颈,降低整体性能。资源浪费:部分节点负载过轻,导致资源未得到充分利用,增加了成本。响应时间增加:高负载节点处理时间较长,导致整体系统的响应时间增加。系统稳定性下降:高负载节点更容易出现故障,影响系统的稳定性和可用性。

www_tlj的专栏 1207

单细胞转录组数据质控实战:如何用Seurat精准过滤低质量细胞(附完整代码)

本文详细介绍了使用Seurat进行单细胞转录组数据质控的实战方法,包括基因检出数、分子计数和线粒体基因比例等关键指标的解读与可视化技巧。通过动态阈值策略和高级质控技巧(如双细胞检测和红细胞过滤),帮助研究者精准过滤低质量细胞,提升数据分析可靠性。附完整代码示例,适合生物信息学研究人员参考实践。

ii567的博客 824

COMSOL中的动网格

首先我们先了解几个概念 (1)网格重划分(remesh):就是在某些特定的区域进行网格的重新划分,在Maxwell软件中的直线运动区域,当运动物体运动后,这个区域进行重新划分。 (2)morph:网格不重新划分,小范围的进行网格变形,针对运动物体运动位移较小,对变形区域不进行重划分,能够提高效率。 (3)网格滑移(sliding):针对圆形运动区域,运动与非运动区域进行网格滑移,当然边界上两侧网格不共节点,该方法不需要网格重新划分,大部分软件针对圆形运动区域采用该方法,比如maxwell的band,b

midiio的博客 7868

什么是一致性hash,有哪些一致性hash算法?

一致性hash

Runcode8的博客 887

京东联盟h5st(3.1)加密参数逆向实战与反爬对抗策略

本文详细解析了京东联盟h5st(3.1)加密参数的逆向分析与实战破解过程。通过接口分析定位关键加密函数,拆解h5st结构并还原其基于SHA256和HMAC-SHA256的加密逻辑,最终使用Python集成JavaScript环境成功复现加密算法,并分享了应对反爬的频率限制、IP封禁及算法升级等对抗策略。

weixin_29246195的博客 1738

何为一致性哈希?一致性哈希和哈希有什么区别?一文深入理解一致性哈希

一致性哈希的原理

Hanson的博客 8154

告别NEDC!手把手教你将CLTC/WLTP等最新工况文件导入AVL Cruise(附资源包)

本文详细指导如何将CLTC、WLTP等最新工况文件导入AVL Cruise软件,替代传统的NEDC工况。从资源获取、文件预处理到分步导入指南,再到常见问题排查,帮助工程师高效完成汽车仿真性能评估。附赠全球主流工况文件资源包,助力精准仿真分析。

weixin_30374009的博客 461

可控异常的契约化设计:在 ABAP 中用 CX_STATIC_CHECK 把可预期错误变成接口的一部分

文章摘要: 本文探讨了ABAP系统中异常处理的工程化设计原则,强调将可预期的业务异常作为接口契约的一部分。核心观点是:对于调用方能够合理处理的错误情况,应使用继承自CX_STATIC_CHECK的受检异常,通过方法签名强制调用方处理或显式转发。文章对比了ABAP三大异常根类的适用场景,提出"三问法"判断异常是否适合受检处理,并给出了包含上下文信息的异常类实现示例。通过Fiori文件上传案例,展示了如何在分层架构中合理传递和转换异常,最终在OData服务层将业务异常映射为标准错误响应。这种

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 3062

一致性哈希是什么?

写在前面 本文隶属于专栏《100个问题搞定大数据理论体系》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢! 本专栏目录结构和文献引用请见100个问题搞定大数据理论体系 解答 一致性哈希算法是一种特殊的哈希算法,目的是解决分布式缓存的问题。 在移除或者添加一个服务器时,能够尽可能小地改变已存在的服务请求与处理请求服务器之间的映射关系。 一致性哈希解决了简单哈希算法在分布式哈希表(Distributed Hash Table,DHT)中存在的动态伸缩等问题。 补充 Distri

Shockang的博客 1万+

RT-DETR改进策略【Neck】| GFPN 超越BiFPN 通过跳层连接和跨尺度连接改进RT-DETR颈部网络

本文记录的是利用颈部结构优化RT-DETR的目标检测网络模型。利用改进后的颈部网络,通过跳层连接,避免了在进行反向传播时的梯度消失问题,并且引入跨尺度连接,可以实现不同级别和层次的特征充分融合,获取足够的高层语义信息和低层空间信息交换,从而在大规模变化场景下提高检测性能。GIRAFFEDET: A HEAVY-NECK PARADIGM FOR OBJECT DETECTION-GFPN包含了上述的跳层连接(dense-link和log2nlog _{2} nlog2​n-link)以及跨尺度连接(Quee

Limiiiing的博客 2228

什么是一致性哈希?看这里

[TOC] 前言 伴随着系统流量的增大,出现了应用集群。在 Redis 中为了保证 Redis 的高可用也为 Redis 搭建了集群对数据进行分槽存放。在 Mysql 数据库要存储的量达到一个很高的地步的时候,我们会对数据库进行分库分表操作。OK,到这儿先假设我们不知道什么是集群、什么是分库分表,我们先来看一个数据库水平切分演变的例子: 假设我们的系统中有一张会员表 customer_info,...

程序员世杰 8235

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

一致性哈希详解

普通的 hash 算法(hashcode % size),如果 size 发生变化,几乎所有的历史数据都需要重新hash、移动,代价非常大,常见的 Java 中的 HashMap 就是如此。那如果在 hash 表扩容或者收缩的时候 size 能够保持不变,即历史数据在 hash 表中的位置不变,这样就解决了 hash 表扩缩时的大量数据移动问题。一致性哈希可以理解为,就是 hash 函数(hashcode % size)的 size 保持不变,从而保证了hash 函数的前后一致性。

流华追梦的专栏 2278

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

一致性哈希+虚拟节点

目录 一、为什么要使用多个服务器 二、简单哈希 三、一致性哈希 3.1 一致性哈希思想: 3.2 某节点宕机时 3.3 新增节点 四、一致性哈希的数据倾斜问题 五、虚拟节点解决数据倾斜问题 原文链接:https://www.jianshu.com/p/735a3d4789fc 一、为什么要使用多个服务器 随着系统流量的增大,出现了应用集群。在 Mysql数据库要存储的量达到一个很高的地步的时候,我们会对数据库进行分库分表操作。OK,到这儿先假设我们不知道什么是集群、什么是分库分表,..

ZJE 2823

一致性哈希算法 mysql_一致性哈希

[TOC]前言伴随着系统流量的增大,出现了应用集群。在 Redis 中为了保证 Redis 的高可用也为 Redis 搭建了集群对数据进行分槽存放。在 Mysql数据库要存储的量达到一个很高的地步的时候,我们会对数据库进行分库分表操作。OK,到这儿先假设我们不知道什么是集群、什么是分库分表,我们先来看一个数据库水平切分演变的例子:假设我们的系统中有一张会员表 customer_info, 我们的系...

weixin_42527464的博客 974

什么是一致性哈希?一致性哈希是如何工作的?如何设计一致性哈希?

在这一章,我们深入讨论了一致性哈希,包括为什么需要它以及它是如何工作的。当服务器被添加或移除时,最小化键的重新分布。因为数据更均匀地分布,所以易于横向扩展。缓解热点键问题。过度访问特定的分片可能导致服务器过载。想象一下,Katy Perry、Justin Bieber和Lady Gaga的数据全部都在同一个分片上。一致性哈希通过更均匀地分布数据来缓解这个问题。Amazon的Dynamo数据库的分区组件 [3]Apache Cassandra中跨集群的数据分区 [4]

csdn1234561231的博客 874

一致性哈希的简单认识

在分布式集群中,对机器的添加、删除或者是机器故障后自动脱离集群等操作是分布式集群管理最基本的功能。如果采用的是常见的取模哈希算法,当有机器添加、删除之后,需要对数据做迁移,非常麻烦。而一致性哈希利用哈希环的概念,保证增加或减少服务器,数据存储的改变最少,相比取模哈希算法大大节省了数据移动的开销,非常方便。平衡性:指哈希的结果能够尽可能分布到所有的缓存中,这样可以使得所有的缓存空间都能得到利用单调性。

csdn_manong1的博客 914

一致性哈希的浅析

最近的工作涉及到了一致性哈希,就抽了点时间研究了一下,发现网上的一些文章其实理解的不够准备,这里说一下我自己的看法。希望对读者有所帮助

u013696062的专栏 1031
上一篇: 拦截器、过滤器、监听器各有什么作用?
下一篇: SpringMVC分页查询和显示
learning__java
博客等级 码龄8年 87粉丝 174原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值