【OpenStack】Openstack中的Swift资料整理及CAP原理简介

标签:
云计算openstackswift资料整理 |
分类: 分布式系统 |
1. 什么是Swift?
OpenStackObject
OpenStack
2. Swift适合用来存什么
l
l
l
l
总结:Swift适合用来存储大量的、长期的、需要备份的对象。
3. Swift怎么用
Swift使用“用户/容器/对象名”(account/container/object)来唯一确定一个对象。Account就是Swift中的用户,每个用户下面会有任意数量的容器(类似于文件夹),每个容器下可以有任意数量的对象(类似于文件)。
Swift使用REST
4. Swift的架构
4.1. Swift特性
l
l
l
l
l
l
l
l
l
4.2. Swift的组件
4.2.1. 环(The Ring )
环负责管理存储在磁盘上的一个实体的名字和这个实体所在物理位置之间的映射关系。对accounts、containers和objects
环通过区域,设备,分区,复制份数来维护映射。在环中每一个分区都会被复制(在集群中默认的是三份)。
集群中,分区可以用权重来平衡它们的分布,例如当不同大小的设备被使用时。
在出错的情况下,环也负责确定哪一个设备来接手服务。
环被代理服务器和一些后台进程所使用(例如复制进程)。
4.2.2. 代理服务器(Proxy Server )
代理服务器,负责把Swift的其它部分连接起来。对于每一个请求,代理服务器将在环(ring)中查找account、container或者object,相应地将请求路由到对应的服务器上。
同时Proxy
4.2.3. 对象服务器(Object Server )
对象服务器是一个简单的用于存储、检索、删除存储在本地设备上的objects的二进制存储服务器(blob
4.2.4. 容器服务器(Container Server )
容器服务器的主要职责是处理objects的列表。它不知道这些objects被存储在何处,只知道哪些objcts是归属于某一指定的容器中。
objects列表以sqlite数据库文件的形式存储,并且像objects那样在集群中被备份。包含objects总数量和容器已用容量的信息也将被追踪统计。
4.2.5. 账户服务器(Account Server )
Account
4.2.6. 复制器(Replication)
复制器被设计用来当系统面临临时性错误(比如断网或设备错误)时,保护系统的一致性。
复制进程通过将本地数据与每一个远程备份进行比较,来确保它们都是最新版本的数据。
Object复制器使用一个哈希列表来迅速地比较每一个分区的子部分,同时container和account复制器使用哈希表和共享高峰标记。
复制操作的更新是基于PUSH的方式。比如object的复制操作,更新就是一个往其他节点同步文件的过程。Account和container的复制操作通过HTTP来PUSH丢失的记录,或着远程同步全部的数据库文件。
复制器同时也确保数据从系统的删除。当一个条目(object,
4.2.7. 更新器(Updaters)
有的时候,容器或账户数据不能被立即更新,这通常发生在出现错误或者系统过载时。
当一个更新失败时,更新操作就会在本地文件系统上排队,然后更新器会处理这些失败的更新。这时最终一致性的窗口会适时地出现。
比如,假设当一个容器服务器处于低负载中并且一个新的对象被放到系统中时,一旦代理服务器向客户端回复成功消息,此对象就将立即可读。然而,容器服务器不会立即更新对象的列表,并且因此更新将被排队以等待稍候的更新。此刻容器列举的清单,可能不回立马包含此对象。
在实践中,一致性窗口的大小仅仅与更新器运行的频率一致,并且代理服务器不会将list请求转递给最初对请求进行回复的那个Container
4.2.8. 审计器(Auditors)
审计器通过爬行本地服务器来检查对象,容器和账户的完整性。
当一个文件被发现有损坏(比如一点损坏),它将被隔离,并且复制器将同其他的副本复制一份来代替此损坏的文件。
如果有别的错误发生,它们将被记录日志(比如列举一个对象时,在所有的它应该位于的容器服务器中都无法找到)。
4.3. Swift典型部署结构
5. Swift对CAP的支持程度
5.1. 什么是CAP
CAP理论是由美国著名科学家,Berkerly大学Brewer教授提出的。后来麻省理工学院的两位科学家证明了CAP理论的正确性。虽然在后来近十年的时间很多人对CAP理论提出了很多异议,但是在NoSQL的世界中,它还是非常有参考价值的。CAP理论:
分布式系统中,有三种重要的属性,分别是:
l
l
l
CAP理论的意思是,一个分布式系统不能同时满足一致性,可用性和分区容错性这三个需求,最多只能同时满足两个。
工程实践对网络分区考虑较少,一般可以认为:一致性和写操作的可用性不能同时满足,即如果要保证强一致性,那么出现机器故障的时候,写操作需要等机器重启或者机器上的服务迁移到别的机器才可以继续。
分布式系统的一致性和采用的一致性模型有关。一致性简单的可以分为强一致性、弱一致性、最终一致性;而一致性的变体大体有Causal
l
l
l
一致性模型多和业务逻辑有很大关联,不同的业务对CAP的取舍也不尽相同,这里不赘述。
5.2. Swift对CAP的支持
下图对部分SQL和NoSQL系统按照CAP做了一个归类。可以和Swift做一个参照。
通过比较,可以认为,Swift为AP系统。
Consistency:
l
l
Availability:
l
l
l
Tolerance
l
l
l
l
6. 参考资料
Openstack
Swift架构概述:http://swift.openstack.org/overview_architecture.html
nosql关于CAP取舍的一个分类:http://blog.nahurst.com/visual-guide-to-nosql-systems