这是我参与「第四届青训营 」笔记创作活动的第32天
擦除编码类似于基于 RAID 的奇偶校验编码,但更通用和更强大。定义纠删码时,需要指定一个k和m变量。m是编码的分片,k数是重新创建原始数据所需的分片数。因此k必须小于m,且通常不等于。纠删码可以让任何k、m片都可以重新创建原始数据。例如,纠删码方案k=8和m=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 个指令列表,每个指令列表将在每个存储节点中执行。