知识卡片
纠删码的k+m结构与容量权衡
内容
纠删码把原始数据切成 k 个数据分片,再算出 m 个校验分片,一共 n=k+m 片分散存到不同 OSD;只要损坏的分片数不超过 m,就能靠剩下的分片计算恢复出全部原始数据。它和副本机制解决的是同一个可靠性问题,但容量利用率完全不同:三副本的有效容量只有 33.33%(存 1 份数据要占 3 份空间),k=2/m=1 时有效容量升到 66.66%,k=5/m=2 时能到 71.43%,k、m 的比例越大,空间利用率越高。代价是纠删码的编解码要消耗大量计算和网络带宽——尤其是某个 OSD 故障需要重建数据时,往往要读取其余所有存活分片才能算出丢失的那部分,恢复成本远高于副本机制”直接拷贝”的方式,且纠删码池天生不支持原子写这类特性。发散:k、m 的选择本身就是”省空间”和”省恢复代价/写入代价”之间的一条连续光谱,副本机制只是这条光谱上 m=k×(副本数-1) 的一个极端特例。
参考来源
《Ceph分布式存储实战》第11章《缓冲池与纠删码》