提到Erasure Code(EC,纠删码),很多做存储相关工作的朋友第一反应是:知道分布式存储是用来省空间的,但真要解释清楚,脑子里只剩一个“数学很复杂”的印象。我第一次真正搞懂EC,不是看论文,而是在一次扩容方案评审会上被老板反问:“你说用EC能把可用容量从40多TB干到90多TB,如果真那么神,为什么我们核心数据库还是用3副本?”那次我没答上来。后来把副本、RAID5、Reed-Solomon这些概念重新捋了一遍,才意识到EC解决的是一个非常朴素的问题:在“允许坏几块盘”和“每个TB要花多少硬盘钱”之间,怎么取得平衡。这篇先不碰复杂的数学推导,只把EC的来龙去脉、核心思想、适用边界讲清楚。如果你是存储小白,读完之后至少能听懂别人说的“4+2、6+3、重建成本”是什么意思;如果你已经接触过EC,也可以当一次系统性的回顾。
1. 先看一个扎心的事实:128TB的盘,为什么只敢放42TB数据
1.1 副本策略的“笨重”
如果你用过任何分布式存储系统,一定见过“3副本”这个词。它的规则很简单:一份数据写3份,分别放到3台不同机器上。这样任意1台机器坏了,数据还在;哪怕同时坏2台,只要第3份还在,也能继续服务。这个设计太直观了,所以很多系统默认就是3副本。但代价也一样直观:你买了3块盘,真正能存业务数据的只有1块盘。
8块16TB的硬盘,裸容量是128TB,按3副本去规划,可用容量只有128/3≈42.7TB。这还没算文件系统开销、预留空间和故障域限制,实际能用的只会更少。更要命的是,数据量每年增长得很快,42TB放到三年后,可能只够装下数据库几个月的归档量。这时候你就需要认真考虑:能不能用一种更省空间的冗余方式,让“可用容量”这个指标好看一点?
1.2 EC的第一印象:用校验换空间
EC的思路和副本完全不一样。它不把整份数据复制多份,而是把数据打散成若干块,再额外生成一些“校验块”混在一起。以6+2配置为例:原始数据切成6个数据块,再算出2个校验块,一共8个块分散到不同盘上。这8个块只要丢掉任意2个,剩下6个块就能把原始数据完整算回来。
这样算下来,8块16TB盘做6+2,能用的容量是128×6/8=96TB,是3副本
