Openstack持久存储之Swift

OpenStack中的持久存储可分为三类:对象存储(object storage)、文件共享存储(file share storage)和块存储(block storage),对应的项目分别是Swift、Manila和Cinder。

一句话说清楚对象存储就是:对象存储不是NAS/SNA,对象存储允许用户使用RESTful HTTP API以对象形式存储数据并且对象存储可以无限扩展,可以更好地处理节点故障而不丢失数据,无法通过文件协议(如BFS块文件系统、SMB块文件系统或CIFS公共 Internet 文件系统)直接访问对象存储。对象存储通常用于归档和备份数据,例如虚拟机镜像、照片、视频和音乐。

一、Swift架构

Swift是一种创新的存储系统,它通过独特的架构实现无缝扩展和高度容错,确保数据持续可用,而不模仿传统存储接口,专注于高效、可靠的数据管理。Swift架构是分布式的,可以防止任何单点故障(Single Point Of Failure,SPOF),它还被设计为能够水平缩放。

Swift包括以下组件:Swift代理服务,账户服务,容器服务,对象服务

解释 元数据: 元数据提供对象的描述性信息,它被存储为键值对(时间-存储信息)。

二、Swift在实际存储上的规划(目的:为了隔离故障)

Swift层次结构图

三、Swift如何实际将数据存储在磁盘上?

Swift对象存储系统通过一致性哈希算法和Ring机制将数据分区并映射到多个节点的磁盘上,每个对象以独立文件形式存储,同时维护多个副本以确保高可用性和数据冗余。在较高的层次上看,Swift就像一个巨大的哈希数据结构,其中所有可用空间都被分成槽,然后使用哈希函数来将数据映射为槽位。

四、Swift如何实现存储策略?

在Swift对象存储系统中,为了确保数据的高可用性,传统的做法是通过维护多个副本并将它们分散到不同的区域、区(Zone)、节点和磁盘上来实现冗余。这种策略虽然非常有效,但它确实带来了较高的存储成本------当每个对象都使用默认的三副本时,实际可用的存储量仅为总容量的大约三分之一,对于至关重要的数据,组织或许愿意承担这样的成本以换取更高的可靠性和冗余度。然而,这种方法对那些希望利用昂贵的Swift对象存储系统来满足其数据可用性和性能需求的应用来说是一个挑战。因此,Swift引入了存储策略的概念,旨在通过差异化复制策略来解决冗余性和成本之间的矛盾。

除了传统的多副本机制外,纠删码(Erasure Coding, EC)作为另一种冗余性策略,在Kilo版本发布后被OpenStack Swift所采用。纠删码通过奇偶校验信息来重建丢失的数据片段,从而提供了一种创新的方法来平衡性能与成本。具体而言,当用户上传文件至配置了纠删码的对象存储时,Swift代理会将数据分割成若干段(segments),然后调用PyECLib库将这些数据段编码为纠删码片段(fragments)。随后,这些编码后的片段会被流式传输到各个存储节点上进行保存。

纠删码的原理可以类比于RAID技术中的RAID 5,其中数据被划分为条带,并生成奇偶校验条带来从磁盘故障中恢复数据。相比之下,默认的Swift复制策略类似于RAID 1或镜像(mirroring),即数据在不同磁盘之间直接复制。而采用纠删码的方式只需要大约40%左右的数据大小的额外空间,这远低于基于复制方案所需的存储开销。

为了支持纠删码功能,Swift依赖于一个名为PyECLib的后端库,它为多种纠删码算法提供了Python接口,并且具有良好的扩展性,允许以插件形式集成自定义的纠删码实现。

五、对象存储和raid存储之间的关系

尽管Swift本身并不依赖于RAID技术,但在实际应用中,两者常常结合使用以满足不同的性能和可靠性要求。例如,在媒体行业中,一家公司可能会选择将原始素材(如视频、音频和图片)存储在对象存储平台上,因为这类数据通常是非结构化的且体积较大;而对于需要频繁读写的编辑过程,则更适合采用RAID存储系统,因为它能提供更高的I/O速度和更低的延迟。最终成品可以再次归档回对象存储中长期保存,形成一个完整的生命周期管理流程。

相关推荐
浩宇软件开发2 小时前
SwiftUI入门 10 分钟学会做一个 App 引导页
ios·swiftui·swift
yyuuuzz6 小时前
aws的核心概念与常见使用场景
运维·服务器·网络·云计算·aws
号码认证服务11 小时前
客户看到来电显示公司名会更愿意接听吗?企业号码认证提升ROI
服务器·网络·c++·经验分享·智能手机·云计算·php
打码人的日常分享12 小时前
大模型及智能体安全风险防范与治理策略(PPT)
运维·网络·数据库·安全·云计算·制造
zhojiew12 小时前
在AWS云上使用EC2 嵌套虚拟化实例部署Cube Sandbox的实践和问题
云计算·aws
号码认证服务14 小时前
小米、OPPO、VIVO手机支持号码认证显示公司名吗?
java·服务器·网络·经验分享·智能手机·云计算·php
sakiko_15 小时前
Swift/UIkit学习笔记27-模块管理,发送位置信息
前端·笔记·学习·ios·swift·uikit
不吃香菜kkk、15 小时前
SonarQube安装配置使用
ci/cd·kubernetes·云计算
Harvy_没救了1 天前
【云服务管理】OpenStack 十大组件浅谈
openstack
weelinking1 天前
【企业级】企业级大模型合规实战:数据安全与跨境传输的技术解决方案
数据库·人工智能·机器学习·云计算·github