system-design-notes:纠删码(Erasure Coding)vs 多副本复制,存储可靠性方案终极对比
2026/9/17 12:08:45 网站建设 项目流程

system-design-notes:纠删码(Erasure Coding)vs 多副本复制,存储可靠性方案终极对比

【免费下载链接】system-design-notesNotes of the book System Desgin Interview - An Insider's Guide项目地址: https://gitcode.com/GitHub_Trending/sy/system-design-notes

system-design-notes 是一套系统设计与面试笔记仓库,其 S3 对象存储一章深入对比了两种主流存储可靠性方案:纠删码(Erasure Coding)多副本复制(3 副本)。本文提炼核心结论:纠删码可将存储成本降低约 50%,多副本读写更快,如何根据成本与性能权衡选型,是存储可靠性设计的核心。

背景:对象存储为什么执着于可靠性 🗄️

对象存储(如 Amazon S3)牺牲部分性能,换取超高持久性、海量扩展和低成本,主要服务于归档、备份等"冷数据"场景。以 S3 为例,其标准-低频存储类承诺的持久性高达99.999999999%(11 个 9),且要求即使整个可用区被摧毁数据也不丢失。

要理解纠删码 vs 多副本,先了解三类存储的定位差异:

![对象存储、文件存储与块存储对比](https://raw.gitcode.com/GitHub_Trending/sy/system-design-notes/raw/9d8388721e7231442763ad37398b8d82224aa68f/24. S3-like Object Storage/images/storage-comparison.png?utm_source=gitcode_repo_files)

对象存储是三者中对可靠性要求最高、对性能最宽容的一类——这正是纠删码大放异彩的领域。

多副本复制:最简单直接的可靠性方案

多副本复制(Replication)的原理非常直观:把同一份数据完整复制到多个节点。以 3 副本为例,一份数据分布在 3 台机器上,任意 2 台挂掉,数据依然安全。

但有一个关键细节:副本必须分布在不同故障域(Failure Domain)——不同的机架、不同的可用区(AZ)。因为一次断电或网络故障,可能同时干掉同一机架内的多台机器。仓库中的设计示例就是三副本分别落在三个独立供电、独立网络的可用区:

![多副本跨可用区复制与故障域隔离设计](https://raw.gitcode.com/GitHub_Trending/sy/system-design-notes/raw/9d8388721e7231442763ad37398b8d82224aa68f/24. S3-like Object Storage/images/failure-domain-isolation.png?utm_source=gitcode_repo_files)

据仓库估算,假设单块硬盘年故障率为 0.81%,做 3 副本即可达到 6 个 9 的数据持久性。

纠删码原理:数据切片 + 校验块 🧩

纠删码的思路完全不同:不把数据完整复制,而是切成若干数据块,再额外计算若干校验块(Parity)

以 4+2 方案为例:一份数据拆成 d1~d4 四个数据块,再算出 p1、p2 两个校验块,共 6 块分布存储。它的核心能力是——任意丢失 2 块,都能用剩下的 4 块数学还原

![纠删码四步流程:切分数据、计算校验、节点故障、数据重建](https://raw.gitcode.com/GitHub_Trending/sy/system-design-notes/raw/9d8388721e7231442763ad37398b8d82224aa68f/24. S3-like Object Storage/images/erasure-coding.png?utm_source=gitcode_repo_files)

整个流程分四步:① 把对象拆成等大小的数据块 d1~d4;② 计算校验块 p1、p2;③ 假设有 2 个节点宕机(d3、d4 丢失);④ 利用剩余的 d1、d2 和 p1、p2 重建出 d3、d4。

把每个数据块想象成一台数据节点:挂掉 2 台,剩下 4 台照样能把数据完整算回来。

同样 1GB 文件,存储成本差多少?💰

仓库用了一个非常直观的对比:存储一份 1GB 的对象——

![1GB文件的多副本复制(3节点)与纠删码4+2(6节点)存储开销对比](https://raw.gitcode.com/GitHub_Trending/sy/system-design-notes/raw/9d8388721e7231442763ad37398b8d82224aa68f/24. S3-like Object Storage/images/erasure-coding-vs-replication.png?utm_source=gitcode_repo_files)

对比维度多副本复制(3 副本)纠删码(4+2)
实际占用3GB(每份 1GB)1.5GB(每块 0.25GB)
存储开销200%50%
分布节点数3 个6 个
可容忍节点故障2 个2 个
读取性能快:任取一个完整副本即可慢:需从多处聚合数据块
可靠性约 6 个 9可达 11 个 9
实现难度简单复杂(校验计算 + 数据重建)

可以看到:同等容忍故障数下,纠删码的存储开销只有多副本的一半,代价是读写路径变慢(数据路由服务必须从多个位置收集分片)、计算开销增加。

生产级玩法:8+4 方案跨故障域分布

仓库给出的生产级方案是8+4 纠删码:8 个数据块 + 4 个校验块,共 12 块分布在 12 个故障域上,任意 4 个故障域失效都能恢复,可靠性最大化:

![8+4纠删码数据块与校验块跨12个故障域分布方案](https://raw.gitcode.com/GitHub_Trending/sy/system-design-notes/raw/9d8388721e7231442763ad37398b8d82224aa68f/24. S3-like Object Storage/images/erasure-coding-across-failure-domains.png?utm_source=gitcode_repo_files)

别忽视另一半:数据校验(Checksum)⚠️

磁盘整体坏掉好检测,但部分内存位"静默损坏"就麻烦了。仓库的解法是为每个文件、每个对象都存储校验和(Checksum)

![本地文件系统的数据校验和存储结构:只读文件与读写文件各存Checksum](https://raw.gitcode.com/GitHub_Trending/sy/system-design-notes/raw/9d8388721e7231442763ad37398b8d82224aa68f/24. S3-like Object Storage/images/checksums-for-correctness.png?utm_source=gitcode_repo_files)

注意:如果是 8+4 纠删码,重建时需要逐个取回 8 个数据块并分别校验每一块的 checksum,才能确保还原结果正确。这也是纠删码"更费计算"的一个具体体现。

选型速查表:你的场景该用哪个?✅

你的场景推荐方案理由
低延迟、高频访问的热数据多副本复制单副本完整可读,延迟最低
海量冷数据、归档、备份纠删码存储成本直降 50%,可靠性反而更高
混合负载(如对象存储)分层混合热数据多副本,冷数据转纠删码(按存储分层自动迁移)

一句话总结仓库的结论:复制对延迟敏感型应用更友好;纠删码在存储成本效率和数据持久性上占优,但实现难度大得多。真实系统往往不是二选一,而是按数据温度混合使用。

延伸阅读 📚

  • 本章完整设计(上传/下载流程、分片上传、垃圾回收、元数据分片):24. S3-like Object Storage/README.md
  • 纠删码 vs 多副本核心对比段落:README.md 持久性设计章节
  • 校验和与数据正确性验证:README.md 校验和章节
  • 本章全部配图目录:24. S3-like Object Storage/images/

【免费下载链接】system-design-notesNotes of the book System Desgin Interview - An Insider's Guide项目地址: https://gitcode.com/GitHub_Trending/sy/system-design-notes

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询