知识卡片

Swift环通过Partition间接层最小化数据迁移

专业/工作 · 556

内容

Swift用一致性哈希把对象名映射到一个固定大小的虚拟空间(环)上,但并不直接把对象映射到具体存储节点,而是在中间插入一层Partition:对象到Partition的映射由哈希算法和固定的位移操作决定,一旦Partition总数确定就永远不再改变;Partition到具体设备的映射则记录在一张可以随时修改的设备查询表里。增减存储节点时,只需要重新平衡Partition到设备的映射表,对象到Partition这一层完全不受影响,把迁移成本压缩到最小。发散:这个”固定的逻辑分片层+可变的物理映射层”结构和Ceph的Object→PG→OSD映射是同一种设计哲学——只要把”分片规则”和”分片放在哪”拆成两层独立变量,前者提供稳定性,后者提供灵活性,几乎所有需要支持在线扩缩容的分布式存储系统都会收敛到这个模式。

参考来源

《Linux开源存储全栈详解从Ceph到容器存储》第8章《OpenStack存储》