知识卡片
分区的目标是均匀分布负载偏斜与热点是核心风险
内容
数据量或吞吐量大到单机扛不住时,光靠[[复制的三种主流架构单主多主无主及其复杂度 权衡]]的多副本还不够,需要把数据切成分区(也叫分片),每条记录只属于一个分区, 每个分区分布到不同节点上——这样大数据集能分布到多块磁盘,查询负载能分散到多个 处理器,理论上10个节点能处理10倍数据量和10倍单机读写吞吐量。这个理论收益完全 取决于一个前提:分区是否公平——如果某些分区的数据量或查询量明显多于其他分区,这 种不均衡叫偏斜,极端情况下全部负载压在一个分区上、其余节点空闲,这个过载的分区 叫热点,此时加节点根本没用,因为新节点分不到任何负载。避免热点最简单粗暴的办法是 把记录随机分配到节点,这样数据确实均匀了,但代价是读取时完全不知道目标数据在哪个 节点,只能并行查询所有节点——对于总是按主键访问的键值模型,这个代价没必要付: 可以利用键本身设计分区规则,让”某个键在哪个分区”变得可推导,这是本章后续键范围 分区和哈希分区两种主流方法的共同出发点。
参考来源
- 位置:《数据密集型应用系统设计》第六章《分区》"键值数据的分区"(源文件:
_epub-src/ch6_split_002.html)
- 结论依据:原文说明分区目标是均匀分布数据和查询负载、理论上10个节点能处理10倍
负载,若分区不公平则称为偏斜、导致热点,随机分配记录能避免偏斜但需要并行查询
所有节点才能读取,直接支撑本卡片结论。
- 原始内容:分区目标是将数据和查询负载均匀分布在各个节点上……如果分区是不公平的
……我们称之为偏斜……不均衡导致的高负载的分区被称为热点……避免热点最简单的方法
是将记录随机分配给节点……当你试图读取一个特定的值时,你无法知道它在哪个节点上,
所以你必须并行地查询所有的节点。