EC的定义:erasure code是一种技术,它可以将n份原始数据,增加m份数据(n > m),并能通过n+m份中的任意n份数据,还原为原始数据。定义中包含了encode和decode两个过程,将原始
的n份数据变为n+m份是encode,之后这n+m份数据可存放在不同的device上,如果有任意小于m份的数据失效,仍然能通过剩下的数据还原出来。
EC主要是通过纠删码算法将原始的数据进行编码得到冗余,并将数据和冗余一并存储起来,以达到容错的目的。
在数据存储领域, 一般有多副本,EC两种数据冗余技术,EC的话,可以很大程度上增加我们磁盘的利用率。
例如:
1 | 多副本 |
在直播,游戏领域,采用EC可以增加我们的抗丢包能力。
EC原理不复杂,理解的话需要一些矩阵的知识,例如
- 逆矩阵。
- 单位矩阵。
- 矩阵*逆矩阵= 单位矩阵。
- 任何一个矩阵乘以单位矩阵都不变。
详细原理和代码可以参考以下资料。
Backblaze blog.
Forward error correction
Reed-Solomon Erasure Coding in Go