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

\1. Repair Pipelining for Erasure-Coded Storage

(用于纠删码的流水线修复)

Repair Pipelining for Erasure-Coded Storage

main
  1. 解决了什么问题
    1. 对于纠删码策略而言,当 带宽成为瓶颈时,如何去消除这一瓶颈,如何去 reduce read time
      1. 如何去做到更有效地利用各个结点的带宽,提高并行度?
      2. 如何使得各个link的负载均衡?
    2. 使用场景: speeding up the repair of a single failed block per stripe - (优化单块修复)主要是为了加速当一个条带中只有一个块坏掉这种情况(这种情况是最普遍的情况,超过了98%的情况)
  2. 为什么要解决这个问题
    1. 对于热数据而言,通常采用replication而不是ec,如果解决了这个问题,将有机会在热数据上采用ec策略
    2. EC相比于replication而言,虽然冗余存储上优于replication,但是在修复时所产生的的IO开销要数倍于replication
  3. 提出了什么方法来解决这个问题
    1. ECPipling : 通过 cyclic(循环) + slice(切片) + group(分组) 来使得修复过程流水线化, 并实现了负载均衡
  4. 这个方法的效果如何
    1. evaluation (还没看完)
my question
  1. 如果是将一个block切分为s个slices, 为什么在Figure4中, S2的link的开端是N2? (在Figure3中,每个slice的开端都是N1)
    1. 这里的block指的是同一个stripe中的各自node上的blocks,N1和N2的S1指的是在stripe中的各自映射到的block的S1切片
  2. 是否可以理解为,degraded read 的情况即为: 已经知道具体是哪些block损坏,所以修复的范围仅限于这些block,和full-node的区别仅在于范围大小上?
  3. 为什么说read的数据量降低到 normal了
    1. 可知,修复的timeslot数量即时间开销并没有减少,而传输给R的数据量由于采用cyclic link策略,所以只需要传输一个block大小的数据量(每次传输时,结点先计算,然后再把结果传输给下一个结点),当采用 group分组的策略后, 传输给R的数据块被分摊了,在时间尺度上来看更加均衡了
  4. 文中说,为了减少IO开销, block通常取的很大, 为什么? 或者说, block的取值依据是什么?
  5. straggler problem(掉队者问题)是什么? 是指link中的某条链路的带宽很慢从而影响了整个link的时间开销吗? 所谓的 bypassing straggler 是否是指通过 路径权重选择来绕开带宽很低的link
  6. 在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
      • 通过增加冗余来换取更好的修复性能
reading list
pipelining流水线
  • 特点 - 能够将repair time reduce 到和读取时间相同的大小
  • 主要思想 - 通过存储节点 流水线化 修复小型单元中的编码块,以便在存储节点之间分配修复流量并充分利用带宽资源
  • 解决问题
    • 两种类型error的修复操作
      • degraded read
      • full-node recovery
    • 异构环境的修复策略
      • 第一种允许在带宽有限时并行地(切片来使得一个块)读取重建的数据
      • 第二种找寻跨节点的最佳修复路径(带宽最优),使修复时间最小化
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
  1. N1-N2, N3-N4
    1. 因为使用了不同的链接,所以可以并行传输
  2. N2-N4
    1. 在这里N4便能够obtain a1B1 + a2B2 + a3B3 + a4B4
  3. N4 将 a1B1 + a2B2 + a3B3 + a4B4 (也就是只传输了一个块的数据量) 传输给R

成功将 timeslot 降低到 3个,但在这种情况下,第三个timeslot,N4传输的流量是多于其他链路的,没有做到带宽的均衡分布,repair time收到流量负荷最大的链路的限制

主要目的 : minimizing repair time

绝大多数的错误都是degraded 而不是 full-node错误

对于 单块中的degraded read

cyclic link
  1. B1将 a1B1 传输到B2
  2. B2将 a1B1+a2B2 传输到B3
  3. 以此类推,一共有k次链路传输发生在k个不同的链路上,因此没有瓶颈链路(why?意思是每次传输的都是一块吗?)
  4. 总体上来说还是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集成

  1. 首先,我们将请求者实现为一个类,这个类可以由存储系统实例化以重建失败的块。
  2. 其次,我们将每个助手实现为一个与每个存储节点共同置于的守护程序,以直接读取本地存储的块。
  3. 最后,coordinater 需要知道 block的位置,以及他所映射到的stripe

使用redis在helpers之间传输slice

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值