分布式(1):一致性哈希

一致性哈希

场景

在对数据表做sharding时,若根据hash取模来决定存储分区,在水平扩展结点数量时,每条数据所属的分区会发生变化,需要进行大量的数据迁移,因此在扩展时一般扩展成2倍结点数量,避免数据的全量迁移

原理

一致性哈希采取哈希环的方式来决定存储分区,将各个存储结点哈希到环上,哈希环的范围 0 - 2^n - 1。对于数据进行相同的哈希,并沿顺时针存储到第一个哈希值比数据哈希值大的结点上
分布式(1):一致性哈希

结点扩充时,若结点B和结点C之间插入结点X,则需要从结点C中,把哈希值在X和B之间的数据迁移到结点X中;删除时,若删除节点C,则把结点C中的数据迁移到结点D中即可
分布式(1):一致性哈希

优化

当哈希环上结点数量较少时,容易造成哈希到每个结点的数据量不均衡,可在哈希环上插入多个虚拟结点,每个虚拟结点对应一个实体结点,来保证数据分布的均衡性
分布式(1):一致性哈希