面试又被问到一致性 Hash 算法?这样回答秒杀面试官!

编程改变世界

数据分片

✔︎ 先让我们看一个例子吧

我们经常会用 Redis 做缓存,把一些数据放在上面,以减少数据的压力。

当数据量少,访问压力不大的时候,通常一台Redis就能搞定,为了高可用,弄个主从也就足够了;

当数据量变大,并发量也增加的时候,把全部的缓存数据放在一台机器上就有些吃力了,毕竟一台机器的资源是有限的,通常我们会搭建集群环境,让数据尽量平均的放到每一台 Redis 中,比如我们的集群中有 4 台Redis。

那么如何把数据尽量平均地放到这 4 台Redis中呢?最简单的就是取模算法:

hash( key ) % N,N 为 Redis 的数量,在这里 N = 4 ;

数据分片

看起来非常得美好,因为依靠这样的方法,我们可以让数据平均存储到 4 台 Redis 中,当有新的请求过来的时候,我们也可以定位数据会在哪台 Redis 中,这样可以精确地查询到缓存数据。

数据分片会遇到的问题

但是 4 台 Redis 不够了,需要再增加 4 台 Redis ;

那么这个求余算法就会变成:hash( key ) % 8 ;

分片数量改变

那么可以想象一下,当前大部分缓存的位置都会是错误的,极端情况下,就会造成 缓存雪崩。

一致性 Hash 算法

一致性 Hash 算法可以很好地解决这个问题,它的大概过程是这样的:

把 0 作为起点,2^32-1 作为终点,画一条直线,再把起点和终点重合,直线变成一个圆,方向是顺时针从小到大。0 的右侧第一个点是 1 ,然后是 2 ,以此类推。

对三台服务器的 IP 或其他关键字进行 hash 后对 2^32 取模,这样势必能落在这个圈上的某个位置,记为 Node1、Node2、Node3。

先画一个圈圈

然后对数据 key 进行相同的操作,势必也会落在圈上的某个位置;然后顺时针行走,可以找到某一个 Node,这就是这个 key 要储存的服务器。

数据顺时针找到对应的 Redis 节点

如果增加一台服务器或者删除一台服务器,只会影响 部分数据。

节点数量改变,影响部分数据

但如果节点太少或分布不均匀的时候,容易造成 数据倾斜,也就是大部分数据会集中在某一台服务器上。

数据倾斜

为了解决数据倾斜问题,一致性 Hash 算法提出了【虚拟节点】,会对每一个服务节点计算多个哈希,然后放到圈上的不同位置。

虚拟节点

当然我们也可以发现,一致性 Hash 算法,也只是解决大部分数据的问题。

会点代码的大叔 | 文【原创】


敬请关注会点代码的大叔
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,402评论 6 499
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,377评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,483评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,165评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,176评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,146评论 1 297
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,032评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,896评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,311评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,536评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,696评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,413评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,008评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,659评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,815评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,698评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,592评论 2 353

推荐阅读更多精彩内容