一致性哈希

MemCached 采用一致性哈希解决增加/减少memcached server的数量,对原先存储的所有key的后续查询都将定位到别的server上,导致所有的cache都不能被命中而失效。虽然一直知道大概是这样,今天被问得一愣一愣的,关键是下面标红的一句话。

一致性哈希(Consistent Hashing) 处理服务器的选择不再仅仅依赖key
的hash本身而是将服务实例(节点)的配置也进行hash
运算。
1. 首先求出每个服务节点的hash,并将其配置到一个0~2^32的圆环(continuum)区间上。
2. 其次使用同样的方法求出你所需要存储的key的hash,也将其配置到这个圆环(continuum)上。
3. 然后从数据映射到的位置开始顺时针查找,将数据保存到找到的第一个服务节点上。
如果超过2^32 仍然找不到服务节点,就会保存到第一个memcached服务节点上。
整个数据的图例:

其他:只有在圆环上增加服务节点的位置为逆时针方向的第一个服务节点上的键会受到影响。
小结 一致性哈希算法最大程度的避免了key在服务节点列表上的重新分布,其他附带的改进就是有的一致性哈希算法还增加了虚拟服务节点的方法,
也就是一个服务节点在环上有多个映射点,这样就能抑制分布不均匀, 最大限度地减小服务节点增减时的缓存重新分布。

posted @ 2013-09-12 00:20  明将军  Views(461)  Comments(0Edit  收藏  举报
恨怨悲苦憎怒嗔、仁爱慈孝耻义廉。是故恨人所以得仁,无爱者必不怨,不慈者必无悲,孝而有苦,憎后耻来,义自怒生,廉人心嗔。夹天地七大苦,破人情七大碍,遂舍善恶之心,得称剑神。