海量存储下的哈希分片

哈希分片

哈希(商品ID) % 存储节点数

Hash后取模,比如我们有4个存储节点

取模结构为0,则存在1号节点上。
取模结构为1,则存在2号节点上。
取模结构为2,则存在3号节点上。
取模结构为3,则存在4号节点上。

这就是最简单的哈希分片

**优点:**实现了数据的均匀分布,且实现起来简单。

**缺点:**扩展性差,比如我们节点变动,由4个增加到5个,会导致大规模数据迁移。

如何保证扩展性呢?

一致性Hash

将存储节点和数据都进行哈希,映射到一个环上。
存储节点一般根据IP进行HASH
数据就使用唯一ID哈希
将节点与数据都映射到圆环上后,数据位置顺时针找到的第一个存储节点,就是它的存储位置。

在这里插入图片描述

当我们进行存储节点扩展后, 将新节点E哈希映射到环
只需要将受影响的数据进行迁移就可以了
扩展性提升和稳定性,节点的加入和退出不会造成大规模迁移。
在这里插入图片描述

但本质上,hash分布式一种静态的分片方式,必须提前设定分片数
且无法避免单一热点问题,最终热点数据请求,无论如何哈希,都会落在同一个节点上。

范围分片

可以结合业务逻辑,以商品类别作为分片,如果商品火热的,还可以再细分一级二级三级类目.

最后,还可以数据源分片.
简单来讲就是单拎出一个系统,专门存储商品与库的映射关系。
每次操作数据前,需要请求这个数据元系统,获取数据存储的位置信息
但不仅仅只有数据分片信息,还包括数据量、读写 QPS 和分片副本的健康状态等。
已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 撸撸猫 设计师:C马雯娟 返回首页