设为首页收藏本站

LUPA开源社区

 找回密码
 注册
文章 帖子 博客

OpenStack Swift遇到了Erasure Code

2013-7-26 14:59| 发布者: joejoe0332| 查看: 2557| 评论: 0|原作者: CSDN|来自: CSDN

摘要:   南加州大学和Facebook共同完成的Erasure Code演进——LRC,通过增加本地存储容量,提升了平均无故障时间,并减少恢复数据的开销。   作为云计算的核心系统之一,存储系统直接影响了整个系统的成本。七牛云存储 ...

  存储架构——Ring


  Swift目前使用称之为“Ring”环形数据架构,这种架构在集群内建立分布式的分区空间。分区空间是Swift数据副本策略的核心,它可以让 Swift快速、简单的进行同步。当Swift的组件需要进行数据交互时,通过在Ring中进行本地快速查询,为每个副本选择最适合的分区。



图:Swift的哈希Ring


  在Swift中使用了3个环形架构存储不同类型的数据。一个用于存储账户信息(各租户的用户信息),第二个环用于容器(所以非常方便任意账户下的对 象),第三个环用于对象副本。为了支持Erasure Code,据需要建立第四个环,用于存储Erasure Code校验块。


  写入


  在Swift集群中,代理服务器不断的选择适当的存储节点发出请求。当请求存储一个对象时,代理层将对这个对象进行Erasure Code编码生成校验块,这些校验块再不断的写入到择适当的分区中。


  读取


  当请求读取一个Erasure Code的对象时,代理层会同存储服务器间建立适合的连接,并对目标对象进行解码,最后将解码后的数据发送到客户端。当发生某个磁盘故障时,Erasure Code的优势就发挥出来了,只要有足够的校验块就可以重建对象中丢失的部分。


  重建


  在代理层进行编码是有一些优势的。首先,Swift已经这么做了,我们选择站在了巨人的肩膀上。其次,代理服务器上已经准备了强大的CPU,把编码 工作放在这里能更好的发挥CPU的性能。在真实应用场景中,存储容量增速要远远超过并发访问增长需求,因此,编码工作在代理服务器中能够保持低成本运行。


  Handoff Locations策略


  在Swift中已经使用了handoff locations概念,来应对存储数据时发生的硬件或链接故障。同时,当在本地主存储中找不到校验数据是,节点知道如何从相邻的节点找到到它。


  复制


  使用Erasure Code时,我们使用重构器来扫描数据块。Erasure Code的“重构器”检查相邻数据块来确保每个数据块是可用的。若出现故障或者缺损,重构器可以重建块并将其复制到缺损处。


  使用Erasure Code时,我们依然沿用了这种策略比对数据。Erasure Code的“重构器”等同于原有的三副本的恢复形式,通过以快速检查相邻块,以确保个别块保持可用。若出现故障或者缺损,重构器可以重建块并将其复制到缺损处。


  容器的粒度控制


  Swift的容器与AWS S3的 Buckert很相似。他们可以很方便的修改某个账户下的对象的属性,如修改访问控制列表(ACL)。容器非常善于管理一套存储策略,如副本数量或Erasure Code。


  用不同的设备实现Erasure Code


  只要增加数据Ring(详见上文),就能在不同的物理设备上实现Erasure Code。例如,如果分层数据用于归档,就可以使用密度更高的服务器部署,从而降低成本。


  如何权衡


  非常简单,Erasure Code校验文件比文件副本更广泛的存储在服务器中。这就导致数据在读取过程中必须在节点间创建更多的连接,这会让整个系统更加复杂,出现故障的可能性更高,响应请求的时延增长。编码、解码过程也会增加CPU的负担。所有这一切都是要考虑的。


酷毙
1

雷人

鲜花

鸡蛋

漂亮

刚表态过的朋友 (1 人)

  • 快毕业了,没工作经验,
    找份工作好难啊?
    赶紧去人才芯片公司磨练吧!!

最新评论

关于LUPA|人才芯片工程|人才招聘|LUPA认证|LUPA教育|LUPA开源社区 ( 浙B2-20090187 浙公网安备 33010602006705号   

返回顶部