首页 > 代码库 > 一致性哈希简述
一致性哈希简述
举个例子
现在你写好了一个牛逼的cache服务,但是这个是单机版本。给你十台机器,让你做均衡。
你可能会想到 hash(request)%N来决定分到哪个机器。
理论知识
一致性:我又把它叫做可加性,就是你的哈希算法得能允许这样的情况。为了扩容我加了一个cache机器进来,你得让原来哈希到老机器上的流量能够分流到新机器上来
平衡性:算法得让流量尽可能的分到各个cache上
为了解决什么问题
在“举个例子”中,那么搞法的话,会出现什么问题。下周流量涨了,下游顶不住了,得加cache机器。或者老大说机器不够了,要回收cache机器。
%N的N要变,那么意味着基本上所有的cahe都失效,瞬间下游流量爆炸了,在这个瞬间,对后台系统是灾难。
如果你的%N的N不变,那么减机器的情况,你可能勉强忍过去,顶多就一小部分cache失效。但是加机器肯定搞不定。显然,这个策略走到了瓶颈。
什么是一致性hash
怎么搞定一致性问题
环形哈希空间:我们把hash key的集合理解为一个环形的空间,比如int的话,0- 232-1
cache映射到hash空间
key映射到hash空间
把key映射到cache,key沿着hash空间的顺时针出发,找到第一个cache就是他的归宿
好了,到此,一致性问题解决了。
怎么搞定平衡性问题
虚拟节点,实际的cache节点赋值出n份替身分散到hash空间即可解决。
一致性哈希简述
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。