对象存储(如 S3)中常用的一种提高耐用性的技术叫做纠删码(Erasure Coding),可以提高数据耐久性并减少存储开销。即使发生硬件故障,也能保证数据的可用性和完整性。让我们来看看它是如何工作的。
纠删码处理数据持久性的方式与复制不同。它将数据分割成小块(放在不同的服务器上),并创建奇偶校验以实现冗余。发生故障时,我们可以使用分块数据和奇偶校验来重建数据。让我们来看一个具体的例子(4 + 2 纠删码)。
图片
1 -数据被分成四个偶数大小的数据块 d1、d2、d3 和 d4。
2 -数学公式用于计算奇偶校验 p1 和 p2。举一个简化得多的例子:p1 = d1 + 2d2 - d3 + 4d4 和 p2 = -d1 + 5d2 + d3 - 3d4。
3 - 由于节点崩溃,数据 d3 和 d4 丢失。
4 - 利用已知的 d1、d2、p1 和 p2 值,用数学公式重建丢失的数据 d3 和 d4。
01 纠删码的优势
存储开销更低
相比复制(通常需要三份完整副本),纠删码只需略高于原始数据的存储量。
每两块数据需要一个奇偶校验块,因此存储开销为 50%。而在 3 副本复制中,存储开销为 200%。见下图。
图片
高耐久性
假设节点的年故障率为 0.81%。根据 Backblaze 的计算,纠删码可实现 11% 的耐用性,而 3 份复制可实现 6% 的耐用性。
效率平衡
纠删码在存储效率和数据恢复能力之间实现了良好的平衡,非常适合大规模存储系统。
02 Amazon S3 的应用示例
Amazon S3 在其 Glacier Deep Archive 存储类别中使用纠删码。此类别注重耐久性,同时希望最大程度降低存储成本。而 Standard 存储类别则更多依赖复制,优先考虑数据访问的速度而非成本。