Beehive:用于修复分布式存储系统中多个故障的纠删码

摘要:分布式存储系统越来越多地部署纠删码(例如 Reed-Solomon 码)以实现容错。尽管 Reed-Solomon 代码需要的存储空间比复制少得多,但在通过重建修复不可用数据时,将强加大量的网络传输和磁盘 I/O。传统上,预计不可用的数据是单独固定的。然而,由于观察到数据中心的故障是相互关联的,修复多个故障的不可用数据是不可避免的,甚至是常见的。在本文中,我们表明,与单独修复它们相比,批量重建多个故障的数据所花费的网络传输和磁盘 I/O 成本要低得多。我们提出了 Beehive,一种新的纠删码设计,它可以批量修复多个故障的不可用数据,同时以接近最优的存储开销消耗最优的网络传输。评估结果表明,Beehive 代码在重建期间可以节省高达 69.4% 的网络传输和 75% 的磁盘 I/O。

1 引言

大规模的分布式存储系统,尤其是数据中心的分布式存储系统,存储着海量的数据,而且数据还在快速增长。这些存储系统在商品硬件上运行,预计可以保持数据可用,以防止每天出现导致数据不可用的软件和硬件故障 [12]。传统上,分布式存储系统使用复制数据来保持数据可用。例如,三个副本默认存储在 Hadoop 分布式文件系统 (HDFS) [2] 中。

然而,存储原始数据的多个副本给存储系统带来了昂贵的开销。例如,三份意味着只有总存储空间的33%可以被有效利用。因此,分布式存储系统(例如 [6])一直在用纠删码代替复制,尤其是冷存储或归档存储。通过从复制迁移到纠删码,分布式存储系统可以享受更好的容忍不可用数据的能力,同时节省存储开销。在纠删码中,里德-所罗门 (RS) 码成为最受欢迎的选择,因为 RS 码在提供相同级别的容错能力的同时优化了存储空间的使用。

为了使用 RS 代码实现容错,我们需要假设数据存储在固定大小的块中,这是大多数分布式存储系统的常见做法。对于 k 个数据块,RS 代码计算 r 个奇偶校验块,这样总共 k + r 个块中的任何 k 个都可以恢复所有数据块。数据块及其对应的校验块属于同一个条带。因此,这样的 RS 代码在同一条带内最多可以容忍 r 个故障。例如,k = 4 和 r = 2 的 RS 代码可以容忍任何两个丢失的块,存储开销为 1:5 倍,而三路复制,实现相同级别的容错,需要 3 倍的存储开销。

一旦一个块变得不可用,丢失的数据应该通过重建操作来修复并保存在其他服务器上。在 RS 码下,重建操作需要下载 k 个现有块,然后解码丢失的块,在复制下施加 k 次网络传输。据 Facebook 的集群报道,在 RS 代码下重建不可用数据可以在一天内增加超过 100 TB 的数据传输 [10]。此外,同样数量的磁盘 I/O 也会被施加到存储下载块的服务器上。

为了在重建期间节省网络传输,人们对构建一类称为最小存储再生 (MSR) 码的纠删码产生了相当大的兴趣(例如,[11])。与 RS 码一样,MSR 码也优化了存储空间的使用。但是,MSR 代码可以显着节省重建期间的网络传输。如图 1a 所示,我们假设每个块的大小为 128 MB,并且对于此处的 RS 代码和 MSR 代码,让 k = 3 和 r = 3。 RS 代码需要下载三个块来重建一个丢失的块,而 MSR 代码只需要下载每个块的一小部分。在这个例子中,虽然 MSR 代码需要从一个多块下载数据,但总的网络传输仍然节省了 33:3%,因为每个块只施加了一半的网络传输。尽管如此,即使重建只需要一个块的一小部分,一般来说它必须从整个块进行编码。 因此,MSR 代码不会减轻但会进一步增加磁盘 I/O 的开销,因为重建需要从比 RS 代码更多的块下载数据。

传统上,假设当存在不可用的块时,分布式存储系统将单独重建它们。但是,在数据中心内部,数据不可用事件可能相互关联。例如,许多磁盘在相似的年龄发生故障 [8]。当一个磁盘发生故障时,它表明其他一些磁盘很可能同时发生故障。不仅限于磁盘故障,相关数据故障也可能由于各种原因 [5] 而发生,例如开关故障、断电、维护操作或软件故障。利用相关故障,我们研究了允许我们批量重建多个丢失块的纠删码的构造,以在重建期间节省网络传输和磁盘 I/O。

在本文中,我们提出了一个新的纠删码家族,称为 Beehive,它可以同时重建多个块。这带来的一个直接好处是每个块将只被读取一次以重建多个块。如图 1b 所示,当我们同时重建两个块时,磁盘读取总量节省了 50%,同时我们甚至可以进一步节省网络传输。事实上,Beehive 代码在重建操作中实现了每个块的最佳网络传输。 Beehive 代码的构造是建立在 MSR 代码之上的。

我们在C++ 中实现 Beehive 代码并评估 Beehive 在 Amazon EC2 上的性能。实验结果表明,与 MSR 代码相比,Beehive 代码可以节省高达 42:9% 的网络流量(在 RS 代码下节省更多)和在重建期间高达 75% 的磁盘 I/O。尽管 Beehive 代码存储的实际数据少于具有相同存储空间的 RS 或 MSR 代码,但我们表明这种开销是微不足道的。

2 背景

假设给定 k 个数据块,我们将在一些纠删码下有 r 个奇偶校验块。如果所有 k + r 块中的任何 k 可以解码原始数据,则此类纠删码可以优化存储空间的使用,例如 RS 码。一个块包含一定数量的符号。通常,符号只是一个字节。纠删码的编码、解码和重构操作是通过所谓的有限域算法对这些符号执行的。然而,在本文中,我们不依赖于有限域的任何直接知识,读者可以简单地将其算法视为通常的算法。

给定原始数据,我们可以将它们分成几代,这样每一代都包含 k 个大小相同的块 (fi , i = 1,……,k)。为简单起见,我们在本文中只考虑一代,因为所有代都将以相同的方式编码。根据纠删码,一个块可能由一个或多个段组成,其中每个段是一个包含 w 个符号的行向量。为了简单起见,我们假设在本文中一个符号是一个字节。换句话说,每个段包含 α \alpha α 个字节。假设每个块包含w段,每个块有 α \alpha αw个字节,我们把 f i f_i fi​看成一个 α × w \alpha ×w α×w的矩阵。让 n = k + r。给定 k 个原始块,纠删码使用 n α × k α n\alpha \times k\alpha nα×kα 生成矩阵 G 来计算条带中的所有块,即 G [ f 1 T … … f k T ] T G[f_1^T …… f_k^T]^T G[f1T​……fkT​]T,其中 f 1 T f_1^T f1T​ 表示 fi 的转置。我们可以将 G 分成 n 个大小为 α × k α \alpha \times k \alpha α×kα的子矩阵,使得 G = [ g 1 T … … g k T ] T G =[g_1^T …… g_k^T]^T G=[g1T​……gkT​]T。因此,由 G 生成的 n 个块可以表示为 g i F g_iF gi​F(或块 i i i,为简单起见), i = 1 , … … , n i =1,……,n i=1,……,n,其中 F = [ f 1 T … … f k T ] T F=[f_1^T …… f_k^T]^T F=[f1T​……fkT​]T。从同一代计算的 n 个块属于同一条带。我们简要说明了上面图 2 中描述的符号。

如果 G 的前 k α k\alpha kα行形成单位矩阵, g i F g_iF gi​F与 fi 相同, i = 1 , … … , n i =1,……,n i=1,……,n,这样,我们可以将 g 1 F , … … , g k F g_1F,……,g_kF g1​F,……,gk​F称为数据块,其余称为奇偶校验块。本文描述的纠删码是系统码。通常,RS码下每个块只有一段,即 α = 1 \alpha=1 α=1。我们可以通过让G的其余部分为柯西矩阵来构造RS码。给定同一条带中的任意 k 个块,我们可以得到它们对应的生成矩阵的子矩阵,然后通过将这个子矩阵的逆乘以这 k 个块来解码原始数据。

另一方面,在MSR码下,一个区块包含d -k +1段(即a = d -k +1),其中d是重建一个缺失区块所需的可用区块数量,d > k。在重建过程中,我们把这d个区块称为帮助者,被重建的区块称为新人。为了重建任何一个新来者,我们不需要像在RS码下那样对其进行解码,而是用同一条纹中的d个帮助者的零头来重建它。例如,为了重建giF,我们将从块gjF中计算一个段 v i T g j F v_i^Tg_jF viT​gj​F,其中vi是一个大小为 α \alpha α符号的列向量。有了从帮助者那里得到的d段,我们可以通过将a×d矩阵与这d段相乘来重建giF。

已经有几种 MSR 代码的构造(例如,[11])。在本文中,我们将基于 Rashmi 等人 [11] 提出的一种特定乘积矩阵构造来构造我们的蜂巢代码,因为 1) 构造的 MSR 代码是系统的; 2) 与其他对 d 或 k 的特定值施加约束的构造不同,[11] 中提出的构造更通用,只需要

满足以下等式:

其中 是一个大小为 α \alpha α 的向量,它与具有不同 i 值和相同 j 值的此类向量中的任何其他 α − 1 \alpha -1 α−1线性无关。

3 蜂巢代码

3.1 编码构造

在 Beehive 下,我们假设同时重建 t 个新来者,t > 1。与传统的纠删码(如 RS 或 MSR 码)不同,我们将原始数据的一代分为两部分,分别包含 k 和 k-1 个块。在第一部分中,每个块包含 d-k+1 个片段,在第二部分中每个块包含 t-1 个片段。我们将第一部分中的 k 个块表示为 ,将第二部分中的 k−1 个块表示为。我们在图 3 中说明了这个过程。

如第二节所述。 给定k;r;d,其中d≥2k −2,我们可以构造一个乘积矩阵MSR码的生成矩阵G。然后我们用这样的 G 对第一部分 F 进行编码,得到 。随着乘积矩阵MSR码,我们还可以得到对应的矩阵A,,我们也可以得到对应的矩阵A,然后我们将第二部分的数据编码为

Beehive 根据原始数据计算出 n 个块。每个块包含来自 giF 的 d − k+1 个片段和来自 的 t − 1 个片段。因此,在前 k − 1 个块中我们可以直接找到 C,因为 A 的前 k −1 行是标准碱基。由于我们在第一部分中使用的 MSR 代码是系统的,我们也可以直接从前 k 个块中找到 F。因此,蜂巢代码是系统的。

另一方面,在蜂巢码下每个块中有 d-k+t 段。如果每个段包含 w 个符号,则原始数据应分组为 [k(d−k+t)−(t −1)]w 个符号的代。在块大小相同的情况下,与理论最优值 [15] 相比,这将导致蜂巢代码下每一代中的 (t -1)w 个符号减少(由于页数限制,我们省略了证明)。考虑到一代的数据总量,这种存储效率的损失是微不足道的。

3.2 解码与重建

要解码条带中任意 k 个块的原始数据,必须解码 F 和 C。显然 F 可以通过 MSR 码从任意 k 个块中解码出来。另一方面,给定 k 个块,我们有 ci 的 k 个线性组合,i = 1,……,k−1。由于 A 中的任何 k-1 行都是线性独立的,因此可以从任何 k -1 个块中恢复 ci。

现在我们考虑重构操作。不失一般性,我们只给出 t = 2 的情况。令 N 为新人集,H 为帮助者集,其中

对于任何,助手 i 计算 并将其发送到新人 j ,其中 uj 是大小为 t −1 个符号的向量。 中的任何 t −1 个向量必须是线性无关的。

在新人这边,我们将他们的操作分为两个阶段。以新来者j为例,其中j≥k(由于页数限制,我们也省略了j < k的证明),在第一阶段,它将从H中的助手那里接收d个段。通过(1),每个段可以写成

这样,的秩为, 和的秩为

因此,我们可以使用从 d 个助手接收到的 d 个片段来求解,同时, 也可以求解,

第二阶段,新人j将发送

给另一个新人 ,它也会从其他新人那里收到 t −1 个片段。然后新人 可以抵消 因为它已经解决了。然后我们可以得到, 也可以很好的解出, 从其他新来者那里得到的t-1段。因此,建议由组成的矩阵包含一个身份子矩阵,这样就可以简化这一操作。这样,我们可以同时重建。在重建过程中,每个新人将收到d +t -1段,实现最佳网络传输[15],以重建t块。

4 初步结果

我们用C++实现了Beehive,使用英特尔存储加速库(ISA-L)[1]进行有限域运算。我们还用ISA-L实现了RS码和MSR码,以便于比较。我们让k=6,r=6,并设定块大小为60MB。我们首先比较RS、MSR(d=10)的不同操作的速度,图4中的MSR码和Beehive码(d=10;t=2),运行在c4.2xlarge类型的亚马逊EC2实例上。我们观察到,MSR码和Beehive码的编码和解码操作是相当接近的。Beehive码的编码操作比MSR码慢一点,因为Beehive码是建立在MSR码之上的。尽管如此,我们没有观察到MSR码和蜂巢码之间的解码或重建操作速度有明显的不同。在MSCR码下,新人一侧的第一阶段重建的吞吐量较低。然而,由于在这个阶段只产生一个片段,实际处理时间要比第二阶段快得多。这对分布式存储系统更为重要,因为数据将只被编码一次,但被解码或重构多次。另一方面,RS编码可以享受更高的吞吐量,因为在RS编码下,每个块中只有一个段。

在每个区块大小为60MB的情况下,在RS或MSR编码下的一代是360MB,但在Beehive编码下的一代要少10MB。事实上,在相同的存储开销(即相同的k和r)下,Beehive码存储的实际数据更少。换句话说,在原始数据量相同的情况下,我们在Beehive编码下可能有更多的代数。然而,这种额外的存储开销是很小的。在这种情况下,它只是2.8%。

我们在图5中比较了RS、MSR和Beehive码在重建过程中的磁盘读取和网络传输。特别是,当t=1时,Beehive编码将与MSR编码相同。当t>1时,RS码和MSR码分别重构t块。换句话说,在每次重建时都会有数据被读取。因此,如图5a所示,Beehive码在重建过程中实现了更少的磁盘读取,这并不随t的变化而变化,而只取决于帮助器的数量。与MSR代码相比,Beehive代码可以节省高达75%的磁盘读取量。关于网络传输,我们在图5b中观察到,RS码总是施加最多的网络传输。随着d的增加,MSR代码和Beehive代码都需要较少的网络传输。然而,蜂巢代码可以进一步节省网络传输,与MSR代码相比,最多可节省42.9%,与RS代码相比,最多可节省69.4%。随着t的增加,网络传输的减少变得更加明显。

5 相关工作

为了优化重建过程中的网络传输而不损失容错性,Dimakis等人[4]探讨了单块重建的网络传输的理论下限,有很多文献介绍了这种擦除码(称为再生码)的构造[3]。在这些代码中,最小存储再生(MSR)代码实现了最佳存储开销[11]。当有多个区块需要同时重建时,可以进一步节省网络传输[15]。然而,目前还没有构建能够在一般参数值和最佳存储开销下达到这个下限的擦除码。Shum[15]和Li等人[7]提出了这种纠删码的构造,分别在d=k和t=2的情况下实现了最佳网络传输。在本文中,我们提出了一种结构,在接近最优的存储开销和广泛的参数范围内实现了最优的网络传输。

6 结论

在本文中,我们提出了Beehive,一个新的擦除码系列,它可以同时重建多个块,并以接近最佳的存储开销实现最佳的网络传输。通过在亚马逊EC2上的实验,我们表明,与现有的擦除代码如RS和MSR代码相比,Beehive代码可以同时大大节省网络传输和磁盘I/O。

参考文献

[1] Intel Storage Acceleration Library. https://01.org/intel%C2%
AE-storage-acceleration-library-open-source-version.
[2] BORTHAKUR, D. HDFS Architecture Guide. Hadoop Apache
Project. http://hadoop.apache.org/common/docs/
current/hdfs_design.pdf.
[3] DIMAKIS, A., RAMCHANDRAN, K., WU, Y., AND SUH, C. A
Survey on Network Codes for Distributed Storage. Proceedings
of the IEEE 99, 3 (Mar. 2011), 476–489.
[4] DIMAKIS, A. G., GODFREY, P. B., WU, Y., WAINWRIGHT,
M. J., AND RAMCHANDRAN, K. Network Coding for Distributed Storage Systems. IEEE Trans. Inform. Theory 56, 9
(2010), 4539–4551.
[5] FORD, D., LABELLE, F., POPOVICI, F. I., STOKELY, M.,
TRUONG, V.-A., BARROSO, L., GRIMES, C., AND QUINLAN, S. Availability in Globally Distributed File Systems. In
Proc. USENIX Symposium on Operating System Design and Implementation (OSDI) (2010).
[6] HUANG, C., SIMITCI, H., XU, Y., OGUS, A., CALDER, B.,
GOPALAN, P., LI, J., AND YEKHANIN, S. Erasure Coding in
Windows Azure Storage. In Proc. USENIX Annual Technical
Conference (USENIX ATC) (2012).
[7] LI, J., AND LI, B. Cooperative Repair with Minimum-Storage
Regenerating Codes for Distributed Storage. In Proc. IEEE INFOCOM (2014).
[8] MA, A., DOUGLIS, F., LU, G., SAWYER, D., CHANDRA, S.,
AND HSU, W. RAIDShield: Characterizing, Monitoring, and
Proactively Protecting Against Disk Failures. In Proceedings of
the 13th USENIX conference on File and Storage Technologies
(2015).
[9] RASHMI, K. V., NAKKIRAN, P., WANG, J., SHAH, N. B., AND
RAMCHANDRAN, K. Having Your Cake and Eating It Too:
Jointly Optimal Erasure Codes for I/O, Storage, and Networkbandwidth. In Proceedings of 13th USENIX Conference on File
and Storage Technologies (FAST) (2015).
[10] RASHMI, K. V., SHAH, N. B., GU, D., KUANG, H.,
BORTHAKUR, D., AND RAMCHANDRAN, K. A Solution to
the Network Challenges of Data Recovery in Erasure-coded Distributed Storage Systems: A Study on the Facebook Warehouse
Cluster. In Proc. 5th USENIX Workshop on Hot Topics in Storage
and File Systems (HotStorage) (2013).
[11] RASHMI, K. V., SHAH, N. B., AND KUMAR, P. V. Optimal
Exact-Regenerating Codes for Distributed Storage at the MSR
and MBR Points via a Product-Matrix Construction. IEEE Transactions on Information Theory 57, 8 (2011), 5227–5239.
[12] SATHIAMOORTHY, M., ASTERIS, M., PAPAILIOPOULOS, D.,
DIMAKIS, A. G., VADALI, R., CHEN, S., AND BORTHAKUR,
D. XORing Elephants: Novel Erasure Codes for Big Data.
Proc. VLDB Endowment (2013).
[13] SHAH, N., RASHMI, K. V., KUMAR, P., AND RAMCHANDRAN,
K. Interference Alignment in Regenerating Codes for Distributed
Storage: Necessity and Code Constructions. IEEE Trans. Inf.
Theory 58, 4 (2012), 2134–2158.
[14] SHAH, N. B., RASHMI, K. V., VIJAY KUMAR, P., AND N,
K. Distributed Storage Codes With Repair-by-Transfer and
Nonachievability of Interior Points on the Storage-Bandwidth
Tradeoff. IEEE Trans. on Inform. Theory, 58, 3 (2012), 1837–
1852.
[15] SHUM, K. W. Cooperative Regenerating Codes for Distributed
Storage Systems. In Proc. IEEE International Conference on
Communications (ICC) (2011).

Beehive:用于修复分布式存储系统中多个故障的纠删码相关推荐

  1. minio分布式集群搭建完全教程(纠删码,数据恢复)

    minio存储 单机测试 minio对象存储: 编译安装: minio 服务器安装: git clone https://gitee.com/mirrors/minio.git cd minio go ...

  2. 纠删码在实时视频流中的应用丨Dev for Dev 专栏

    本文为「Dev for Dev 专栏」系列内容,作者为声网网络体验团队王瑞. 01 背景 在实时音视频通话中,音视频质量受网络丢包影响较大,特别是对于视频. 为什么视频对丢包更敏感呢?通常来说,音频的 ...

  3. 分布式存储系统中的数据高效缓存方法

    点击上方蓝字关注我们 分布式存储系统中的数据高效缓存方法 杨青霖, 吴桂勇, 张广艳 清华大学计算机科学与技术系,北京 100084 摘要:针对典型分布式存储系统存在的写放大.I/O路径过长.响应时延 ...

  4. 关于分布式存储系统中-CAP原则(CAP定理)与BASE理论比较

    CAP原则又称CAP定理,指的是在一个分布式系统中, Consistency(一致性). Availability(可用性).Partition tolerance(分区容错性),三者不可得兼. CA ...

  5. 聊聊分布式存储系统中的心跳机制以及主节点下发指令给从节点

    心跳( heartbeat )是分布式系统中常用的技术.顾名思义,心跳就是以固定的频率向其他节点汇报当前节点状态的方式.收到心跳,一般可以认为发送心跳的这个节点在当前的网络中状态是良好的. 同时分布式 ...

  6. 纠删码存储系统中的投机性部分写技术

    本文已被USENIX'17年度技术大会录用,此处为中文简译版. 阅读英文论文完整版请点击:Speculative Partial Writes in Erasure-Coded Systems 多副本 ...

  7. ECPipeline 用于纠删码的流水线修复

    \1. Repair Pipelining for Erasure-Coded Storage (用于纠删码的流水线修复) Repair Pipelining for Erasure-Coded St ...

  8. 【海云捷迅云课堂】分布式存储系统纠删码技术分享

    云课堂专题 海云捷迅云课堂专题,旨在秉承开源理念,为大家提供OpenStack技术原理与实践经验,该专题文章均由海云捷迅工程师理论与实践相结合总结而成,如大家有其他想要了解的信息,可留言给我们,我们会 ...

  9. 分布式存储系统关于GDPR条例中的数据清除原则

    文章目录 前言 HDFS存储系统数据的完全删除 基于加解密的输入输出流的数据保护方案 引用 前言 关于GDPR是什么,可能许多同学之前并不太了解,至少笔者在之前也是不清楚的.GDPR全称为通用数据保护 ...

最新文章

  1. linux python3安装包_Linux下安装python3及相关包
  2. Keycloak Spring Security适配器的常用配置
  3. MVC自定义视图规则
  4. 【转】Asp.NetMve移除HTTP Header中服務器信息Server、X-AspNet-Version、X-AspNetMvc-Version、X-Powered-By:ASP.NET...
  5. 《面向对象程序设计课程学习进度条》
  6. webp转换gif_右键转换文件格式
  7. double 去掉小数点_JAVA编程有一个小数,如何去掉小数部分
  8. Github标星35K+超火的Spring Boot实战项目(附项目地址+教程文档)
  9. json函数 presto_Hive sql和Presto sql的一些对比
  10. eclipse中点不出来提示
  11. win7 64位系统PS、AI、PSD缩略图预览补丁
  12. VS2012 注册密钥
  13. .NET软件工程师网络在线培训就业课程
  14. linux虚拟磁带机管理,RHEL6 虚拟磁带机使用指南
  15. 操作系统核心与驱动程序
  16. 阿里云CDN介绍以及如何配合OSS使用
  17. Python学习笔记:1.2.8 字典
  18. 无监督学习的简单统一
  19. CentOS7搭建Hadoop集群环境
  20. 亡命威龙评测:像城管一样开警车

热门文章

  1. STM32定时器同步功能2
  2. 斩波电路及斩波运放--降低失调及低频噪声
  3. 基于springboot垃圾分类管理系统
  4. 获取youku视频源地址
  5. 模拟电路-滤波器-LC滤波器的思考总结
  6. html制作的动态粒子图像,一种基于AnimateCC+Canvas的随机粒子动画效果设计
  7. 第十一章 数据可视化 - 地图可视化
  8. 怎么更改苹果账户名称_淘宝账号开店以后想改名字怎么办?哪些信息不能修改...
  9. 口算软件 ------有助于你了解代码的封装思想,更加简单 (java实现版本)
  10. 模板方法模式--钩子方法