Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >在集群扩容和收缩时却有一定的局限性

在集群扩容和收缩时却有一定的局限性

原创
作者头像
用户7737280
发布于 2022-01-12 09:13:54
发布于 2022-01-12 09:13:54
3070
举报

比如:一个服务器节点挂了,计算公式从hash(key)% 3变成了hash(key)% 2,结果会发生变化,此时想要访问一个key,这个key公开选拔的缓存位置大概率会发生改变,那么之前缓存key的数据也会失去作用与意义。

大量缓存在同一时间失效,造成缓存的雪崩,进而导致整个缓存系统的不可用,这基本上是不能接受的,为了解决优化上述情况,一致性hash算法应运而生~那么,一致性哈希算法又是如何解决上述问题的?

服务器映射到hash环这个时候计算公式就从hash(key)% N 变成了**hash(服务器ip)% 232**,使用服务器IP地址进行hash计算,用哈希后的结果对232取模,结果一定是一个0到2^32-1之间的整数,而这个整数映射在hash环上的位置代表了一个服务器,依次将node0node1node2公开选拔三个缓存服务器映射到hash环上。那它又是如何优化集群中添加节点和缩减节点,http://www.gongxuanwang.com 普通取模算法导致的缓存服务,大面积不可用的问题呢?

先来看看扩容的场景,假如业务量激增,系统需要进行扩容增加一台服务器node-4,刚好node-4被映射到node-1node-2之间,沿顺时针方向对象映射节点,发现原本缓存在node-2上的对象key-4key-5被重新映射到了node-4上,公开选拔 而整个扩容过程中受影响的只有node-4node-1节点之间的一小部分数据。一致性Hash算法引入了一个虚拟节点机制,即对每个服务器节点计算出多个hash值,它们都会映射到hash环上,映射到这些虚拟节点的对象key,最终会缓存在真实的节点上。

虚拟节点的hash计算通常可以采用,对应节点的IP地址加数字编号后缀 hash(10.24.23.227#1) 的方式,举个例子,node-1节点IP为10.24.23.227,正常计算node-1http://www.gongxuanwang.com 的hash值。

  • hash(10.24.23.227#1)% 2^32假设我们给node-1设置三个虚拟节点,node-1#1node-1#2node-1#3,对它们进行hash后取模。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
不会一致性hash算法,劝你简历别写搞过负载均衡
这两天看到技术群里,有小伙伴在讨论一致性hash算法的问题,正愁没啥写的题目就来了,那就简单介绍下它的原理。下边我们以分布式缓存中经典场景举例,面试中也是经常提及的一些话题,看看什么是一致性hash算法以及它有那些过人之处。
程序员小富
2022/02/09
3050
不会一致性hash算法,劝你简历别写搞过负载均衡
不会一致性hash算法,劝你简历别写搞过负载均衡
这两天看到技术群里,有小伙伴在讨论一致性hash算法的问题,正愁没啥写的题目就来了,那就简单介绍下它的原理。下边我们以分布式缓存中经典场景举例,面试中也是经常提及的一些话题,看看什么是一致性hash算法以及它有那些过人之处。
程序员小富
2022/01/12
3940
不会一致性hash算法,劝你简历别写搞过负载均衡
一致性hash算法原理及golang实现
这里存在一种场景, 当一个缓存服务由多个服务器组共同提供时, key应该路由到哪一个服务.这里假如采用最通用的方式key%N(N为服务器数目), 这里乍一看没什么问题, 但是当服务器数目发送增加或减少时, 分配方式则变为key%(N+1)或key%(N-1).这里将会有大量的key失效迁移,如果后端key对应的是有状态的存储数据,那么毫无疑问,这种做法将导致服务器间大量的数据迁移,从而照成服务的不稳定. 为了解决类问题,一致性hash算法应运而生.
李海彬
2018/07/26
1.2K0
一致性hash算法原理及golang实现
Redis扩容与一致性Hash算法解析
在分布式系统中,随着数据量的增加和负载的变化,对于存储系统的扩容变得尤为重要。Redis作为一种高性能的内存数据库,其在扩容方面采用了一致性Hash算法,以实现无缝的数据分布和负载均衡。本篇博客将详细探讨Redis的扩容机制,同时深入解析一致性Hash算法,并提供相应的代码示例。
疯狂的KK
2023/08/18
5190
Redis扩容与一致性Hash算法解析
面试:1~2亿条数据需要缓存,请问如何设计这个存储案例
一致性Hash算法背景,一致性哈希算法在1997年由麻省理工学院中提出的,设计目标是为了解决分布式缓存数据变动和映射问题,某个机器宕机了,分母数量改变了,自然取余数不OK了。
一个风轻云淡
2022/11/15
3010
面试:1~2亿条数据需要缓存,请问如何设计这个存储案例
Redis(二)---数据分区
分布式数据库首先要解决把整个数据集按照分区规则映射到多个节点的问题,即把数据集划分到多个节点上,每个节点负责整体数据的一个子集。
Autooooooo
2020/11/09
6930
Redis(二)---数据分区
分布式缓存--一致性hash原理和hash槽,以及算法实现
我们在使用n台存储设备存储数据的时候,常规做法有将数据根据key%n这样计算放在哪台服务器,但是在扩容的时候就会遇到数据迁移的问题,比如扩容m台服务器,以前是key%n,现在是key%(n+m),导致数据存储的位置需要变化,数据迁移的成本比较大,这个时候我们就引用了一种叫一致性hash的算法 。 一致性哈希算法在1997年由麻省理工学院提出,设计目标是为了解决因特网中的热点(Hot spot)问题,初衷和CARP十分类似。一致性哈希修正了CARP使用的简单哈希算法带来的问题,使得DHT可以在P2P环境中真正得到应用。
yingzi_code
2019/08/31
1.1K0
【转】什么是一致性hash算法?(详解)
最近有小伙伴跑过来问什么是Hash一致性算法,说面试的时候被问到了,因为不了解,所以就没有回答上,问我有没有相应的学习资料推荐,当时上班,没时间回复,晚上回去了就忘了这件事,今天突然看到这个,加班为大家整理一下什么是Hash一致性算法,希望对大家有帮助!
洋仔聊编程
2019/09/18
6020
【转】什么是一致性hash算法?(详解)
集群扩容的常规解决:一致性hash算法
写这篇博客是因为之前面试的一个问题: 如果memcached集群需要增加机器或者减少机器,那么其他机器上的数据怎么办? 最后了解到使用一致性hash算法可以解决,下面一起来学习下吧。 声明与致谢:   本文转载于朱双印博主的个人日志《白话解析:一致性哈希算法 consistent hashing》一文。 ---- 一. 引子   在了解一致性哈希算法之前,最好先了解一下缓存中的一个应用场景,了解了这个应用场景之后,再来理解一致性哈希算法,就容易多了,也更能体现出一致性哈希算法的优点,那么,我们先来描述
一枝花算不算浪漫
2018/06/26
1.7K0
redis系列之——一致性hash算法「建议收藏」
redis系列之——分布式锁 redis系列之——缓存穿透、缓存击穿、缓存雪崩 redis系列之——Redis为什么这么快? redis系列之——数据持久化(RDB和AOF) redis系列之——一致性hash算法 redis系列之——高可用(主从、哨兵、集群) redis系列之——事物及乐观锁 redis系列之——数据类型geospatial:你隔壁有没有老王? redis系列之——数据类型bitmaps:今天你签到了吗? 布隆过滤器是个啥!
全栈程序员站长
2022/11/10
2.5K0
redis系列之——一致性hash算法「建议收藏」
一致性hash面试题_java面试算法
在学习一致性hash算法之前,首先要考虑下为什么要使用它,使用它能解决什么样的问题。带着问题去学习相信理解起来会更容易。
全栈程序员站长
2022/11/10
3120
一致性hash面试题_java面试算法
图解一致性哈希算法,看这一篇就够了!
近段时间一直在总结分布式系统架构常见的算法。前面我们介绍过布隆过滤器算法。接下来介绍一个非常重要、也非常实用的算法:一致性哈希算法。通过介绍一致性哈希算法的原理并给出了一种实现和实际运用的案例,带大家真正理解一致性哈希算法。
章为忠学架构
2023/03/23
8.5K2
图解一致性哈希算法,看这一篇就够了!
一致性 Hash 算法原理&应用梳理
前几天在技术群里,看到有小伙伴在讨论一致性hash算法的问题,正好今天以这个为话题,简单介绍下它的原理。下边我们以分布式缓存中经典场景举例,面试中也是经常提及的一些话题,看看什么是一致性hash算法以及它有那些过人之处。
架构精进之路
2022/12/21
1.1K0
一致性 Hash 算法原理&应用梳理
浅谈一致性Hash算法
大多数网站背后肯定不是只有一台服务器提供服务,因为单机的并发量和数据量都是有限的,所以都会用多台服务器构成集群来对外提供服务。
码之有理
2024/03/12
2920
一致性Hash介绍及使用场景
当单个节点(缓存服务器等)的能力达到上限,一般需要增加节点来打破瓶颈。在分布式系统中,扩容缩容操作极为常见。为了保证数据的均匀,一般情况会采用对key值hash,然后取模的方式,然后根据结果,确认数据落到哪台节点上。如:hash(key)%N,这的确实现了初步的分布式,数据均匀分散到了各个节点上,流量请求也均匀的分散到了各个节点;但出现以下情况:
码农编程进阶笔记
2022/08/18
3530
一致性Hash介绍及使用场景
一致性hash算法原理及实践
今天我们就来看看工作和面试中经常被点名的算法,一致性hash算法,并且我会介绍它在实际的应用场景并用代码实现出来。
蓝胖子的编程梦
2023/06/21
2690
一致性hash算法原理及实践
redis高可用模式比较及一致性hash
Sentinel为Redis提供高可用。利用Sentinel,在无人干预的情况下,可用让Redis服务抵御一定程度的故障。主要发挥以下几个方面的作用:
山行AI
2019/09/09
3.2K0
redis高可用模式比较及一致性hash
5分钟带你理解一致性Hash算法。
一致性Hash算法背景 一致性哈希算法在1997年由麻省理工学院的Karger等人在解决分布式Cache中提出的,设计目标是为了解决因特网中的热点(Hot spot)问题,初衷和CARP十分类似。一致性哈希修正了CARP使用的简单哈希算法带来的问题,使得DHT可以在P2P环境中真正得到应用。 但现在一致性hash算法在分布式系统中也得到了广泛应用,研究过memcached缓存数据库的人都知道,memcached服务器端本身不提供分布式cache的一致性,而是由客户端来提供,具体在计算一致性hash时采用如
Java技术栈
2018/03/30
7380
5分钟带你理解一致性Hash算法。
图解一致性hash算法和实现
一致性hash算法,是麻省理工学院1997年提出的一种算法,目前主要应用于分布式缓存当中。 一致性hash算法可以有效地解决分布式存储结构下动态增加和删除节点所带来的问题。 在Memcached、Key-Value Store、Bittorrent DHT、LVS中都采用了一致性hash算法,可以说一致性hash算法是分布式系统负载均衡的首选算法。
全菜工程师小辉
2019/08/16
7550
docker高级篇2-分布式存储之三种算法
简单粗暴,直接有效。只需要预估好数据规划好节点。就能保证一段时间的数据支撑。使用HASH算法让固定的一部分请求落到同一台服务器上,这样每台服务器固定处理一部分请求,起到负载均衡+分而治之的作用。
凯哥Java
2022/12/18
4350
docker高级篇2-分布式存储之三种算法
相关推荐
不会一致性hash算法,劝你简历别写搞过负载均衡
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档