首页 > 代码库 > 一致性哈希简述

一致性哈希简述

举个例子

现在你写好了一个牛逼的cache服务,但是这个是单机版本。给你十台机器,让你做均衡。

你可能会想到 hash(request)%N来决定分到哪个机器。

image

理论知识

一致性:我又把它叫做可加性,就是你的哈希算法得能允许这样的情况。为了扩容我加了一个cache机器进来,你得让原来哈希到老机器上的流量能够分流到新机器上来

平衡性:算法得让流量尽可能的分到各个cache上

 

为了解决什么问题

在“举个例子”中,那么搞法的话,会出现什么问题。下周流量涨了,下游顶不住了,得加cache机器。或者老大说机器不够了,要回收cache机器。

%N的N要变,那么意味着基本上所有的cahe都失效,瞬间下游流量爆炸了,在这个瞬间,对后台系统是灾难。

如果你的%N的N不变,那么减机器的情况,你可能勉强忍过去,顶多就一小部分cache失效。但是加机器肯定搞不定。显然,这个策略走到了瓶颈。

 

什么是一致性hash

怎么搞定一致性问题

环形哈希空间:我们把hash key的集合理解为一个环形的空间,比如int的话,0- 232-1

image

cache映射到hash空间

key映射到hash空间

把key映射到cache,key沿着hash空间的顺时针出发,找到第一个cache就是他的归宿

好了,到此,一致性问题解决了。

image

怎么搞定平衡性问题

虚拟节点,实际的cache节点赋值出n份替身分散到hash空间即可解决。

一致性哈希简述