Swift是OpenStack云存储服务的重要组件,它提供了高可用、分布式、持久性、大文件的对象存储服务。此外Swift还可以利用一系列的便宜硬件存储设备,提供安全、可靠的存储服务。


问:为什么使用Swift?它有什么优点?

1:数据的持久性

数据的持久性是衡量存储系统的重要指标。持久性就是指用户的数据存储到系统中后丢失的可能性。为了防止数据的丢失,提高数据的持久性,Swift采用冗余Replica(副本)的处理方法,Replica的默认值为3.


2:架构对称性

对称性是指Swift架构设计上,每个服务器节点的功能和作用是相等的,而不是采用HDFS(hadoop distributed file system)主从架构。因为采用主从架构,往往会因为master的压力过大,增加维护的困难,一旦master节点挂掉,便会导致服务的不可靠性。而对称性的便利就是系统维护简单,且不会因为某个节点挂掉,对服务造成影响


3:无单节点故障

Swift采用对称性设计,所以每个节点的地位完全相等,所以没有一个节点是单点的。即系统的性能不会因为某个节点的实效而造成整个系统不可用。此外Swift对元数据(数据的描述信息,如所有者,权限,类型等)的处理与对象文件的存储方式相同,即都是采用完全多份均匀随机分布存储。


4:可扩展性

当王Swift中新加入一个节点时,会带来

  1. 存储容量增加

  2. 系统性能上升

因为是对称架构,所以系统的扩展也相对简单。但新加入的节点,其并未存储数据,而为了保证新节点与旧节点的地位平等,就必然要将Swift上已经存储的数据迁移到新的节点上。


所以面临的问题之一就是,随着存储数据量的增大,会面临大量的数据迁移,从而增加了迁移的难度和消耗的时间。而这也是制约swift系统推广的原因之一


5:简单可靠

Swift采用的原理比较简单。其架构设计、代码和算法都比较易懂、且还提供了较高的可靠性、且维护也比较容易


Swift的架构


Swift中的服务器主要有以下3种

  1. 认证节点,即提供身份的验证

    如果只单独使用Swift的话,其验证服务可以直接使用Swift内置的认证服务,并将此内置的认证服务放在认证节点上;而如果将Swift放在OpenStack中的话,那么Swift就会才用keystone提供的认证服务,而此时认证节点就不属于Swift了

2.代理节点,转发客户端的请求给Swift + 提供Swift API服务进程

Proxy server提供了Rest-full API,这让开发者可以基于Swift API构建自己的应用程序


3.存储节点,将磁盘存储服务转换为Swift中的存储服务,由于存储目标的不同,存储节点上运行的 存储服务也分为以下三种:


Object Server:对象服务(即指用户要存储的数据)提供了二进制大对象存储服务,对象数据是直接利用文件系统的存储功能,但是对象的元数据是存放在文件系统的扩展属性中的,因此Object Server 需要底层文件系统提供扩展属性


Container Server:容器服务(容器之存储组件,可以将容器理解为文件夹,但是容器不能 像文件夹那样进行嵌套)主要处理对象列表。但从容器到对象是单一映射关系,即容器服务不知道对象存放在哪个容器上,但却知道容器上存放了那些对象。这部分信息以文件的形式存放,采用完全均匀随机多份存储(与对象数据的存储方式一样)唯一不同的是采用的是sqlite格式进行存储(一种轻型关联式,嵌套式的数据库,占用资源非常少,在嵌入式中均有使用)

Account Server:账户服务主要是处理容器列表,除此之外账户与容器服务并无什么不同


一个简单的Swift部署实例就是将对象服务,容器服务,账户服务都部署在存储节点上。如果采用这种方式部署且保证硬件的配置相同,则存储节点的地位是平等的。


Swift故障处理


Swift的真正难点在于,由于数据的损坏或者物理硬件故障造成了数据的不一致性!

存储系统一般采用完全均匀随机多备份的方式避免丢失的数据,不过也因此带来了多个备份之间的数据可能不一致的问题。比如一个文件有3个备份,分别存放在A、B、C服务器上,但是由于A服务器突然断电等意外情况,等重启之后A的数据肯定一B和C的不同


而Swift主要采用下面三个服务来保证在遇到故障时保证数据的一致性:


Auditor:审计服务,审计器会反复检测账户、容器、对象的一致性。一旦发现某个文件的数据不完整,会立刻将此文件隔离。然后Auditor会通知Replication复制器,让其从其他一直的副本复制并替换此文件。如果出现其他错误,如所有的副本都挂了,则会将此错误信息记录入日志


Updater:更新器的主要作用是延迟更新。延迟的主要原因是为了因对用户数据上传的过程中出现故障或者异常。在正常的情况下,其更新顺序为:用户上传数据成功后,Object Server向Container Server发起通知,通知Container Server某个Container中新加入了一个Object。Container Server收到该通知,更新好Object列表后,会向Account Server发起通知。Container Server收到通知并更新Container 列表。而这是理想的更新顺序。

在实际应用中,由于网络断开、系统高负载、磁盘写入等待等各种原因的干扰,都有可能导致更新的失败,而当某个更新失败之后,此次更新的操作会被加入到更新队列中,然后由Updater处理这些失败了的更新工作。


Replicator:复制器负责用完整的副本替换掉损坏的数据。通常会每隔一段时间自动扫描一下本地文件的hash值,并将此hash值与远端的其他副本进行对比,如果不同,则会做出相应的复制替换操作

OpenStack之Swift学习的更多相关文章

  1. ios – 重新创建Persistant Store后的核心数据错误

    在我的应用程序中,我能够清除数据库中的所有数据.完成此操作后,将解析捆绑的JSON,然后将其保存到数据库(以便将数据库返回到默认状态).解析和保存此JSON的操作在任何情况下都可正常工作,除非在清除并重新创建持久性存储之后,在这种情况下我得到’NSinvalidargumentexception’,原因:’无法从此NSManagedobjectContext的协调器访问对象的持久存储’.在保存在后

  2. core-data – 错误: – [UIImage _deleteExternalReferenceFromPermanentLocation]无法识别的选择器发送到实例

    当我删除包含图像的托管对象时,在外部记录中存储为可转换值,然后我崩溃并出现此错误:解决方法我在AppleDeveloperforums回答了类似的事情.我猜你在数据建模器中的那个字段上选择了外部存储复选框.有一个bug可以解决.我是这样做的:一旦更新了数据并保存了上下文,任何删除它的尝试都会引发这个“无法识别的选择器”异常.要强制可以响应_deleteExternalReferenceFromPe

  3. ios – 通过objectID获取NSManagedObjects数组返回空数组

    TL;DR其持久性存储协调器不再在内存中的NSManagedobjectID会丢失其NSEntityDescription(实体),并且不会将等同于来自不同持久性存储协调器的NSManagedobjectID,即使它们的URIRepresentation相同也是如此.沿着兔子洞甜蜜……),因为这些objectID来自的PSC现在不再在内存中,并且NSManagedobjectID必须保持对必须由PSC持有的NSEntityDescription(实体)的一周引用.正如评论者所怀疑的那样,零实体似乎会引起问

  4. ios – NSPersistentStoreCoordinator有两种类型的持久存储?

    在iOS应用程序中,我想使用NSPersistentStoreCoordinator和NSIncrementalStore子类,用于从RESTAPI获取数据,也可以使用sqlite存储来保存到磁盘.但是,如果我将两种类型的持久性存储添加到我的协调器中,那么在我的托管对象上下文中调用save:没有任何效果.如果我只添加一个持久存储,而不是我的NSIcrementalStore子类的类型,那么保存按照

  5. Swift37/90Days - iOS 中的设计模式 (Swift 版本) 02

    )更新声明翻译自IntroducingiOSDesignPatternsinSwift–Part2/2,本教程objc版本的作者是EliGanem,由vincentNgo更新为Swift版本。如何使用适配器模式横滑的滚动栏理论上应该是这个样子的:新建一个Swift文件:HorizontalScroller.swift,作为我们的横滑滚动控件,HorizontalScroller继承自UIView。在HorizontalScroller类里添加一个新的委托对象:为了避免循环引用的问题,委托是weak类型。H

  6. openstack swift ring文件解析

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

  7. KeyStone安装部署笔记

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

  8. OpenStack对象存储――Swift

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

  9. OpenStack之swift安装笔记

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

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

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

随机推荐

  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,所以编译器会报错,现在来一一解决。

返回
顶部