副本和纠删码之间并不存在谁占据绝对优势,而是两者在不同的场景有各自的优缺点。
- 原理比较
副本技术的原理比较简单,2 副本为例,实际数据完整写入两份;3 副本就将实际数据完整地写入 3 份。
EC 的原理与 RAID 5/6 的原理类似,将实际数据以条带的方式写入,条带由数据条带与校验条带组成,由于 EC 不需要完整写入真实数据的副本,而是通过引入校验数据块保障数据冗余,从而获得更多的存储空间。EC 相对 RAID 技术更加灵活,条带由 K 个数据块和 M 个校验数据块组成,而且 K 和 M 是可以调整的。 - 可靠性对比
- EC 配置 1 个校验位(FT=1) 与 2 副本(RF=2) 的可靠性相当,允许任意 1 个节点或者 1个数据块损坏
- EC 配置 2个校验位(FT=2) 与 3 副本(RF=3) 的可靠性相当,允许任意 2 个节点或者2 个数据块损坏
- 容量空间对比
数据恢复对性能影响
- 2 副本下,1 个节点或者数据块故障,数据恢复需要从一个副本读取一次,然后写入一次进行恢复副本,影响 1 个节点的读取性能。
- EC 设置 4/1 情况下,1 个节点或者数据块故障,数据恢复需要读取 3 个数据块和 1 个校验,通过运算后写入一次进行数据恢复,影响 4 个节点的读取性能。
- 写惩罚
- 2 副本下,某个节点的 1 次数据写入,实际需要 2 个节点参与(写入 2 次),写惩罚为 2
- EC 设置 4/1 情况下,1 次数据写入,实际需要至少 2 个节点参与,其中读取 2 次(读取数据,读取校验),写入 2 次(写入数据,写入校验),写惩罚为 4
- CPU 开销
- 2 副本/ 3 副本是基于数据完整复制,没有涉及额外的运算,对 CPU 开销较低。
- EC 由于读写都需要计算校验值,需要额外的 CPU 资源开销