分布式数据存储之哈希和一致性哈希

数据分布设计原则

数据均匀:不同存储节点中存储的数据要尽量均衡,用户访问也要做到均衡

数据稳定:当存储节点出现故障需要移除或者扩增时,数据按照分布规则得到的结果应该尽量保持稳定,不要出现大规模的数据迁移

节点异构性:不同存储节点的硬件配置可能差别较大

隔离故障域:保证数据的可用和可靠性

性能稳定性:数据存储和查询的效率要有保证

数据分布方法

哈希

核心思想:确定一个哈希函数,然后通过计算得到对应的存储节点,适用于同类型节点且节点数量比较固定的场景

一致性哈希

核心思想:将存储节点和数据都映射到一个首尾相连的哈希环上,存储节点可以根据IP地址进行哈希,数据通常通过顺时针方向寻找的方式,来确定自己所属的存储节点。很好的解决的哈希方法存在的稳定性问题,当节点加入或退出时,仅影响该节点哈希环上顺时针相邻的后继节点。适用于同类型节点,节点规模会发生变化的场景

带有限负载的一致性哈希

核心思想:给每个存储节点设置一个存储上限值来控制存储节点添加或者移除造成的数据不均匀

带虚拟节点的一致性哈希

核心思想:根据每个节点的性能,为每个节点划分不同数量的虚拟节点,并将这些虚拟节点映射到哈希环中,然后再按照一致性哈希算法进行数据映射和存储

对比

数据分片和数据分区的区别

数据分片是从数据维度进行划分,将一个数据集合按照一定的方式划分为多个数据子集,不同的数据子集存储在不同的数据块上;

数据分区是从数据存储块的维度进行划分,不同的分区物理上归属于不同的节点

posted on 2020-02-17 11:38  BattleScars  阅读(611)  评论(2编辑  收藏  举报