swift架构理解

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/chengqiuming/article/details/79719487
存储是Openstack所管理的最重要的资源之一。
Nova实现了Openstack虚拟机世界的抽象,并利用主机的本地存储为虚拟机提供“临时存储(Ephemeral Storage)”,如果虚拟机被删除了,挂在这个虚拟机上的任何临时存储都将自动释放。存放在临时存储上的数据是高度不可靠的,任何虚拟机和主机的故障都可能会导致数据丢失。因此,基于临时存储的虚拟机就是无根之浮萍,没有确切的归属,在它生命周期终止的时候,所有发生在它身上的故事以及一切痕迹都将被抹去。
而基于SAN,NAS等不同类型的存储设备,Swift(对象存储)与块存储(Cinder)引入了“永久存储(persistent Storage)”,共同为这个虚拟机世界的主体——虚拟机提供了安身之本,负责为每个虚拟机本身的镜像以及所产生的各种数据提供一个家,尽量地去做“居者有其屋”。
一 Swift体系结构
作为对象存储的一种,Swift比较适合存放静态数据,所谓的静态数据指的是长期不会发生更新的数据,或者在一定时期内更新频率比较低的数据。比如说虚拟机的镜像、多媒体数据以及数据的备份。如果需要实时更新的数据,那么Swift并不是一个特别好的选择,在这种情况下,Cinder块存储更为合适。
既然是对象存储,Swift所存储的逻辑单元就是对象(Object),而不是我们通常概念中的文件。在一个传统的文件系统实现中,文件通常由两部分两共同描述:文件本身的内容以及与其相关的元数据(metadata)。而Swift中的对象涵盖了内容与元数据两部分的内容。
与其他Openstack项目一样,Swift提供了RESTful API作为访问入口,存储的每个对象都是一个RESTful资源,拥有唯一的URL,我们可以发送HTTP请求将一些数据作为一个对象传给Swift,也可以从Swift中请求一个之前存储的对象,至于该对象是何种形式存在且存储于何种设备的什么位置,我们并不需要去关心。
Swift从架构上可以划分为两个层次:访问层(Access Tier)与存储层(Storage Nodes)。访问层主要包括两个部分,Proxy Node(代理服务节点)与Authentication(认证),分别负责RESTful请求的处理与用户身份的认证。
Proxy Node上运行有Proxy Server来负责处理用户的RESTful请求,接收到用户请求时,需要对用户的身份进行认证,此时用户所提供的身份资料会被转发给认证服务进行处理,Proxy Server可以使用Memcached(高性能的分布式内存对象缓存系统)进行数据和对象的缓存,来减少数据库读取的次数,提供用户的访问速度。
存储层由一系列的物理存储节点组成,负责对象数据的存储,proxy Node收到用户的访问请求时,会将其转发到相应的存储节点上。为了在系统问题的情况下有效地将故障隔离在最小的物理范围内,存储层在物理上又分为如下一些层次:
Region:地理上隔绝的区域,也就是说不同的region通常在地理位置上被隔离开来。比如说两个数据中心可以划分为两个Region。每个Swift系统默认至少有一个Region。
Zone:在每个Region的内部又划分了不同的Zone来实现硬件上的隔离。一个Zone可以是一个硬盘,一台主机,一个机柜或者一个交换机,但是我们可以简单理解为一个Zone代表一组独立的存储节点。
Storage Node:存储对象数据的物理节点,基于通用标准的硬件设备提供了不亚于专业存储设备的对象存储服务。
Device:可以简单理解为硬盘。
Partition:这里的partition仅仅指的是在Device上的文件系统中的目录,和我们通常所理解的硬盘分区是完全不同的概念。
每个Storage Node上存储的对象在逻辑上又划分三个层次组成:Account、Container、以及Object。
这里的每一层所包含节点数都没有限制,可以任意进行扩展。Account在对象存储过程中实现顶层的隔离,所代表的并不是个人账户,而是租户,一个Account可以被多个个人账户共同使用。
Container代表一组对象的封装,类似文件夹或目录,但是Container不能嵌套,并不能包含下级的Container。
位于最后一个层次的即是具体的对象,由元数据和内容两部分组成。Swift要求一个对象必须存储在某个Container中,因此一个Account应该有至少一个Container来提供对象的存储。

没有更多推荐了,返回首页