说明:类比之前的文件,现在将文件变成若干台服务器,经过处理来决定将该字符串分配给哪个服务器。那么根据哈希函数性质,每台服务器得到的数据量是平均的(负载也均衡,即每个服务器中高频中频低频的数据量都是整体数量的均分)。当然数据量是尽可能大的情况下。
缺点:对于扩容和缩减的数据迁移代价很高,比如数据高峰期,需要增设服务器,数据低峰期需要减少服务器,都需要将所有数据重新分配到各服务器中。
·一致性哈希(优化上述问题)
比如有一个哈希函数,其所得输出域为0 ~ 2^64 - 1。
即把其看做一个环,然后把服务器某些信息(比如ipv4)转换为值打到环上。
插入字符串后,把该值打到环上,以顺时针看齐遇到的第一个服务器,就把数据传到该服务器上。数据迁移时同样把要撤去的服务器的数据通过该方式迁移到别的服务器上。
但这样做会有些问题,比如服务器数量少m可能没有均匀分布到环上,即使刚开始时服务器均匀分布到环上,但当有服务器加入或撤出时,就会破坏均匀性。
·再优化
按服务器负载能力(利用比利)给服务器分配字符串。比如下面给三个服务器都分配1000个字符串,让这些虚拟结点去占圈,那么这3000个结点会相对均匀地分布在圈上。数据的插入和迁移依旧根据上述的操作。但是却能保证每个服务器所得数据相对均衡。(或者按比例分配)