OpenStack Object Storage(Swift)架构、原理及特性

https://yq.aliyun.com/articles/50262 原文

摘要: 简介 OpenStack Object Storage(Swift)是OpenStack开源云计算项目的子项目之一。Swift使用普通的服务器来构建冗余的、可扩展的分布式对象存储集群,存储容量可达PB级。

简介

OpenStack Object Storage(Swift)OpenStack开源云计算项目的子项目之一。Swift使用普通的服务器来构建冗余的、可扩展的分布式对象存储集群,存储容量可达PB级。Swift的是用Python开发,前身是Rackspace Cloud Files项目,随着Rackspace加入到OpenStack社区,Racksapce也将Cloud Files的代码贡献给了社区,并逐渐形成现在Swift。Swift最新的发型版本为essex 1.4.6。

功能

Swift提供的服务与AWS S3基本相同,可以用以下用途:

    • 作为IaaS的存储服务
    • 与OpenStack Compute对接,为其存储镜像
    • 文档存储
    • 存储需要长期保存的数据,例如log
    • 存储网站的图片,缩略图等

· 存储媒体库(照片、音乐、视频等)

· 视频监控文件的存档

· 电话呼叫音频记录的存档

· 压缩日志文件的存档

· 备份存档(每个对象<5GB)

· 存储和加载系统的镜像文件等

· 存储数量不断增加基数庞大的文件

· 存储小型文件 (<50 KB). OpenStack Object Storage擅长于此.

· 存储数以亿计的文件.

· 存储PB级别的数据.

Swift使用RESTful API对外提供服务,目前 1.4.6版本所提供的功能:

  • Account(存储账户)的GET、HEAD
  • Container(存储容器,与S3的bucket相同)的GET、PUT、HEAD、DELETE
  • Object(存储对象)的GET、PUT、HEAD、DELETE、DELETE
  • Account、Container、Object的元数据支持
  • 大文件(无上限,单个无文件最大5G,大于5G的文件在客户端切分上传,并上传manifest文件)、
  • 访问控制、权限控制
  • 临时对象存储(过期对象自动删除)
  • 存储请求速率限制
  • 临时链接(让任何用户访问对象,不需要使用Token)
  • 表单提交(直接从HTML表单上传文件到Swift存储,依赖与临时链接)
  • 静态WEB站点(用Swift作为静态站点的WEB服务器)

特性

优点

通过编程语言封装的API来存储和管理文件

使资源的管理和提取自动化

可以创建公共或私有的容器

更好的控制性。既允许数据共享也可以设为私有

使用商用硬件

没有锁定,每GB更低廉的价格

硬盘驱动器/结点不可预知的失效

具有自我修复的可靠性,数据冗余性来保护失效的影响

无限制的存储

巨大且扁平的名称空间,高度可伸缩的读写访问能力,直接从存储系统提供内容服务

多维可伸缩性(向外扩展的结构)

允许垂直和水平分布地调整存储

以线性的性能来备份/存档大量数据

帐号/容器/对象 没有嵌套,不是传统的文件系统

规模优化,允许百万个PB级别的对象

内建复制

(帐号、容器、对象的N份拷贝)

3x+的数据冗余性与RAID的2x的对比

高可靠性

不同于RAID的大小调整,非常简单的容量增减

简单的弹性的数据调整

没有中央数据库

更高的性能,没有瓶颈

不需要RAID

允许更有效地处理大量小型、随机的读写

内建Mgmt.工具

帐号管理:创建,增加,验证,删除用户

容器管理:上传,下载,验证

监测:容量、主机、网络、日子筛选、集群健康情况

驱动器检查

允许检测驱动器失效,尽早知悉数据受损

通过web浏览器使用VNC代理

快速、简单的命令行管理

架构

在介绍Swift的架构之前,先介绍一下OpenStack的设计原理

  1. Scalability and elasticity are our main goals
    (可扩展性和伸缩性是我们的主要目标)
  2. Any feature that limits our main goals must be optional
    (任何影响到可扩展性和伸缩性的功能都必须是可选的)
  3. Everything should be asynchronous,If you can’t do something asynchronously, see #2
    (所有的环节必须是异步的,如果不能异步实现,参考第二条设计原理)
  4. All required components must be horizontally scalable
    (所有的基础组件必须能横向扩展)
  5. Always use shared nothing architecture (SN) or sharding,If you can’t Share nothing/shard, see #2
    (始终使用无共享的架构,如果不能实现,参见第二条)
  6. Distribute everything,especially logic. Move logic to where state naturally exists.(所有的都是分布式的,尤其是逻辑。把逻辑放在状态应该存在的地方)
  7. Accept eventual consistency and use it where it is appropriate.
    (接受最终一致性,并在适合的条件下使用)
  8. Test everything
    (充足的测试)

依赖组件

  • Memcached,分布式缓存系统,在swift中主要被用于token和account信息,container信息的存储
  • Sqlite,轻量级数据库引擎,在swift中主要被用于管理account和container数据库
  • rsync,远程同步工具,用于storage node之间的数据同步
  • XFS文件系统
  • WSGI,Python Web服务网关接口,通过paste.deploy工具包管理swift各服务进程、中间件的处理流程
  • Eventlet,Python搞并发网络编程库,swift所有的服务器进程均依赖于该库

主要组件

    • Ring文件
      在基本架构图中,我并没有画出ring文件,但是它却是整个Swift中最重要的组件。ring文件是由一致性哈希算法生成,它的主要作用是存储名字到位置的映射。
      ring文件分为三类,分别是:account.ring,container.ring,object.ring。
      对于account的请求,就能通过account_name查询account.ring得到{‘/account_name’ : account_db_position}的映射,从而知道account数据库文件在集群的位置;
      对于container的请求,通过account_name和container_name查询container.ring文件,得到{‘/account_name/container_name’ : container_db_position}的映射;
      对于object的请求,通过account_name,container_name,object_name查询object.ring文件,得到
      {‘/account_name/container_name/object_name’ : object_position}的映射;
      Ring文件作为一个静态文件存储在每个节点的/etc/swift目录下,被用于各节点之间的位置查询,使得swift的内部网络是一个P2P网络,不依赖某几个节点进行位置查询,避免了单点瓶颈。
      生成ring文件的一致性哈希算法不但为数据的冗余性,分区容忍性提供了保证,也为整体架构上实现性能、容量的横向扩展奠定了基础。
      Ring的详细构造过程将在下一节介绍。
    • proxy-server
      proxy-server是proxy node中唯一运行的服务进程,也是swift集群的endpoint,向用户提供RESTful API。
      对于用户的请求,proxy-server会根据配置文件的配置,将请求交给各个中间件进行处理,其中最重要的就是Auth中间件(认证),在处理完成后
      会根据请求路径将请求转发给相应的storage
      node中的account-server。container-server或object-server进程处理。
      swift集群的流入数据和流出数据都需要经过proxy-server,proxy-server不会对数据进行缓存。
    • auth-server
      验证服务进程,为用户生成token和验证每个请求的token及token的权限。swift的验证服务是作为一个中间件被proxy-server使
      用,是可选的,可以自己开发,也可以使用OpenStack
      Keystone。Keystone是官方开发的验证服务,使用Keystone可以无缝的与其它OpenStack项目整合。
    • account-server
      account-server是storage node中负责处理对account的GET、HEAD、PUT、DELETE、RELICATION请求的服务进程,account-server使用sqlite的数据库文件保存account的相关信息。
    • container-server
      container-server是storage
      node中负责处理对container的GET、HEAD、PUT、DELETE、RELICATION请求的服务进程,container-
      server使用sqlite的数据库文件保存container的相关信息。
    • object-server
      object-server是storage
      node中负责处理对object的GET、HEAD、PUT、PSOT、DELETE、RELICATION请求的服务进程,object-
      server直接操作object,并利用XFS文件系统的xattr包存object的元数据。
    • account-auditor、container-auditor、object-auditor
      这三个进程运行在storage node中,分别检测account的db文件,container的db文件,object是否损坏,如果损坏,将会向存储有其它副本的storage node请求副本,替换损坏的。
    • account-replicator、container-replicator、object-replicator
      这三个进程运行在storage node中,分别负责account的db文件,container的db文件,object在集群中副本的同步。
      例如,一个object在swift集群中通常被存储在3个不同的storage node中,对于一个PUT
      /account/container/object的请求,proxy-server会根据
      /account/container/object查询ring文件,得到该object应该存储的节点列表(长度为3),proxy-server会
      将请求转发到这三个节点。如果只有两个节点写入成功,就认为这次PUT操作成功。写入失败的节点在一段时间后将会得到写入成功的节点object-
      replicator进程推送过来的数据。
    • container-updater、account-updater
      这两个进程运行在storage
      node中,负责container数据库和account数据库的异步更新。使用异步更新的原因:在请求来量大时,container-server和
      account-server不能实时处理对数据库更新的请求,这些请求将被本地化到队列中,由updater进程进行异步更新。
    • What’s limitations of Swift?

    • 不是文件系统

      Swift使用REST API,因此不能使典型的POSIX 文件系统的语法如open(), read(), write(), seek()和close()。

      没有目录结构

      可以创建任意数量的容器,但是不支持嵌套

      在文件中没有写入字节偏移量

      The only way to update a file is to essentially overwrite it. The system creates a new version of an object each time you upload one with the same name.

      上传一个文件的唯一方式本质上就是重写这个文件。当你上传一个相同名字的对象时,系统就创建这个对象的新版本。

      不是数据库

      不支持服务器上的数据查询和处理。值可以列出指定容器内的对象,但是不能基于对象的元数据进行查询。

      不要尝试频繁地更新大对象

      所有的更新将会产生对象的新版本,因为对象是不可变的。

      不要在每个容器内存储超过无限的对象

      adrian otto 发现当容器的对象数超过100万个对象时,将会影响性能。

swift简介(东拼西凑,看看就的了)的更多相关文章

  1. swift 简介和常量与变量 --- swift 入门

    一.思维导图 二. 代码 //创建UIView 和按钮 let views = UIView(frame: CGRect(x:20, y: 20, width: 100, height: 100))/ ...

  2. Swift 简介

    1.swift支持所有C和Obeject-c的基本类型,支持面向过程和面向对象的编程机制. 2.swift提供了2种功能强劲的集合类型:数组和字典 3.元祖 4.可选类型 5.swift 是一种类型安 ...

  3. 01_Swift2基础之Swift简介+创建

    1.Swift 1> Swift初影响 Swift 是新一代的 iOS.OS X 和 watchOS 和 tvOS 的app开发编程语言. 中文名"雨燕",寓意为敏捷.灵巧而 ...

  4. 来自苹果的编程语言——Swift简介转载】

    关于 这篇文章简要介绍了苹果于WWDC 2014发布的编程语言——Swift. 原文作者: Lucida Blog 新浪微博 豆瓣 转载前请保留出处链接,谢谢. 前言 在这里我认为有必要提一下Brec ...

  5. 转 苹果的新编程语言 Swift 简介

    苹果官方文档地址 https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Pro ...

  6. swift简介

    概述 Swift是苹果2014年推出的全新的编程语言,它继承了C语言.ObjC的特性,且克服了C语言的兼容性问题.Swift发展过程中不仅保留了ObjC很多语法特性,它也借鉴了多种现代化语言的特点,在 ...

  7. Swift入门篇-swift简介

    潜水博客园很多年,闲来无事,聊一下自己的经历,语文不好(如有什么错别字,请您在下评论)望您谅解,没有上过什么学的 在前期 ios入门篇 -hello Word(1) 文章中介绍我这半年准备写一些ios ...

  8. 【转载】来自苹果的编程语言——Swift简介

    本文转自Lucida的博客 (新浪微博.豆瓣)   这篇文章简要介绍了苹果于WWDC 2014发布的编程语言——Swift.   前言   在这里我认为有必要提一下Brec Victor的Invent ...

  9. [转]Swift 简介 - 苹果最新的编程语言

    Swift 真的可以说是最新的编程语言了,2014wwdc刚刚发布,下面来了解一下都有哪些特点. 首先感谢原作者,主要内容是借鉴他的,参考链接 http://zh.lucida.me/blog/an- ...

随机推荐

  1. Jekyll本地搭建开发环境以及Github部署流程

    转载自: http://www.jianshu.com/p/f37a96f83d51 前言 博客从wordpres迁移到Jekyll上来了,整个过程还是很顺利的.Jekyll是什么?它是一个简单静态博 ...

  2. Elasticsearch系列---初识mapping

    概要 本篇简单介绍一下field数据类型mapping的相关知识. mapping是什么? 前面几篇的实战案例,我们向Elasticsearch索引数据时,只是简单地把JSON文本放在请求体里,至于J ...

  3. C# 动态类型 以及 脚本调用(scriptRunTime)

    在使用中让我感觉 好像 JavaScript中的 动态类型囧 先看动态类型 class Program { static void Main(string[] args) { var streamRe ...

  4. Vue CLI 3搭建vue+vuex 最全分析

    一.介绍 Vue CLI 是一个基于 Vue.js 进行快速开发的完整系统.有三个组件: CLI:@vue/cli 全局安装的 npm 包,提供了终端里的vue命令(如:vue create .vue ...

  5. np.multiply

    用法:np.multiply(x1,x2),作用:逐元素相乘,若x1和x2均为标量,则返回标量 x1=np.array([,,]) x2=np.array([,,]) np.multiply(x1,x ...

  6. mysql修改字符集为utf8

    https://zhidao.baidu.com/question/1642165712897935220.html

  7. 计划任务cron,date,时间同步ntp,chrony

    取出磁盘利用率最大值 ,写个脚本,做判断,只要快满了,就报警 计划周期性执行的任务提交给crond,到指定时间会自动运行 系统cron任务:系统维护作业  /etc/crontab 用户cron任务: ...

  8. iOS 上通过 802.11k、802.11r 和 802.11v 实现 Wi-Fi 网络漫游

    在 iOS 上通过 802.11k.802.11r 和 802.11v 实现 Wi-Fi 网络漫游 了解 iOS 如何使用 Wi-Fi 网络标准提升客户端漫游性能. iOS 支持在企业级 Wi-Fi ...

  9. N3K异常重启(案例)

    在实际的情况下,有时候会遇到设备无故重启的问题,这个时候,我们需要判断一下重启的根本原因是什么,是否有规避的方法等. 这里记录了几个N3K异常重启的问题. 案例1: 设备型号:N3K-C3048TP- ...

  10. IDEA中常用优化设置

    1.设置鼠标悬浮提示 Editor->General 这里要勾选下,后面设置的是延迟时间 默认半秒:设置后,我们鼠标移动到类上看看: 2.显示方法分隔符 Editor->General - ...