分布式与一致性哈希

                                     分布式与一致性哈希

相关博客:https://www.cnblogs.com/lpfuture/p/5796398.html

一致性哈希算法:
一致性哈希算法主要用来解决分布式的问题。我们定义一个圆环(0-2^32-1)
我们根据一定的哈希函数计算出数据的key然后利用hash结构存储相应的val或这key-val,如果
出现了hash冲突我们可以采用链地址法或者线性探测法加以解决,我们可以保证最大效率的
查找到这个key对应的数据。

Q:但是问题来了,如果所有的可以不再一个机器的内存上怎么办?
A:那我们就把不同机器的ip或者机器名字用hash函数计算出key分布在这个环上,这时候这些key
是不能有hash冲突的。然后数据的key沿着环顺时针走第一个遇到的机器key就是它所真正物理存储
的机器。
分布式与一致性哈希
Q:这样做有什么好处,为什么自己不再建立一个哈希函数把这些key在一次hash放入唯一的桶中?
A:如果这样做那么我们如果增加或者减少一个memcached服务器。是不是让所有服务器停一下,我重新
部署一下数据。但是如果我们用这种一致性的哈希原则,那么增加一个服务器只会影响这个服务器的
key到之前服务器key之间的数据部署,而且这种部署很简单,全部放到这个服务器不需要重新计算所有
数据。具有较好的容错性和可扩展性。
分布式与一致性哈希
Q:那么如果由于Hash函数不合理,而且服务器很少(2台)我们的数据经过Hash计算全都大概率命中了第一个服务器。那么我们分布式处理数据有何意义?
A:那么我们就开设虚拟节点在第一第二台机器ip后面加数字,竟可能使虚拟节点均匀分布在环上。
这样能大概率的让数据正态均匀分布。

分布式与一致性哈希