组队大项目(4)EC纠删码深入篇 | 青训营笔记

219 阅读2分钟

这是我参与「第四届青训营 」笔记创作活动的第32天

擦除编码类似于基于 RAID 的奇偶校验编码,但更通用和更强大。定义纠删码时,需要指定一个km变量。m是编码的分片,k数是重新创建原始数据所需的分片数。因此k必须小于m,且通常不等于。纠删码可以让任何km片都可以重新创建原始数据。例如,纠删码方案k=8m=12意味着任何四个已编码分片都可能丢失,而原始数据仍然可以从有效的剩余八个分片构建。

目前考虑在DataNode中实现的基本操作有

  • STORE:读取网络流并将其存储在具有特定 ID 的本地文件系统中。
  • RETRIEVE:提供来自本地文件系统的存储块。
  • CODING:执行编码操作。编码操作的 ID 及其实现存储在DataNodeConfig.coding_mod_name中。将编码结果作为网络流返回。

编码操作

DataNode执行 CODING 操作时,它会从DataNodeConfig.coding_mod_name中检索操作列表,并为数据流中的所有缓冲区顺序执行它们。操作列表是以下各项的组合:

  • LOAD:加载某个 ID 下的文件或网络缓冲区。从网络加载时,它可以加载远程编码操作的结果。
  • WRITE:将缓冲区写入文件。
  • IADD:执行两个缓冲区的就地相加(异或操作)。
  • MULT:执行两个缓冲区的就地乘法(伽罗瓦算术)。
  • MULADD:将两个缓冲区相乘并将结果添加到其中一个缓冲区(伽罗瓦算术)。

RapidRAID 代码

实现了流水线纠删码方案的实现,该方案对 11 个复制的数据块进行编码以生成 16 个奇偶校验块。此 RapidRAID 实施是一个 (16,11) 擦除代码,定义为一组 16 个指令列表,每个指令列表将在每个存储节点中执行。