一致性 Hash 算法
随着互联网的快速发展,分布式系统已经成为各个互联网公司的标配。而一致性哈希算法是分布式系统中常用的算法。
一致性Hash算法背景
一致性哈希算法在1997年由麻省理工学院的Karger等人在解决分布式Cache中提出的,设计目标是为了解决因特网中的热点(Hot spot)问题,但现在一致性hash算法在分布式系统中也得到了广泛应用(最常见的是应用于分布式缓存系统)。
一致性Hash算法的原理
构建2的32次方的数字空间,形成[0,(2^32)-1]Hash值的环形空间
将数据通过一定的Hash算法映射到环上
将机器通过同样的Hash算法映射到环上
使用虚拟节点解决Hash环的偏斜问题
判断Hash算法的好坏
平衡性
哈希的结果能够尽可能分布到所有的集群机器上。
单调性
已经有一部分数据通过哈希算法分配到了相应机器上,又有新的机器加入到集群系统中。哈希的结果应该能够保证原有已分配的数据可以被映射到原有的或者新的机器上,而不是被映射到旧的集群中的其他机器。
分散性
在分布式环境中,终端看不到集群中所有的机器,而是只能看到其中的一部分。当终端希望通过哈希算法将数据映射到机器上时,由于不同终端所见的机器范围有可能不同,从而导致哈希的结果不一致,最终的结果是相同的数据被不同的终端映射到不同的机器上。这种情况显然是应该避免的,这极大地降低了系统存储的效率。分散性的定义就是上述情况发生的严重程度。好的哈希算法应能够尽量避免不一致的情况发生,也就是尽量降低分散性。
负载
既然不同的终端可能将相同的数据映射到不同的机器上,那么对于一个特定的机器而言,也可能被不同的用户映射为不同的数据。与分散性一样,这种情况也是应当避免的,因此好的哈希算法应能够尽量降低机器的负荷。
版权声明: 本文为 InfoQ 作者【南宫煌】的原创文章。
原文链接:【http://xie.infoq.cn/article/89ca593857592e960f746f66f】。未经作者许可,禁止转载。
评论