第 207 题:分片策略的一致性哈希,虚拟节点与负载均衡?
题目
分片策略的一致性哈希,虚拟节点与负载均衡?
完整讲解
一、分片与一致性哈希
分片:将数据按 key 分布到多个节点,实现水平扩展。普通取模:node = hash(key) % N,节点数 N 变化时大量 key 会迁移,抖动大。一致性哈希:将 hash 空间组织成环,key 与节点都映射到环上,key 归属「顺时针最近节点」;增删节点时仅影响相邻一段,迁移量小。
二、虚拟节点(Virtual Node / VNode)
- 问题:一致性哈希在节点少时,各节点在环上区间可能不均匀,负载倾斜。
- 虚拟节点:每个物理节点对应多个虚拟节点(如 100~200 个),虚拟节点均匀分布在环上;key 先映射到虚拟节点再落到物理节点。物理节点数不变时,虚拟节点数越多,负载越均匀;扩缩容时按虚拟节点迁移,仍保持一致性哈希的迁移局部性。
- 实现:
hash(key) 找环上位置 → 找下一个虚拟节点 → 查虚拟节点到物理节点映射;扩缩容时只调整虚拟节点与物理节点的对应关系。
三、负载均衡
- 目标:各节点数据量与 QPS 尽量均衡。虚拟节点可缓解数据均衡;QPS 可能仍因热点 key 不均,可结合副本与路由(热点多副本、读分散)、监控与 rebalance(定期按负载迁移虚拟节点或 key 范围)进一步均衡。
- 热点:单 key 过热时,单节点无法扛;需本地缓存、多副本、或业务层拆分 key(如 key 加后缀打散)。
面试要点
- 能说清分片与一致性哈希的目的;能解释一致性哈希环与「顺时针最近节点」、为何扩缩容迁移小。
- 能说明虚拟节点的作用(负载均匀)、实现思路(多 vnode 映射到物理节点);能简述负载均衡与热点处理。
- 能对比与取模的差异(迁移量);能提及 rebalance 与监控。
记忆要点
- 一致性哈希=环+顺时针最近节点,扩缩容迁移小;虚拟节点=多 vnode 均匀环上,负载更均衡。
- 负载均衡=虚拟节点+副本/路由;热点=多副本、缓存、key 打散。