December 9, 2023
ZH

引入纠删码大幅提升Swarm数据保护能力

引入纠删码大幅提升 Swarm 数据保护能力

Swarm 研发团队很高兴地宣布,他们正在积极推进将纠删码(Erasure coding 或 Erasure code)整合到 Swarm 平台中,以增强存储在 Swarm 网络上数据的稳定性和可靠性。引入纠删码将为数据提供强大的保护机制,确保即使在某些节点或整个网络邻域离线的情况下,数据仍能被可靠下载。本文将深入介绍纠删码的背景、发展历史、工作原理及其为 Swarm 用户带来的好处。

在混乱世界中保护数据的安全

对于计算机而言,世界本身充满了各种危险。没有任何数据能百分之百地避免噪音干扰失真的影响。我们甚至需要对诸如宇宙射线等看似遥远的风险保持警惕。这些影响有可能导致比特位从 0 变为 1 或者倒过来,或是导致比特位的误删或误增,这将可能引发现实世界中一系列非常严重的问题,尤其是在依赖计算机保障人们安全的领域,如飞机软件、医疗设备、轨道交通控制软件等。当然,这些影响也可能在更日常的场景中对人们造成困扰,比如影响你的学期论文、电脑游戏数据或照片的保存。但你可能已经注意到,在日常使用电脑和智能手机时,你的数据并非不断遭受破坏,那么这是如何做到的呢?答案在于数据复制(Data replication)和纠错码(Error correction codes)技术。而纠删码便是纠错码中的一种典型情况。

数据复制 - 数据保护的第一步

数据复制是一种最直接、最显而易见的数据保护方式。其核心理念非常简单,就是创建数据的副本,并将这些副本存储在不同的地点。如果其中一个副本因损坏或丢失而变得无法使用,我们可以从其他未受损的副本中复制一份新的。这种方法在数据保护方面确实非常有效,但也存在一些局限性。首先,这种方法成本较高,因为它需要存储数据的多份完整副本。更重要的是,这种方法并没有内置的错误检测和校正机制。即便你能存储多份数据副本,如果部分数据发生了损坏,在面对同一数据的两个不同版本时,我们无法轻易判断哪个版本是正确的,哪个版本遭到了破坏。

纠错码 - 数据安全的守护者

除了数据复制之外,纠错码是另一种强大的保护数据安全的技术。纠错码的问世已有数十年,最早由数学家Richard Hamming在 20 世纪 50 年代提出,其发明的汉明码(Hamming codes)至今仍被使用。汉明码基于奇偶校验位(Parity bit)的概念,即在二进制代码串中添加一个额外的位来检测该串中是否存在错误。对于每一行二进制代码,都会加入一个值为 0 或 1 的校验位,以使得该行所有位的数值 1 的总和始终保持为奇数或偶数(可以根据需要选择)。如果选择使其总和始终为奇数,则称为奇校验;如果为偶数,则称为偶校验。通过这种方式,汉明码能有效地检测并纠正数据中的错误,从而提高数据的安全性和完整性。

在发送数据时,我们将整组数据分割成等长的比特串,并为每个比特串添加一个奇偶校验位。接着,我们检查每个比特串,确保它们要么全为偶数,要么全为奇数。如果不符合这个规则,我们就能确定数据传输过程中发生了错误。

尽管这种方法在检测单个比特串错误方面表现出色,但它也存在局限性。首先,它无法精确指出错误发生的具体位置,只能告诉我们某个比特串中是否存在错误。其次,如果发生的错误不止一个,并且错误的数量是偶数,那么我们就无法察觉到错误的存在,因为两次错误会使数据回到它的原始奇偶状态。

与使用单个奇偶校验位处理一个比特串不同,汉明码通过结合多个奇偶校验位的方式,能够准确地定位比特错误的具体位置。然而,这种方法在处理多个比特错误时依然有其局限性。

尽管与后续几年中发展起来的纠错方法相比,这种方法可能看起来较为原始,但它以其强大、简洁和成本低(只需添加少量额外比特位)的特点,至今仍被使用。

多年来,人们发展了多种不同形式的纠错方法。但通常这些方法都遵循一个相似的基本模式:将数据分解成小片段,并为每个原始数据片段添加少量额外的“冗余”数据。这样的数据结构使它们能够用于检测和/或纠正错误。

纠删码 - 更先进的纠错技术

纠删码是一种典型的纠错代码,用于确保数据即便部分丢失或损坏也能安全存储,保持数据的完整性。纠删码是一种复杂而强大的数据保护方法,特别适合于像 Swarm 这样的分布式存储网络。

纠删码的工作原理与汉明码类似,汉明码将数据分割成比特串,然后添加额外的奇偶校验位以增强数据的安全性。而纠删码则是将原始数据分割成多个“数据块(Chunk)”,并在这些数据块中加入额外的数据进行编码,从而提高对源数据的保护能力。

纠删码相对于汉明码和其他类似技术的显著优势在于,即使部分编码块丢失,只要剩余的数据块数量足够,仍然可以完整地重构出原始源数据的全部内容!

工作原理

在纠删码中,数据首先被分割成 N 个数据块。以 Swarm 为例,数据的分割通过DISC 系统完成,该系统将数据分割成 4KB 的片段。然后,增加额外的 K 个数据块,与原始的 N 个数据块相结合,我们最终得到了 N+K 个数据块。接下来,这些 N+K 个数据块的数据通过编码器进行重排,重排方式为:只要你能获取到这 N+K 个数据块中的至少 N 个块(换言之,最多丢失 K 个块),你就能完整地重构整个源数据。这正是“纠删码”之名的由来,因为它能够容忍最多 K 个块的擦除。

(编码和解码的过程涉及一些较为复杂的数学原理,在这篇关于纠删码的基本介绍中不会深入探讨。但是,如果你想要对这些过程有一个相对清晰的了解,可以查阅相关文章。对于更资深的读者来说,可以参考维基百科上关于纠删码的页面。需要指出的是,在相关链接的文章以及其他很多关于纠删码的文章中,对于 N 和 K 的定义与本文中有所不同。)

让我们通过一个例子来理解如何通过该方法存储一个 8KB 数字图像。

在这个例子中,假设我们将 N 值设定为 2,K 值设为 1。我们必须将 8KB 的图像文件分割成 2 个块(N),并额外添加 1 个块(K)。然后,在加入了重构原始数据所需的冗余数据后,源数据在这 3 个块中进行重排。每个块被编码为源数据大小的 1/2(1/N)。

Erasure Code 01

现在,我们总共存储了 12KB 的数据。只要我们能够获得这 3 个编码块中的任意 2 个,我们就可以使用这些块来解码回原始的源文件。

然而,由于我们只额外增加了 1 个块(K),因此我们只能容忍丢失一个块。如果我们希望增强对数据的保护,可以调整参数设置。

例如,我们可以将 K 值改为 4。在这种情况下,我们可以容忍最多 4 个块的丢失,而不仅仅是 1 个!

Erasure Code 02

值得注意的是,只要我们至少还保留着 2 个块(N),具体丢失哪些块并不重要。即使其中任意 4 个块被擦除,我们仍然能够重构出原始数据。只有当我们丢失超过 4 个块(K)时,原始数据才会真正丢失。

Erasure Code 03

纠删码的优势

更经济、更安全

纠删码允许我们在使用更少的磁盘空间的同时,实现与单纯数据复制相同甚至更高程度的数据保护。让我们通过一个具体的例子来深入了解为什么。假设我们使用一个 N=2,K=2 的纠删码方案来保护一个 8KB 的文件:

Erasure Code 04

在这个例子中,原始文件为 8KB,编码后的磁盘空间为 16KB,我们可以容忍最多两个数据块的擦除。相比之下,在数据复制方案中,如果我们只能使用相同大小的磁盘空间,那么我们只能存储两份原始数据,并且只能容忍丢失一份数据副本。

容忍整个块丢失,不同于某些纠错码(如汉明码)

像汉明码这样的数据保护方案虽然能够在数据块内部检测到错误,但它本身无法防止整个数据块的丢失。而纠删码却可以容忍指定数量的数据块被完全擦除。虽然像汉明码这类的纠错码在许多应用场景中依然采用,但对于像 Swarm 这样的场景来说,使用这样的校正码是远远不够的。

这对 Swarm 意味着什么?

纠删码:Swarm 独特设计的完美数据保护方案

考虑到 Swarm 的 DISC 系统本身已将文件分割成多个数据块并将其分散到一个由众多节点构成的网络中,纠删码成为了一种非常合适的数据保护方案。Swarm 中已经内置了一定程度的数据复制能力,因为每个邻域内的节点都会保留它们所负责的数据块副本。但是,如果整个邻域离线,那么仍然存在原始数据可能丢失的风险。纠删码针对这一风险提供了解决方案,确保即便整个邻域离线,原始数据依然可以还原。

高度的数据保护为 Swarm 打开了新的应用场景

总体而言,纠删码是一种经济高效的方法,能够显著提升存储于 Swarm 上数据的持久性。Swarm 中引入纠删码,标志着 Swarm 向成为一个真正永续前行的去中心化存储网络迈出了重要一步。纠删码作为一种对抗意外和偶发事件(如数据中心大规模中断或针对 Swarm 网络中特定邻域的蓄意攻击)的保障手段,这种额外的保护机制使 Swarm 对于企业级用户和其他需要高度数据保护级别的用户更具吸引力。

结语

Swarm 上的纠删码开发工作正稳步推进。我们的研发团队正在全力以赴,以尽快推出这一新功能。研发团队计划不久后发布一篇技术论文,概述 Swarm 使用纠删码的具体方法。请关注我们的社交媒体,获取相关的最新消息和进展。敬请期待!

参考资料

Follow Swarm community news on X / Twitter.
Discussions about Swarm can be found on Reddit.
All tech support and other channels have moved to Discord!
Please feel free to reach out via info@ethswarm.org
Join the newsletter! .

Read more…

By clicking on Subscribe you consent to usage of your given e-mail address for receiving communication and news about the Swarm project and news. Data will be controlled and processed by Swarm Foundation.