Reed-Solomon Erasure Code

EC的定义:erasure code是一种技术,它可以将n份原始数据,增加m份数据(n > m),并能通过n+m份中的任意n份数据,还原为原始数据。定义中包含了encode和decode两个过程,将原始
的n份数据变为n+m份是encode,之后这n+m份数据可存放在不同的device上,如果有任意小于m份的数据失效,仍然能通过剩下的数据还原出来。

EC主要是通过纠删码算法将原始的数据进行编码得到冗余,并将数据和冗余一并存储起来,以达到容错的目的。

在数据存储领域, 一般有多副本,EC两种数据冗余技术,EC的话,可以很大程度上增加我们磁盘的利用率。
例如:

1
2
3
4
5
多副本
1个副本,假设我们存储2个备份副本,那么总共就3个副本了,10个副本数据就是30个副本要存储,
这样我们同一个数据也只是能容忍丢掉3次。
EC
1个副本,10个副本数据我们如果n=10, m=4, 只需要14个副本。这样我们可以容忍你丢掉任意3个副本。

在直播,游戏领域,采用EC可以增加我们的抗丢包能力。

EC原理不复杂,理解的话需要一些矩阵的知识,例如

  1. 逆矩阵。
  2. 单位矩阵。
  3. 矩阵*逆矩阵= 单位矩阵。
  4. 任何一个矩阵乘以单位矩阵都不变。

详细原理和代码可以参考以下资料。

Backblaze blog.
Forward error correction
Reed-Solomon Erasure Coding in Go