计算机 · 2021年7月3日 0

一致性哈希算法

https://segmentfault.com/a/1190000021199728

问题:当需要存储大量数据时,需要采用多台服务器来保存这些数据。而存取数据的时候,需要一个哈希算法来帮助确定我们想要读写的数据位于哪一台服务器。对于传统的哈希算法(比如按照服务器台数取模),在服务器数量发生增减的时候,需要对已有的数据进行rehash,这需要对数据进行大量的移动操作。而一致性哈希算法可以减少这种rehash带来的影响。

解决方法:将数据和服务器哈希到同一个整数环上,数据保存在顺时针方向离自己最近的服务器上。在增减服务器的时候,只需要重哈希新增/删除服务器和相邻服务器上的数据,不需要移动其他地方的数据。

新的问题:将服务器哈希到整数环上的时候,可能导致每个服务器需要存储的数据范围大小不一样,负载不均。此时可以把1个物理节点虚拟成2个虚拟节点,相当于把原来的该物理机器下线,再上线2个虚拟机器,只是这2个新虚拟机器的数据是存在下线的这个物理机上的,通过这种增减服务器节点的操作,对保存在原物理机器上的数据又重新进行了哈希,就有概率使得所有的服务器的负载更加均衡。