首页 理论教育 云计算:Swift的对象存储服务

云计算:Swift的对象存储服务

时间:2023-11-26 理论教育 版权反馈
【摘要】:Swift最初是由Rackspace公司开发的高可用分布式对象存储服务,并于2010年贡献给OpenStack开源社区,作为其最初的核心子项目之一,为其Nova子项目提供虚机镜像存储服务。完全对称的系统架构“对称”意味着Swift中各节点可以完全对等,能极大地降低系统维护成本。整个Swift集群中,也没有一个角色是单点的,并且在架构和设计上保证无单点业务是有效的。

云计算:Swift的对象存储服务

Swift是OpenStack开源云计算项目的子项目之一,是一个可扩展的对象存储系统,具有强大的扩展性、冗余性和持久性。对象存储,用于永久类型的静态数据的长期存储。

Swift最初是由Rackspace公司开发的高可用分布式对象存储服务,并于2010年贡献给OpenStack开源社区,作为其最初的核心子项目之一,为其Nova子项目提供虚机镜像存储服务。Swift构筑在比较便宜的标准硬件存储基础设施之上,无须采用RAID(磁盘冗余阵列),通过在软件层面引入一致性散列技术和数据冗余性,牺牲一定程度的数据一致性来达到高可用性和可伸缩性,支持多租户模式、容器和对象读写操作,适合解决互联网的应用场景下非结构化数据存储问题。

图10-12 OpenStack高级架构

1)Swift特性

OpenStack官网,列举了Swift的20多个特性,其中最引人关注的是以下几点:

(1)极高的数据持久性

很多人经常将数据持久性(Durability)与系统可用性(Availability)两个概念混淆。前者也理解为数据的可靠性,是指数据存储到系统后,到某一天数据丢失的可能性。例如,Amazon S3的数据持久性是11个9(99.999999999%),即假设存储1万(4个0)个文件到S3中,1千万(7个0)年之后,可能会丢失当中1个文件。那么Swift能提供多少个9的SLA呢?针对Swift在5个Zone、5×10个存储节点的环境下,数据复制份为3,数据持久性的SLA能达到10个9。

(2)完全对称的系统架构

“对称”意味着Swift中各节点可以完全对等,能极大地降低系统维护成本。

(3)无限的可扩展性

这里的扩展性分为两个方面,一是数据存储容量无限可扩展,二是Swift性能(如QPS、吞吐量等)可线性提升。由于Swift是全然对称的架构,扩容只需简单地新增机器,系统会自己主动完成数据迁移等工作,使各存储节点重新达到平衡状态。

(4)无单点故障

在互联网业务大规模应用的场景中,存储的单点一直是个难题。例如数据库,一般的HA方法仅仅能做主从,而且“主”一般仅仅有一个;还有在一些其他开源存储系统的实现中,元数据信息的存储一直以来是个头痛的地方,一般仅仅能单点存储,而这个单点非常容易成为瓶颈,一旦这个点出现差异,往往能影响到整个集群。典型的如HDFS。而Swift的元数据存储是全然均匀随机分布的,并且与对象文件存储一样,元数据也会存储多份。整个Swift集群中,也没有一个角色是单点的,并且在架构和设计上保证无单点业务是有效的。

(5)简单、可依赖

简单体现在架构优美、代码整洁、实现易懂,没将高深的分布式存储理论用进去,而是采用简单的原理。可依赖是指Swift经测试、分析之后,能够放心大胆地将Swift用于最核心的存储业务上,而不用担心Swift出问题,因为不管出现什么问题,都能通过日志、阅读代码迅速解决。

2)Swift主要组件

Swift采用完全对称、面向资源的分布式系统架构设计,所有组件都可扩展,避免因单点失效而扩散并影响整个系统运转;通信方式采用非阻塞式I/O模式,提高了系统吞吐和响应能力。

Swift系统架构如图10-13所示。

由此可见,Swift组件如下:(www.xing528.com)

①代理服务(Proxy Server):对外提供对象服务API,根据环(Ring)的信息来查找服务地址并转发用户请求至相应的账户、容器或者对象服务;由于采用无状态的REST请求协议,可以进行横向扩展来均衡负载。

②认证服务(Authentication Server):验证访问用户的身份信息,并获得一个对象访问令牌(Token),在一定的时间内会一直有效;验证访问令牌的有效性并缓存下来直至过期时间。

③缓存服务(Cache Server):缓存的内容包括对象服务令牌,账户和容器的存在信息,但不会缓存对象本身的数据;缓存服务可采用Memcached集群,Swift会使用一致性散列算法(Consistent Hashing)来分配缓存地址。

④账户服务(Account Server):提供账户元数据和统计信息,并维护所含容器列表的服务,每个账户的信息被存储在一个SQLite数据库中。

⑤容器服务(Container Server):提供容器元数据和统计信息,并维护所含对象列表的服务,每个容器的信息也存储在一个SQLite数据库中。

⑥对象服务(Object Server):提供对象元数据和内容服务,每个对象的内容会以文件的形式存储在文件系统中,元数据会作为文件属性来存储,建议采用支持扩展属性的XFS文件系统。

⑦复制服务(Replicator):会检测本地分区副本和远程副本是否一致,具体通过对比散列文件和高级水印来完成,发现不一致时会采用推式(Push)更新远程副本,例如对象复制服务会使用远程文件拷贝工具rsync来同步;另外一个任务是确保被标记删除的对象从文件系统中移除。

图10-13 Swift系统架构

⑧更新服务(Updater):当对象由于高负载的原因而无法立即更新时,任务将会被序列化到在本地文件系统中进行排队,以便服务恢复后进行异步更新;例如成功创建对象后容器服务器没有及时更新对象列表,这个时候容器的更新操作就会进入排队中,更新服务会在系统恢复正常后扫描队列并进行相应的更新处理。

⑨审计服务(Auditor):检查对象、容器和账户的完整性,如果发现比特级的错误,文件将被隔离,并复制其他副本以覆盖本地损坏的副本;其他类型的错误会被记录到日志中。

⑩账户清理服务(Account Reaper):移除被标记为删除的账户,删除其所包含的所有容器和对象。

索引环(Ring):Swift中最重要的组件,用于记录存储对象与物理位置之间的映射关系。当用户需要对Account(账户)、Container(容器)、Object(对象)操作时,就需要查询对应的Ring文件(Account、Container、Object都有自己对应的Ring)。Ring使用Zone、Device、Partition和Replica来维护这些映射信息。Ring中每个Partition在集群中都(默认)有3个Replica。每个Partition的位置由Ring来维护,并存储在映射中。Ring文件在系统初始化时创建,之后每次增减存储节点时,需要重新平衡一下Ring文件中的项目,以保证增减节点时,系统因此而发生迁移的文件数量最少。(Zone:物理位置分区;Device:物理设备;Partition:虚拟出的物理设备;Replica:冗余副本)

3)Swift应用场景

Swift提供的服务与Amazon S3相同,适用于许多应用场景。最典型的应用是作为网盘类产品的存储引擎,比如Dropbox背后使用的就是Amazon S3作为支持。Swift在OpenStack中还可以与镜像服务Glance结合,为其存储镜像文件。另外,由于Swift的无限扩展能力,非常适合用于存储日志文件和数据备份仓库

Swift主要有3个组成部分:Proxy Server、Storage Server和Consistency Server。其部署架构如图10-14所示,其中Storage和Consistency服务均允许在Storage Node上。Auth认证服务目前已从Swift中剥离出来,使用OpenStack的认证服务Keystone,目的在于实现统一OpenStack各个项目间的认证管理。

图10-14 Swift系统架构

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈