\1. Repair Pipelining for Erasure-Coded Storage
(用于纠删码的流水线修复)
Repair Pipelining for Erasure-Coded Storage
main
- 解决了什么问题
- 对于纠删码策略而言,当 带宽成为瓶颈时,如何去消除这一瓶颈,如何去 reduce read time
- 如何去做到更有效地利用各个结点的带宽,提高并行度?
- 如何使得各个link的负载均衡?
- 使用场景: speeding up the repair of a single failed block per stripe - (优化单块修复)主要是为了加速当一个条带中只有一个块坏掉这种情况(这种情况是最普遍的情况,超过了98%的情况)
- 对于纠删码策略而言,当 带宽成为瓶颈时,如何去消除这一瓶颈,如何去 reduce read time
- 为什么要解决这个问题
- 对于热数据而言,通常采用replication而不是ec,如果解决了这个问题,将有机会在热数据上采用ec策略
- EC相比于replication而言,虽然冗余存储上优于replication,但是在修复时所产生的的IO开销要数倍于replication
- 提出了什么方法来解决这个问题
- ECPipling : 通过 cyclic(循环) + slice(切片) + group(分组) 来使得修复过程流水线化, 并实现了负载均衡
- 这个方法的效果如何
- evaluation (还没看完)
my question
- 如果是将一个block切分为s个slices, 为什么在Figure4中, S2的link的开端是N2? (在Figure3中,每个slice的开端都是N1)
- 这里的block指的是同一个stripe中的各自node上的blocks,N1和N2的S1指的是在stripe中的各自映射到的block的S1切片
- 是否可以理解为,degraded read 的情况即为: 已经知道具体是哪些block损坏,所以修复的范围仅限于这些block,和full-node的区别仅在于范围大小上?
- 为什么说read的数据量降低到 normal了
- 可知,修复的timeslot数量即时间开销并没有减少,而传输给R的数据量由于采用cyclic link策略,所以只需要传输一个block大小的数据量(每次传输时,结点先计算,然后再把结果传输给下一个结点),当采用 group分组的策略后, 传输给R的数据块被分摊了,在时间尺度上来看更加均衡了
- 文中说,为了减少IO开销, block通常取的很大, 为什么? 或者说, block的取值依据是什么?
- straggler problem(掉队者问题)是什么? 是指link中的某条链路的带宽很慢从而影响了整个link的时间开销吗? 所谓的 bypassing straggler 是否是指通过 路径权重选择来绕开带宽很低的link
- 在full-node情景中, 多个reconstructed block可以存储在多个请求体上,这句话是什么意思? 这种情景下的请求体不应该就是 这个损坏掉的 full-node吗(即requestor只有一个)?
list
-
什么叫虫洞路由? - wormhole routing
-
L. M. Ni and P. K. McKinley. A Survey of Wormhole Routing Techniques in Direct Networks. IEEE Computer, 26(2):62–76, Feb 1993
-
什么叫异构环境 - heterogeneous
- 链路带宽不同的环境
-
什么是降级读取 - degraded read
-
什么是全节点恢复 - Full-node recovery
-
什么叫有限边缘宽度 - Limited edge bandwidth
-
什么是 lazy repair
-
M. Silberstein, L. Ganesh, Y. Wang, L. Alvizi, and
M. Dahlin. Lazy Means Smart: Reducing Repair Band-width Costs in Erasure-coded Distributed Storage. In
Proc. of ACM SYSTOR, 2014.
-
-
什么是parallel partial repair (PPR)
-
S. Mitra, R. Panta, M.-R. Ra, and S. Bagchi. Partial-
Parallel-Repair (PPR): A Distributed Technique for Re-pairing Erasure Coded Storage. In Proc. of ACM EuroSys,
2016.
-
-
RS码,CRS码
-
repair-friendly erasure code
- locally repairable codes
- 通过增加冗余来换取更好的修复性能
- locally repairable codes
reading list
-
(134条消息) Repair Pipelining for Erasure-Coded Storage(ATC‘17)_咩咩姐的博客-CSDN博客
-
[Rethinking Erasure Codes for Cloud File Systems: Minimizing I/O for Recovery and Degraded Reads](https://www.usenix.org/legacy/event/fast12/tech/full_papers/Khan.pdf#:~:text=degraded reads and reveal that it can use,the savings more acute%2C as much as 50%.)
pipelining流水线
- 特点 - 能够将repair time reduce 到和读取时间相同的大小
- 主要思想 - 通过存储节点 流水线化 修复小型单元中的编码块,以便在存储节点之间分配修复流量并充分利用带宽资源
- 解决问题
- 两种类型error的修复操作
- degraded read
- full-node recovery
- 异构环境的修复策略
- 第一种允许在带宽有限时并行地(切片来使得一个块)读取重建的数据
- 第二种找寻跨节点的最佳修复路径(带宽最优),使修复时间最小化
- 两种类型error的修复操作
something new
-
如果只损坏了一个块, 那么此时的repair cost 是不划算的
-
the repair of a single failed coded block (either lost or unavailable) needs to read multiple available coded blocks for reconstruction (损失了一个块,但是需要传输多个块)
-
如果采用replication的策略,那么IO开销只是1个块的大小,而纠删码则需要多倍的IO开销
-
IO开销 - EC更大
-
冗余存储开销 - replication 更大
-
所以纠删码主要用于 less frequently read(冷数据)的情况
-
-
-
减轻纠删码的repair penalty
- 提出新的纠删码
-
为现有的纠删码设计快速修复的方法
- 但这些都是致力于修复时间,read time 依然很高
-
为了减少IO的开销,block通常会很大
-
k个数据块生成n个块,这n个块被称作一个stripe
-
systematic - n个中有k个是和原来的data块是相同的(不忘初心)
-
修复类型
- full-node
- degraded reads
-
可以感受到, 之所以采用 cyclic link 的策略,是因为这样可以将计算的开销分摊到各个结点上, 而采用slice和group,能够使得发往R的数据更加平缓(时间尺度上)
PPR reduce repair time
- N1-N2, N3-N4
- 因为使用了不同的链接,所以可以并行传输
- N2-N4
- 在这里N4便能够obtain a1B1 + a2B2 + a3B3 + a4B4
- N4 将 a1B1 + a2B2 + a3B3 + a4B4 (也就是只传输了一个块的数据量) 传输给R
成功将 timeslot 降低到 3个,但在这种情况下,第三个timeslot,N4传输的流量是多于其他链路的,没有做到带宽的均衡分布,repair time收到流量负荷最大的链路的限制
主要目的 : minimizing repair time
绝大多数的错误都是degraded 而不是 full-node错误
对于 单块中的degraded read
cyclic link
- B1将 a1B1 传输到B2
- B2将 a1B1+a2B2 传输到B3
- 以此类推,一共有k次链路传输发生在k个不同的链路上,因此没有瓶颈链路(why?意思是每次传输的都是一块吗?)
- 总体上来说还是k个timeslot,这和普通的策略是相同的时间
因此将一个block的修复分解为对于s个slice的修复,将这s个slice的修复流水线化, 对于每个slice的传输开销为一个block的1/s
Weighted Path Selection
采用简单的贪心策略来选择helpers
- 这k个helpers是在上一次请求中的被选择的k个
对于 full-node 的修复而言,多个重构块可能分布于不同的requestor上,这种情况下,不使用流水线化也可以实现并行
异构环境下的优化
-
并行读取
-
允许客户端从多个helpers读取切片
-
将k个helpers映射到不同的循环路径中去
-
将s个切片划分为k组
k=4, s=6, 用k-1=3进行分组,分为两组
-
-
- 用k-1来分组,当k-1次传输完成之后,可以让剩余的那个结点传输到R
- 如果瓶颈在于从 helpers 到 R的链路传输带宽,那么循环策略要明显优于流水线策略,(我们可以看到,s个切片很均衡地发送给了R)
-
加权路径选择
- 置于更加一般的环境中: 异构环境(链路不一致)
- 权重 = 带宽的倒数, 所以找寻的是最小权重的路径
- 找出一条 由k+1个nodes组成的sequence(path)来使权重最小
- algorithm: (贪心)遍历寻找最近的结点
ECPipe runs on top of a storage system
为了修复失败的块,存储系统创建一个requestor对象,它向coordinator发送一个具有failed block ID 的修复请求(步骤1)。
coordinater 使用 failed block ID 来识别 同一个stripe 的 k 个可用块的位置。它将block位置通知给所有helpers(步骤2)。
helpers检索块,在slices中执行修复流水线,并将修复后的slice交付给请求者(步骤3)。
三方面将存储系统与ECPipe集成
- 首先,我们将请求者实现为一个类,这个类可以由存储系统实例化以重建失败的块。
- 其次,我们将每个助手实现为一个与每个存储节点共同置于的守护程序,以直接读取本地存储的块。
- 最后,coordinater 需要知道 block的位置,以及他所映射到的stripe
使用redis在helpers之间传输slice