Round Robin就是俗称的哈希取模法,是实际中非常常用的数据分片方法。假设有K台物理机,通过以下哈希函数即可实现数据分片:
H(key)=hash(key)mod K
对物理机进行编号从0到K-1,根据上述哈希函数,对于以key为主键的某个记录,H(key)的数值即是存储该数据的物理机编号,通过这种方式,就将全部数据分配到K台物理机上,在查找某条记录时,也使用同样的哈希函数就可以找到存储相应信息的物理机。
Round Robin的优点是实现起来非常简单,但是缺乏灵活性,比如新增一台物理机到分布式存储系统,那么哈希函数就变成了:
H(key)=hash(key)mod(K+1)
这样之前已经分配的所有数据与存储该数据的物理机之间的映射关系被完全打乱,所以只能将所有数据重新按照改变后的哈希函数再次分配一遍,对于在线存储系统很明显这是缺乏扩展灵活性的。
为什么Round Robin如此缺乏扩展灵活性呢?Round Robin其实是将物理机和数据分片两个功能点合二为一了,即每台物理机对应一个数据分片,这样key-partition映射和partition-machine映射也就两位一体,都由同一个哈希函数来承担,由此造成的后果是机器个数K作为参数出现在映射函数中,造成了机器个数和映射函数的紧密耦合,只要机器个数变动,哈希函数也会跟着变化,这是Round Robin缺乏扩展灵活性的根本原因。


codecraft
11.9k 声望2k 粉丝

当一个代码的工匠回首往事时,不因虚度年华而悔恨,也不因碌碌无为而羞愧,这样,当他老的时候,可以很自豪告诉世人,我曾经将代码注入生命去打造互联网的浪潮之巅,那是个很疯狂的时代,我在一波波的浪潮上留下...