知识卡片
EC不支持随机overwrite的结构性原因
内容
Ceph 的纠删码 pool 目前只支持创建对象、删除对象、整体重写(write full)、以及起始偏移按 stripe_width 对齐的追加写,不支持任意位置的随机覆写(overwrite)。根源在于编码和解码都必须以整个 stripe(chunk_size × stripe_size)为单位计算——只改 stripe 内一小段数据也必须先读出整个 stripe 缺失的部分才能重新算出校验块,随机小写的开销会被放大到整个 stripe 宽度;再加上要支持覆写就必须同时解决 [[EC回滚机制应对全局断电导致的部分写|回滚机制]]的复杂度。这解释了为什么 [[纠删码的空间效率与应用限制|纠删码不适合直接承载 RBD 块存储]]这种高频随机写场景——不是纠删码本身做不到,而是要做到的代价现阶段划不来。
参考来源
《Ceph源码分析》第8章《Ceph纠删码》