swift简介(东拼西凑,看看就的了)
OpenStack Object Storage(Swift)架构、原理及特性
摘要: 简介 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的设计原理:
- Scalability and elasticity are our main goals
(可扩展性和伸缩性是我们的主要目标) - Any feature that limits our main goals must be optional
(任何影响到可扩展性和伸缩性的功能都必须是可选的) - Everything should be asynchronous,If you can’t do something asynchronously, see #2
(所有的环节必须是异步的,如果不能异步实现,参考第二条设计原理) - All required components must be horizontally scalable
(所有的基础组件必须能横向扩展) - Always use shared nothing architecture (SN) or sharding,If you can’t Share nothing/shard, see #2
(始终使用无共享的架构,如果不能实现,参见第二条) - Distribute everything,especially logic. Move logic to where state naturally exists.(所有的都是分布式的,尤其是逻辑。把逻辑放在状态应该存在的地方)
- Accept eventual consistency and use it where it is appropriate.
(接受最终一致性,并在适合的条件下使用) - 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简介(东拼西凑,看看就的了)的更多相关文章
- swift 简介和常量与变量 --- swift 入门
一.思维导图 二. 代码 //创建UIView 和按钮 let views = UIView(frame: CGRect(x:20, y: 20, width: 100, height: 100))/ ...
- Swift 简介
1.swift支持所有C和Obeject-c的基本类型,支持面向过程和面向对象的编程机制. 2.swift提供了2种功能强劲的集合类型:数组和字典 3.元祖 4.可选类型 5.swift 是一种类型安 ...
- 01_Swift2基础之Swift简介+创建
1.Swift 1> Swift初影响 Swift 是新一代的 iOS.OS X 和 watchOS 和 tvOS 的app开发编程语言. 中文名"雨燕",寓意为敏捷.灵巧而 ...
- 来自苹果的编程语言——Swift简介转载】
关于 这篇文章简要介绍了苹果于WWDC 2014发布的编程语言——Swift. 原文作者: Lucida Blog 新浪微博 豆瓣 转载前请保留出处链接,谢谢. 前言 在这里我认为有必要提一下Brec ...
- 转 苹果的新编程语言 Swift 简介
苹果官方文档地址 https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Pro ...
- swift简介
概述 Swift是苹果2014年推出的全新的编程语言,它继承了C语言.ObjC的特性,且克服了C语言的兼容性问题.Swift发展过程中不仅保留了ObjC很多语法特性,它也借鉴了多种现代化语言的特点,在 ...
- Swift入门篇-swift简介
潜水博客园很多年,闲来无事,聊一下自己的经历,语文不好(如有什么错别字,请您在下评论)望您谅解,没有上过什么学的 在前期 ios入门篇 -hello Word(1) 文章中介绍我这半年准备写一些ios ...
- 【转载】来自苹果的编程语言——Swift简介
本文转自Lucida的博客 (新浪微博.豆瓣) 这篇文章简要介绍了苹果于WWDC 2014发布的编程语言——Swift. 前言 在这里我认为有必要提一下Brec Victor的Invent ...
- [转]Swift 简介 - 苹果最新的编程语言
Swift 真的可以说是最新的编程语言了,2014wwdc刚刚发布,下面来了解一下都有哪些特点. 首先感谢原作者,主要内容是借鉴他的,参考链接 http://zh.lucida.me/blog/an- ...
随机推荐
- Jekyll本地搭建开发环境以及Github部署流程
转载自: http://www.jianshu.com/p/f37a96f83d51 前言 博客从wordpres迁移到Jekyll上来了,整个过程还是很顺利的.Jekyll是什么?它是一个简单静态博 ...
- Elasticsearch系列---初识mapping
概要 本篇简单介绍一下field数据类型mapping的相关知识. mapping是什么? 前面几篇的实战案例,我们向Elasticsearch索引数据时,只是简单地把JSON文本放在请求体里,至于J ...
- C# 动态类型 以及 脚本调用(scriptRunTime)
在使用中让我感觉 好像 JavaScript中的 动态类型囧 先看动态类型 class Program { static void Main(string[] args) { var streamRe ...
- Vue CLI 3搭建vue+vuex 最全分析
一.介绍 Vue CLI 是一个基于 Vue.js 进行快速开发的完整系统.有三个组件: CLI:@vue/cli 全局安装的 npm 包,提供了终端里的vue命令(如:vue create .vue ...
- np.multiply
用法:np.multiply(x1,x2),作用:逐元素相乘,若x1和x2均为标量,则返回标量 x1=np.array([,,]) x2=np.array([,,]) np.multiply(x1,x ...
- mysql修改字符集为utf8
https://zhidao.baidu.com/question/1642165712897935220.html
- 计划任务cron,date,时间同步ntp,chrony
取出磁盘利用率最大值 ,写个脚本,做判断,只要快满了,就报警 计划周期性执行的任务提交给crond,到指定时间会自动运行 系统cron任务:系统维护作业 /etc/crontab 用户cron任务: ...
- iOS 上通过 802.11k、802.11r 和 802.11v 实现 Wi-Fi 网络漫游
在 iOS 上通过 802.11k.802.11r 和 802.11v 实现 Wi-Fi 网络漫游 了解 iOS 如何使用 Wi-Fi 网络标准提升客户端漫游性能. iOS 支持在企业级 Wi-Fi ...
- N3K异常重启(案例)
在实际的情况下,有时候会遇到设备无故重启的问题,这个时候,我们需要判断一下重启的根本原因是什么,是否有规避的方法等. 这里记录了几个N3K异常重启的问题. 案例1: 设备型号:N3K-C3048TP- ...
- IDEA中常用优化设置
1.设置鼠标悬浮提示 Editor->General 这里要勾选下,后面设置的是延迟时间 默认半秒:设置后,我们鼠标移动到类上看看: 2.显示方法分隔符 Editor->General - ...