8.1 水平拆分(sharding)

解决数据量和访问量增加对单节点造成的性能压力,通常引入水平拆分机制,

将数据存储和对数据访问分散到不同节点上分别处理。各个节点间相互独立。内部拆分的多借点对外部服务透明,通过数据分布和路由请求的配合,做到数据存放和数据访问对水平拆分的适配。

8.1.1 数据分布

  • hash映射,将不可控的业务值域key映射到有限值域(hash值),且映射均匀,再将有限的均匀分布的hash值枚举地映射到Redis实例上。
  • 范围映射,选择key本身做为数据分布的条件,每个数据节点存放的key的值域是连续一段范围。
  • hash和范围结合,典型的方式就是一致性hash,首先对key进行hash运算,得到值域有限的hash值,再对hash值做范围映射,确定该key对应的业务数据存放的具体事例。

8.1.2 请求路由

根据请求中设计的Key,用对应的数据分布算法得出数据位于哪个实例,再将请求路由至该实例,这个过程叫做请求路由。

需要关注数据跨实例问题:

只读的跨实例请求:需要将请求中的多个key分别分发到对应实例上执行,再合并结果。其中涉及语句的拆分和重生成。

跨实例的原子读写请求:不支持跨节点读写依赖的原子请求。

 

posted @ 2020-05-04 23:59  vvf  阅读(238)  评论(0编辑  收藏  举报