原文:《Erasure Coding in Windows Azure Storage.pdf》,地址:https://www.usenix.org/system/files/conference/atc12/atc12-final181_0.pdf

WAS: (LRC, Local Reconstruction Codes)

1       概述

(1)       Extent

当extent的大小达到一定值,extent就被sealed. Sealed的extent不能再被修改,作为编码的候选。WAS 在后台lazily地编码这个extent,一旦extent被编码成功,extent原始的3备份要被删除。

(2)       LRU

A (k, l, r), k个数据段(data fragments),分成l个组,每个组生成一个本地编码块(local parity fragments),所有数据段,生成r个全局编码块。(6, 2, 2)

(3)       Checking Decodability

swap local parity and data fragment , 然后检查删除的数据段和全局编码段的个数是不是小于全局编码段的个数,如果是,表明可解码。

(4)       RS (10, 4) is used in HDFS-RAID in Facebook and RS (6, 3) in GFS II in Google.

(5)       其它编码技术:Weaver codes, Hover codes and Stepped Combination codes

(6)       LRC和其他编码方案在重建读成本和存储复制两个维度的比较

(7)       LRC为了提供客户端读过程的重建需求,优化数据段重建,而非编码段。在编码段重建,modern codes更有效。在(12,6)的情况下,Stepped Combination code只需要3个数据段就可以重建编码段,LRC则需要12个数据段。

(8)       WAS为了避免关联错误,将同一个编码组的数据段放在不同的fault domain

(9)       WAS从架构上分为三层:前端层、分区对象层、流复制(replication)层

编码存储放在流复制层

2       实现

(1)       流层的架构:基于paxos的流管理器(Stream Managers, SM), Extent Nodes(EN)

(2)       Extent, block, EN

每一个extent含有一系列的block(最大5M),每个block是CRC校验的,block是分区对象层读写数据的最小粒度。

每个extent在多个EN上复制。每个写操作在回复消息给客户端时,以菊花链的方式提交到一个复制集合的多个EN上

(3)       Sealed

对应一个流的写操作持续追加到一个extent上,除非extent达到最大的大小(1G-3G),或者在复制集合中出现错误。无论哪种情况,一个新的extent会被创建,之前的extent被sealed。当extent被sealed(标记),数据就不能改变(immutable),并且成为编码存储的备选。

2.1     编码过程

编码存储是完全的异步和脱离客户端的写路径的。SM周期性扫描标记的extent,根据流策略和系统负载,安排一个子集用于编码。

We configure the system to automatically erasure code extents storing Blob data, but also have the option to erasure code Table extents too

过程:

(1)       SM根据编码的参数(12,2,2),在一个集合的EN上创建fragment。SM从EN中选择一个协调者(coordinator),并且向它发生复制集合的元数据,从这开始,协调者负责编码的完成。

(2)        coordinator EN选择编码的extent: 所有fragments的边界都在extent上。EN根据追加block的界限划分extent到fragment,而不是随意的划分。这确认读一个block不会跨越多个fragments

(3)       coordinator EN开始编码过程,持续发送编码fragment给指定的EN。所有EN跟踪进度,并存储相应信息到新的fragment。当有错误发生,另外一个EN根据fragment中的进度信息,接手剩余工作

(4)       当整个extent都被编码了,协调者EN通知SM用fragment的界限和完成标记更新extent元数据。然后SM安排全备份的EN删除不需要的extent.

2.2     重建

(1)           读过程的重建

客户端进行读的时候,如果对应的EN不存活,或是一个热点,可以联系任何一个拥有extent的fragment的EN,开始一个重建读,EN完成重建读后会缓存相应的fragment.

(2)           EN或磁盘丢失重建

由SM启动在另外一个EN进行重建,过程同上

2.3     Fragment存放

存放位置考虑的因素:

(1)负载,倾向于更空闲、更小负载的EN;

(2)可靠性,避免将同一个编码组的两个fragments放在相关联的域中。Fault domain(rack)、upgrade domain.

示例:

一个典型的WAS有20个机架,10个升级域(每次升级,有10%的存储资源不在线)。

LRU(10,2,2),分成2个本地组,然后每组选一个,一起放入一个升级域,一共要6个升级域。2个本地编码块,放入一个升级域,然后2个全局编码块放入2个升级域。一共需要9个升级域。这样在任何一个域的升级,每个数据fragment都可以获取到,或直接读取,或通过重建。

2.4     IO安排

每一个EN监控网络、每个独立磁盘的负载,决定接受、拒绝、delay IO

类似的,SM监控EN上的复制负载,来决定启动复制、编码、删除extent和其它系统维护操作,为了对其它IO操作的公平的性能。同时,也是为了确保编码的速度能赶上从用户进来的数据速率。

重建预读和cache:

重建fragment时以unit大小(大于block的大小)进行,减少磁盘和网络的IO数。预读的数据缓存在内存中(最大256M)。

2.5     数据一致性

Checksum和parity。每个block的同步都有一个crc,读写的时候检查。

在每一个编码操作后,很多解码的集合都在coordinator EN的内存中被尝试,以检查是否能成功的恢复。这样做的目的是为了确保编码的算法本身没有引入数据不一致。

LRC(12,2,2)在允许编码完成前,将尝试下列的解码验证:

(1)随机选择一个数据fragment,local group内重建;

(2)随机选择一个数据fragment,用其中一个全局parity重建;

(3)随机选择一个数据fragment,用另外一个全局parity重建;

(4)随机选择两个数据fragment,重建;

(5)随机选择3个数据fragment,重建;

(6)随机选择4个数据段(只是一个本地组要有一个),重建。

对于每种情况解码出来的数据,和实际的数据比较CRC

最后coordinator EN执行一个所有数据段的CRC,和extent的原始的CRC进行比较。如果这些检查都通过了,编码段才会被持久化到存储磁盘中。如果在这个过程,任何一个错误发生了,编码操作会被终止,保留extent的数据不变。SM过段时间在另一EN再开始调度编码。

2.6     编码算法优化

Galois Field arithmetic。使用预计算、加法、乘法表,根据编解码矩阵的形式来排序XOR操作,这样可以减少冗余的操作和限制实际编码过程中对编码矩阵的重复检查

3       Performance

4       Related Work

Erasure Coding in WAS简单译文的更多相关文章

  1. Hadoop hdfs副本存储和纠删码(Erasure Coding)存储优缺点

    body { margin: 0 auto; font: 13px / 1 Helvetica, Arial, sans-serif; color: rgba(68, 68, 68, 1); padd ...

  2. Erasure Coding(纠删码)深入分析

    http://blog.sina.com.cn/s/blog_57f61b490102viq9.html 1.前言 Swift升级到2.0大版本后宣称开始支持纠删码,这其实是一个很有意义的特性,主要是 ...

  3. Erasure Coding(纠删码)深入分析 转

    1.前言 Swift升级到2.0大版本后宣称开始支持纠删码,这其实是一个很有意义的特性,主要是能够在一定程度上解决3副本空间浪费太多的问题.因为3副本这一点是swift推广的最大障碍之一,成本的增加吓 ...

  4. Kcptun 是一个非常简单和快速的,基于KCP 协议的UDP 隧道,它可以将TCP 流转换为KCP+UDP 流

    本博客曾经发布了通过 Finalspeed 加速 Shadowsocks 的教程,大家普遍反映能达到一个非常不错的速度.Finalspeed 虽好,就是内存占用稍高,不适合服务器内存本来就小的用户:而 ...

  5. [转载] HDFS and Erasure Codes (HDFS-RAID)

    The Hadoop Distributed File System has been great in providing a cloud-type file system. It is robus ...

  6. 前端神器之Sublime Text2/3简单明了使用总结

    为什么叫神器呢? 我总结如下: 第一:也是最重要的,它占内存很小(就如同notepad++那般迅速打开,所以那款其实也不错~).一般IDE比如WebStorm(它也是一款神器来着),Aptana(也比 ...

  7. python - 实现文本分类[简单使用第三方库完成]

    第三方库 pandas sklearn 数据集 来自于达观杯 训练:train.txt 测试:test.txt 概述 TF-IDF 模型提取特征值建立逻辑回归模型 代码 # _*_ coding:ut ...

  8. python入门:模拟简单用户登录(自写)

    #!/usr/bin/env python # -*- coding: utf-8 -*- #模拟简单用户登录(自写) import getpass a = raw_input("Pleas ...

  9. Hadoop集群简单入门

    Hadoop集群搭建 自己配置Hadoop的话太过复杂了,因为自己着急学习,就使用了黑马的快照.如果小伙伴们也想的话可以直接看黑马的课程,快照的话关注黑马程序员公众号,输入Hadoop就能获取资料,到 ...

随机推荐

  1. swift学习:第一个swift程序

    原文:swift学习:第一个swift程序 最近swift有点火,赶紧跟上学习.于是,个人第一个swift程序诞生了... 新建项目

  2. cocos2d-x 3.2 2048——第六部分(最后一章)

    ***************************************转载请注明出处:http://blog.csdn.net/lttree************************** ...

  3. NGUI使用教程(2) 使用NGUI创建2D场景而且加入标签和button

    1.创建2D场景 要使用NGUI创建2D场景,首先咱们必须新建一个项目,而且导入NGUI作为这个项目的插件,相信假设看过上一篇教程都知道怎么导入NGUI了,这里就不赘述,假设有疑问的能够去看上一篇教程 ...

  4. installshield 32位打包和64位打包的注意事项

    原文:installshield 32位打包和64位打包的注意事项 32/64位问题要把握几点:1. 明确你的产品是否需要区分32/64位2. 明确你的产品中是否有32/64位的服务注册3. 了解In ...

  5. c# 播放器 支持所有格式

    原文:c# 播放器 支持所有格式 ---恢复内容开始--- 直接上代码 internal static class LibVlcAPI { internal struct PointerToArray ...

  6. View中的Razor使用

    View中的Razor使用   上一节:ASP.NET MVC5 + EF6 入门教程 (5) Model和Entity Framework 源码下载:点我下载 一.Razor简介 在解决方案资源管理 ...

  7. ural1519插头DP

    1519. Formula 1 Time limit: 1.0 second Memory limit: 64 MB Background Regardless of the fact, that V ...

  8. Kafka spring 集成

    下载配置kafka参考该链接:http://www.cnblogs.com/super-d2/p/4534323.html pom.xml: <dependency> <groupI ...

  9. android:由URL载入中ImageView

    两种方法: 方法一: Bitmap bimage= getBitmapFromURL(bannerpath); image.setImageBitmap(bimage); public static ...

  10. Retrofit相关资料

    高速Android开发系列网络篇之Retrofithttp://www.w3c.com.cn/%E5%BF%AB%E9%80%9Fandroid%E5%BC%80%E5%8F%91%E7%B3%BB% ...