ec2 是Elastic Compute Cloud,即弹性计算云。
s3是SimpleStorage Service,全球存储区域网络。Swift 提供的服务与Amazon S3相同,适用于许多应用场景。
Dynamo:Amazon云存储系统,是s3的理论基础,说是它的商用。
OpenStack包含两个主要模块:Nova 和 Swift,前者是 NASA 开发的虚拟服务器部署和业务计算模块;后者是 Rackspace开发的分布式云存储模块,两者可以一起用,也可以分开单独用。
swift:被称为对象存储,提供了强大的扩展性、冗余和持久性。Swift主要有三个组成部分:Proxy Server、Storage Server和ConsistencyServer。采用层次数据模型,共设三层逻辑结构:Account/Container/Object(即账户/容器/对象)
Proxy Server对于每个客户端的请求,它将在Ring中查询Account、Container或Object的位置,并且转发用户请求至相应的账户、容器或者对象服务;。
Storage Server:
· 账户服务(Account Server):提供账户元数据和统计信息,并维护所含容器列表的服务,每个账户的信息被存储在一个 SQLite 数据库中。帐号服务器与容器服务器非常相似,除了它是负责处理容器的列表而不是对象。
· 容器服务(Container Server):提供容器元数据和统计信息,并维护所含对象列表的服务,每个容器的信息也存储在一个 SQLite 数据库中。处理对象的列表。容器服务器并不知道对象存在哪,只知道指定容器里存的哪些对象。
· 对象服务(Object Server):提供对象元数据和内容服务,每个对象的内容会以文件的形式存储在文件系统中,元数据会作为文件属性来存储,建议采用支持扩展属性的 XFS 文件系统。对象服务器是一个简单的二进制大对象存储服务器,可以用来存储、检索和删除本地设备上的对象。在文件系统上,对象以二进制文件的形式存储,它的元数据存储在文件系统的扩展属性(xattrs)中。这要求用于对象服务器的文件系统需要支持文件有扩展属性。一些文件系统,如ext3,它的xattrs属性默认是关闭的。
每个对象使用对象名称的哈希值和操作的时间戳组成的路径来存储。
-
图 1.为不同的 Container 指定不同的副本数量
- 性能分层
例如,对于一些数据用 HDD 保存,另一些用 SSD 保存。也可以应用于其他存储介质,甚至是不同的存储设备。
图 2.为不同的 Container 指定不同的存储介质
- 地理位置约束
在某些场景下,因为公司或者国家的政策的约束,某些数据必须存储在指定的地理位置,例如混合云场景。有些场景下,用户希望指定数据存放在距离访问客户端比较近的地方。
图 3.为不同的 Container 指定不同的存储位置
ConsistencyServers的目的是查找并解决由数据损坏和硬件故障引起的错误。主要存在三个Server:Auditor、Updater和Replicator。 Auditor运行在每个Swift服务器的后台持续地扫描磁盘来检测对象、Container和账号的完整性。如果发现数据损坏,Auditor就会将该文件移动到隔离区域,然后由Replicator负责用一个完好的拷贝来替代该数据。当对象由于高负载的原因而无法立即更新时,任务将会被序列化到在本地文件系统中进行排队,以便服务恢复后由Updater进行异步更新;
Ring是Swift最重要的组件,用于记录存储对象与物理位置间的映射关系。在涉及查询Account、Container、Object信息时,就需要查询集群的Ring信息。 Ring使用Zone、Device、Partition和Replica来维护这些映射信息(zone是划分IDC甚至是跨地域IDC,)。Ring中每个Partition在集群中都(默认)有3个Replica。每个Partition的位置由Ring来维护,并存储在映射中。
环表示存储在硬盘上的实体名称和物理位置间的映射。帐号、容器、对象都有相应的环。当swift的其它组件(比如复制)要对帐号、容器或对象操作时,需要查询相应的环来确定它在集群上的位置。环使用区域、设备、虚节点和副本来维护这些映射信息。环中每个虚节点在集群中都(默认)有3个副本。每个虚节点的位置由环来维护,并存储在映射中。当代理服务器转发的客户端请求失败时,环也负责决定 ?哪一个设备来接手请求。