大家好,我是砸锅。一个摸鱼八年的后端开发。熟悉 Go、Lua。今天和大家一起学习分布式技术😊
开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 23 天,点击查看活动详情
分片策略
分片策略有三种:水平分片、垂直分片、混合分片
水平分片和垂直分片是通过数据切分的操作方向区分的,混合分片是它们的组合体
水平分片
水平分片算法从流量角度来看,是负载均衡。从数据存储角度来看,是水平分片
水平分片算法有两个关键因素:一个是如何对数据进行划分,另一个是分片是否支持动态分裂和合并,可以理解为数据平衡
数据划分要解决的问题就是将整个数据空间划分为多个分片空间,主要是两种方式:基于模运算划分和基于范围划分。基于范围划分主要是给每一个分片,分配一个确定的数据范围,在这个数据范围里的所有数据都是属于这个分片的
如果是基于关键词划分的话,分片之后数据仍然保留了关键词的顺序,可以进行区间查询。但是容易造成数据分布不均匀和访问热度不均匀。例如按照省级行政单位划分,西藏和广东的分片数据就很大差异,访问的热度也不均匀
基于关键词的 Hash 值划分就可以解决这个问题,处理数据倾斜并让它均匀分布,但是也失去了基于关键词的顺序性,不能方便进行区间查询
水平分片的数据平衡方式分为静态分片和动态分片。静态分片是指在系统设计之初,数据分片的数目和区间就预估好了。而动态分片则是可以在运行时,根据分片的负载和容量做调整。动态分片与基于关键词划分的组合方式可以避免了基于关键词的划分问题,还保留了数据基于关键词有序的优点
动态分片存在冷启动的问题,当一个基于动态分片的存储系统启动时,通常是由一个分片开始,当数据量不断增长之后,再动态进行分裂。第一次分裂之前,所有读写请求都是由一个分片处理,其他节点则处于空闲状态。所以可以在动态分片冷启动时,预先分裂多个分片来缓解
此文章为2月Day19学习笔记,内容来源于极客时间《深入浅出分布式技术原理》