Chinaunix首页 | 论坛 | 博客
  • 博客访问: 8169596
  • 博文数量: 595
  • 博客积分: 13065
  • 博客等级: 上将
  • 技术积分: 10334
  • 用 户 组: 普通用户
  • 注册时间: 2008-03-26 16:44
个人简介

推荐: blog.csdn.net/aquester https://github.com/eyjian https://www.cnblogs.com/aquester http://blog.chinaunix.net/uid/20682147.html

文章分类

全部博文(595)

分类: C/C++

2010-09-06 23:18:30

在普通的哈希中,如果节点个数(分母)发生变化,原先的次序会被完全打乱重来,一致性哈希解决了这个问题。实际可看成普通的哈希对着的是物理节点,而一致性哈希对着的是虚拟节点,这里可以拿物理内存和虚拟内存来对比,虚拟节点是可认为是使用不完的,挂了一个节点,还可以认为节点数不变,因此哈希的对应关系仍保持不变,也就不存在普通哈希的问题了。

没有深入的了解一致性哈希,但我认为一般的集群系统使用一致性哈希并非最优的选择。在一些系统中,我采取了另一种更傻瓜式的办法,基本不涉及到算法二字。仍然将物理节点看成取之不尽的虚拟节点,仍哈希成若干份(比物理节点数大百倍,甚至万倍,每一份可以看成原子不可再分隔的),可以将每一份看成为一个麻将子,最复杂的算法就是已知节点数的情况下,如何去均衡的分配这些麻将子,而同时又尽可能的减少数据映射关系的变化,要做到这一点非常容易,只需要维护一个分配表即可,这里有一个前提:需要一个集中的改变分配关系的节点。

实际即使使用一致性哈希,也需要一个集中的改变分配关系的节点,因为某个节点自作主张选择的下一节点,也许并非可靠的,因为也许刚好它们之间的网络是通的,但和其它一些可能并不通,因此仍需要一个仲裁节点来发布指令。

从上面的理解来看,使用一致性哈希并不是最简单的均衡和容灾策略。什么情况下必须一致性哈希了?

讨论:
阅读(1665) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~