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分别分发到对应实例上执行,再合并结果。其中涉及语句的拆分和重生成。
跨实例的原子读写请求:不支持跨节点读写依赖的原子请求。