前言

这个论文是从 网易的curve项目了解到的(块存储项目), 浏览了整个论文之后, 发现论文主要是为了解决 大量数据丢失 & 高频数据丢失 折中的处理方案, 通过对比大量数据, 得出 低频大尺寸数据丢失 优先的结论, copyset 的设计将 数据丢失降低, 通过应用 copyset, 将 RAM Cloud 5000节点的 数据丢失率从 99.99%->0.15%, facebook hdfs 数据丢失率 从 22.8%-> 0.78%.

论文参考: 1

基本概念

关于数据丢失: 大规模集群中, 经常会遭受 断电 等数据中心失败场景, 比如断电, 即使电力恢复, 也有 0.5%-1.0%的 节点无法恢复, 很有可能一个chunk的所有副本都不可用, 从而导致数据丢失

关于数据恢复: 数据修复成本 并不是和 丢失的数据成比例, 而是定位 丢失chunk 所在的完整数据.

tradeoff(frenquency vs lost data size): 假设每年丢失的不可用数据量是固定的, 那么, 相比于 更多丢失次数 * 每次更少的数据丢失, 我们倾向于 更少的丢失次数 * 每次更多的数据丢失.

  • 对比

random replication: chunk 随机分布在 R 个副本上

在5000节点的 RAM Cloud, radonm replication 丢失频率高, 每次丢失数据少; copyset replication 次数少, 每次丢失数据多.

比较有意思的是, 在论文中指出, 3副本的copyset 可能达到 5副本的 random replication

设计

copyset 设计中有几个重要的参数, N: 机器节点数量, R: 副本数, S: scatter width(一个copyset的数据会在几个不同其他的节点上), 对于 3副本的9个节点, scatter width(S)=4 的时候, 会有以下copyset:

{1,2,3},{4,5,6},{7,8,9},{1,4,7},{2,5,8},{3,6,9}

任意一个节点, 比如 ndoe 1 上面的数据会复制到 2,3 和 4,7, 降低数据丢失的可能性.

  • 流程
  1. 根据参数 N、R、S 计算好 枚举的copyset (并不是所有枚举都有效, 会根据 失败域等条件去除无效的copyset, 比如 要不全部在一个rack里面, 网路配置). 生成若干枚举的数量: p = ceil(s/r-1), 将枚举 切成连续的 copyset

  2. 先确定chunk的主副本,再选择一个 primary 所在的 copyset 作 secondary. 确定主副本,不同算法不一样

  • failover

新节点加入,会导致部分老节点 高负载

增加scatter width 可以有效的避免热点

应用&数据

论文重点讨论了在 RAM Cloud 和 facebook hdfs 的实现. 略过

从数据上看, copyset 对小集群不太友好

s=r-1 特殊配置 断电有优势

  • 看起来,ramcloud 并不适合 copyset

文末重点讨论了组合理论, 不关心

参考


  1. 作者: Stanford University: Copysets: Reducing the Frequency of Data Loss in Cloud Storage ↩︎