OpenStack Swift 对象存储及其存储策略简介

Swift 2.0 于 2014 年 7 月 8 日发布,其中最重要的新特性是存储策略(Storage Policy),该特性改变了以往存储系统中存储策略由设计与实施方决定的做法,让用户能够以 Container 为粒度,为不同需求的数据指定不同的副本数量、不同参数的纠删码、不同性能的存储介质、不同地理位置、不同的后端存储设备。存储策略充分体现了 Swift"软件定义存储"(Software Defined Storage)的特点。

为了实现存储策略,Swift 在原先三个环(Ring)的架构基础上进行了改进。Swift 为账户、容器和对象分别定义了的环,通过环将虚拟节点(分区)映射到一组物理存储设备上。在 Swift 2.0 中,每个存储策略对应一个 Object Ring。

Swift 存储策略的配置与使用

配置存储策略

设置存储策略分为两步:编辑配置文件 swift.conf 文件,创建相应的 Object Ring。在配置文件中每个存储策略以[storage-policy:N]开头,其中 N 是策略的编号。对于该文件的解析遵循以下规则:

  1. 如果该文件中没有声明任何策略,Swift 会自己创建一个;
  2. 策略编号应当位非负整数;
  3. 如果没有声明默认策略,Swift 会把编号为 0 的策略设为默认策略;
  4. 策略编号必须唯一;
  5. 策略应当具有名字,策略命名区分大小且必须唯一;
  6. 策略名称只能包含字母、数字和连字符,"Policy-0"只能用于编号为 0 的策略;
  7. 定义策略之后,应当有一个且仅有一个策略被指定为默认策略;
  8. "废弃"(Deprecated)策略不能同时为默认策略。

下面是一个 swift.conf 文件的示例:

[swift-hash]
# random unique strings that can never change (DO NOT LOSE)
swift_hash_path_prefix = changeme
swift_hash_path_suffix = changeme

[storage-policy:0]
name = apple
default = yes

[storage-policy:1]
name = orange
deprecated = yes

完成 swift.conf 文件的编辑,下一步是为每个存储策略创建相应的 Object Ring,方法和创建老版本 Object Ring 类似,只是要在 object 后面加上"-N",这里的 N 是存储策略的编号。例如,为上述编号为 0 和 1 的存储策略创建 Object Ring:

swift-ring-builder object-0.builder create 10 3 1
swift-ring-builder object-1.builder create 10 2 1

使用存储策略

存储策略的使用非常简单,只需要在创建 container 是指定存储策略即可,下面以 SAIO 部署为例加以说明:

curl -v -X PUT -H 'X-Auth-Token: <your auth token>' -H \
    "X-Storage-Policy: orange" \
    http://127.0.0.1:8080/v1/AUTH_test/myCont1
curl -X PUT -v -T file1.txt -H 'X-Auth-Token: <your auth token>' \
http://127.0.0.1:8080/v1/AUTH_test/myCont1/

然后执行:

curl -X GET –v \
 http://127.0.0.1:8080/endpoints/AUTH_test/myCont1/file1.txt

例如,会看到如下结果:

["http://127.0.0.1:6010/sdb1/32/AUTH_test/myCont1/file1.txt","http://127.0.0.1:6040/sdb4/32/AUTH_test/myCont1/file1.txt"]

说明 Storage Policy 已经成功发挥作用。

存储策略的应用模式

上述提到副本数量的改变,只是存储策略的应用模式的一种,在实际应用中,可以有以下几种模式:

  1. 缩减或增加冗余

    对于一些数据,它们不需要保证很高的数据持久性和可靠性,比较典型的是图像的缩略图,它们可以由原图降采样得到,在这种情况下,可以对原图采用三副本方案,对缩略图采用双副本方案,降低存储系统的开销。

    图 1.为不同的 Container 指定不同的副本数量
  2. 性能分层

    例如,对于一些数据用 HDD 保存,另一些用 SSD 保存。也可以应用于其他存储介质,甚至是不同的存储设备。

    图 2.为不同的 Container 指定不同的存储介质
  3. 地理位置约束

    在某些场景下,因为公司或者国家的政策的约束,某些数据必须存储在指定的地理位置,例如混合云场景。有些场景下,用户希望指定数据存放在距离访问客户端比较近的地方。

    图 3.为不同的 Container 指定不同的存储位置
  4. 应用纠删码(Erasure Codes)

    对于性能要求不高的场合,应用纠删码。纠删码,又称为删除码,将对象分割为m个分片(fragments),并通过编码生成k个校验分片,最后将这n=m+k个分片放到 Swift 对象存储系统的不同位置(通常是 swift 的不同 zone 中)。对于将 m 个分片编码为 n 个分片的纠删码,记为EC(m,n)。纠删码的示意图如下:

    图 4.纠删码示意图

    纠删码在提高存储空间利用率的同时,保持或增加数据的持久性(durability)和可靠性。但是由于编码、解码和恢复数据往往需要较大的计算量,可能导致性能的降低,所以比较适用于对持久性和可靠性要求比较高,但是访问量并不大的数据存储。

    图 5 .应用纠删码保护数据
回页首

在某视频网站中的应用案例

在某视频网站中,采用 Swift 存储视频文件,并对其部分文件根据视频类型的不同应用不同的存储策略。

视频数据分为三类:1)源片;2)超清视频文件;3)其他不同清晰度的视频文件。源片体积较大,对持久性要求高,但是对访问速度要求较低,并发访问数量和访问频率较低;清晰度较低的视频由超清视频转码得到,针对上述需求,设计存储策略如下:

  1. 源片采用纠删码策略,编码参数为EC(7,4),即把一个视频文件分割为 4 块,并生成 3 块校验块,存储效率约为 57%;
  2. 超清视频三副本策略,存储效率约为 33%;
  3. 清晰度较低的视频采用双副本策略,存储效率为 50%。

假设设备损坏的概率为 2%,以上三种存储策略的数据持久性分别为:99.9995%,99.9992%和 99.96%。

表 1.存储策略的应用
数据类型 存储策略 存储效率 数据持久性
源片 纠删码EC(7,4) 57% 99.9995%
超清视频文件 三副本 33% 99.9992%
其他分辨率视频文件 双副本 50% 99.96%

Swift 集群的总结点数量为 54 个节点,总容量约为 2.3PB,集群的部署架构如下图所示,其中 Proxy Server 的数量可以根据需要增加或者减少。采用传统三副本方案,能够保存的视频总长度约为(同一段视频不同分辨率不进行重复统计)3.97×106 分钟。

采用上述存储策略后,保存的视频总长度为 5.89×106 分钟,存储效率提高了 48%。

图 6. 基于 Swift 的视频存储系统的部署架构
回页首

结束语

在大数据时代,随着文件数量和数据体量的增加,文件系统和 NAS 的瓶颈越来越明显,基于 RESTful Web API 的对象存储逐渐受到人们的广泛接受。作为最具代表性,应用最广泛的开源对象存储方案,OpenStack Swift 自诞生以来一直保持着技术上领先的地位,在 Swift 2.0 中推出的存储策略功能,能够让管理员根据自己系统的特点制定不同的存储策略;用户或租户根据自己数据的特点和业务需要,以 Container 为粒度选择存储策略,从而实现成本、数据可靠性、性能等维度上的综合权衡和优化,体现了软件定义存储的特点。本文只是对存储策略做了一个简要的介绍,让读者体会存储策略的用途,进一步深入探索可以查看参考资料了解有关 OpenStack Swift 的更多相关信息。

参考资料

学习

  • SwiftStack Blogs:https://www.swiftstack.com/blog/
  • Intel IDF13: OpenStack* Swift Erasure Code: A Smart Cloud Storage Solutionhttp://intelstudios.edgesuite.net/idf/2013/sf/aep/CLDS007/CLDS007.html?wapkw=swift
  • OpenStack Swift官方文档http://docs.openstack.org/developer/swift/index.html
  • 基于纠删码保护分布式对象存储的数据http://www.iwccsp.org/CloudConnect20140918Microwise.pdf


原文链接:http://www.ibm.com/developerworks/cn/cloud/library/1411_limy_openstackswift/?cmp=dwskl&cpb=dw&ct=dwcon&cr=cn_CSDN_t10_1&ccy=cn

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

OpenStack Swift 存储策略的更多相关文章

  1. openstack swift ring文件解析

    一直以为对swift的ring文件充满好奇,这段时间重新研究swift,正好借此机会好好研究下。

  2. KeyStone安装部署笔记

    KeyStone客户端:OpenStack身份服务API的命令行接口。OpenStack出于扩展性的考虑也支持多个region。下面的命令在regionOne创建了keystone的三种端点:为admin租户和用户申请令牌:最后验证admin租户和用户:输出结果验证了身份服务工作正常,Keystone安装部署成功。

  3. OpenStack对象存储――Swift

    Swift前身是RackspaceCloudFiles项目,随着Rackspace加入到OpenStack社区,于2010年7月贡献给OpenStack,作为该开源项目的一部分。Swift目前的最新版本是OpenStackEssex1.5.1。Swift特性在OpenStack官网中,列举了Swift的20多个特性,其中最引人关注的是以下几点。在OpenStack中还可以与镜像服务Glance结合,为其存储镜像文件。Auth认证服务目前已从Swift中剥离出来,使用OpenStack的认证服务Keysto

  4. OpenStack之swift安装笔记

    安装过程依然参考的是OpenStack的官方安装手册,但补充了一些细节。OpenStack的对象存储是一个多租户的、高可扩展的对象存储系统,通过RESTfulHTTPAPI管理着大量的非结构化数据,在部署对象存储之前必须至少安装了身份服务。首先在KeyStone中创建Swift的用户、服务及endpoint,具体命令及结果如下:然后安装proxy-server,swift客户端、memcached等:yuminstallopenstack-swift-proxypython-swiftclientpyth

  5. OpenStack入门到实战视频教程全集下载罗勇老师经典教程系列

    全网最经典的openstack视频教程,现在免费了!罗老师讲得实在是太好了,目前绝对是全网最好的openstack入门视频,而且讲得特别细,非常适合初学者学习,收集了好久终于齐了,现在贡献给大家。

  6. OpenStack Swift 存储策略

    OpenStackSwift对象存储及其存储策略简介Swift2.0于2014年7月8日发布,其中最重要的新特性是存储策略,该特性改变了以往存储系统中存储策略由设计与实施方决定的做法,让用户能够以Container为粒度,为不同需求的数据指定不同的副本数量、不同参数的纠删码、不同性能的存储介质、不同地理位置、不同的后端存储设备。本文只是对存储策略做了一个简要的介绍,让读者体会存储策略的用途,进一步深入探索可以查看参考资料了解有关OpenStackSwift的更多相关信息。

  7. OpenStack Swift源码导读:业务整体架构和Proxy进程

    OpenStack的源码分析在网上已经非常多了,针对各个部分的解读亦是非常详尽。其中proxy是前端的业务接入进程。account、container和object目录分别是账户、容器和对象的业务处理逻辑进程。各个业务进程或模块之间的逻辑关系可以参考《OpenstackSwift简介》文中的架构图。在《OpenstackSwift简介》从理论上面介绍了具体的节点寻找过程。

  8. cinder swift的区别

    [原]OpenStack入门以及一些资料之2014-4-29阅读1144评论0注:本文内容均来自网络,我只是在此做了一些摘抄和整理的工作,来源均有注明。它拥有自己的文件系统,通过网络文件系统NFS或通用文件系统CIFS对外提供文件访问服务。Raid,不同的raid等级在增加数据可靠性以及增加存储器(群)读写性能间取得平衡。卷组描述区域,和磁盘将包含分区信息的元数据保存在位于分区的起始位置的分区表中一样,逻辑卷以及卷组相关的元数据也是保存在位于物理卷的VGDA中。

  9. 《转》OpenStack对象存储——Swift

    Swift前身是RackspaceCloudFiles项目,随着Rackspace加入到OpenStack社区,于2010年7月贡献给OpenStack,作为该开源项目的一部分。Swift目前的最新版本是OpenStackEssex1.5.1。Swift特性在OpenStack官网中,列举了Swift的20多个特性,其中最引人关注的是以下几点。在OpenStack中还可以与镜像服务Glance结合,为其存储镜像文件。Auth认证服务目前已从Swift中剥离出来,使用OpenStack的认证服务Keysto

  10. Openstack swift对象存储

    Swift提供的服务与AWSS3基本相同:作为IaaS的存储服务与OpenStackCompute对接,为其存储镜像文档存储存储需要长期保存的数据,例如log存储网站的图片,缩略图等Swift使用RESTfulAPI对外提供服务,目前1.4.6版本所提供的功能:Account的GET、HEADContainer的GET、PUT、HEAD、DELETEObject的GET、PUT、HEAD、DELETE、DELETEAccount、Container、Object的元数据支持大文件、访问控制、权限控制临时对

随机推荐

  1. Swift UITextField,UITextView,UISegmentedControl,UISwitch

    下面我们通过一个demo来简单的实现下这些控件的功能.首先,我们拖将这几个控件拖到storyboard,并关联上相应的属性和动作.如图:关联上属性和动作后,看看实现的代码:

  2. swift UISlider,UIStepper

    我们用两个label来显示slider和stepper的值.再用张图片来显示改变stepper值的效果.首先,这三个控件需要全局变量声明如下然后,我们对所有的控件做个简单的布局:最后,当slider的值改变时,我们用一个label来显示值的变化,同样,用另一个label来显示stepper值的变化,并改变图片的大小:实现效果如下:

  3. preferredFontForTextStyle字体设置之更改

    即:

  4. Swift没有异常处理,遇到功能性错误怎么办?

    本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请发送邮件至dio@foxmail.com举报,一经查实,本站将立刻删除。

  5. 字典实战和UIKit初探

    ios中数组和字典的应用Applicationschedule类别子项类别名称优先级数据包contactsentertainment接触UIKit学习用Swift调用CocoaTouchimportUIKitletcolors=[]varbackView=UIView(frame:CGRectMake(0.0,0.0,320.0,CGFloat(colors.count*50)))backView

  6. swift语言IOS8开发战记21 Core Data2

    上一话中我们简单地介绍了一些coredata的基本知识,这一话我们通过编程来实现coredata的使用。还记得我们在coredata中定义的那个Model么,上面这段代码会加载这个Model。定义完方法之后,我们对coredata的准备都已经完成了。最后强调一点,coredata并不是数据库,它只是一个框架,协助我们进行数据库操作,它并不关心我们把数据存到哪里。

  7. swift语言IOS8开发战记22 Core Data3

    上一话我们定义了与coredata有关的变量和方法,做足了准备工作,这一话我们来试试能不能成功。首先打开上一话中生成的Info类,在其中引用头文件的地方添加一个@objc,不然后面会报错,我也不知道为什么。

  8. swift实战小程序1天气预报

    在有一定swift基础的情况下,让我们来做一些小程序练练手,今天来试试做一个简单地天气预报。然后在btnpressed方法中依旧增加loadWeather方法.在loadWeather方法中加上信息的显示语句:运行一下看看效果,如图:虽然显示出来了,但是我们的text是可编辑状态的,在storyboard中勾选Editable,再次运行:大功告成,而且现在每次单击按钮,就会重新请求天气情况,大家也来试试吧。

  9. 【iOS学习01】swift ? and !  的学习

    如果不初始化就会报错。

  10. swift语言IOS8开发战记23 Core Data4

    接着我们需要把我们的Rest类变成一个被coredata管理的类,点开Rest类,作如下修改:关键字@NSManaged的作用是与实体中对应的属性通信,BinaryData对应的类型是NSData,CoreData没有布尔属性,只能用0和1来区分。进行如下操作,输入类名:建立好之后因为我们之前写的代码有些地方并不适用于coredata,所以编译器会报错,现在来一一解决。

返回
顶部