Object Storage(Swift)对象存储
Swift的目的是使用普通硬件来构建冗余的、可扩展的分布式对象存储集群,存储容量可达PB级。Swift并不是文件系统或者实时的数据存储系统,它是对象存储,用于永久类型的静态数据的长期存储,这些数据可以检索、调整,必要时进行更新。最适合存储的数据类型的例子是虚拟机镜像、图片存储、邮件存储和存档备份。Swift无需采用RAID(磁盘冗余阵列),也没有中心单元或主控结点。Swift通过在软件层面引入一致性哈希技术和数据冗余性,牺牲一定程度的数据一致性来达到高可用性(High Availability,简称HA)和可伸缩性,支持多租户模式、容器和对象读写操作,适合解决互联网的应用场景下非结构化数据存储问题。
Swift的特点
极高的数据持久性
完全对称的系统架构
无限的可扩展性
无单点故障
Swift逻辑架构Swift组件
Swift porxy node
swift-proxy server proxy server向用户提供了一套操作swift的API接口。对于每个swift请求,proxy server首先会通过Ring查找被操作实体的物理位置,随后会将请求发送过去。Proxy server中也做了大量的异常处理,例如当某个服务器因为某个原因无法添加对象时,proxy server会通过Ring获取一个可用的服务器,并将对该请求的处理切换至该服务器。
Swift storage node
swift-account server account server是存储节点中负责处理对account的GET、HEAD、PUT、DELETE、RELICATION请求的服务进程,accountserver使用的SQLite的数据库文件保存account的相关信息
swift-container server Container Server是存储节点找那个负责处理Container的GET、HEAD、PUT、DELETE、RELICATION请求的服务进程,Container Server使用的SQLite的数据库文件保存Container的相关信息
swift-obiect server Object Server就是一个简单的BLOB存储服务器,可以存储、检索和删除保存在本地设备上的对象。在Object Server中,对象以二进制的形式保存在文件系统上,元数据以xattr的形式保存在文件扩展属性上,所以要求底层的文件系统支持xattr特性。
swift操作流程
假设:一个对象在swift集群中保存3个副本(Replica)
修改一个swift对象:
1、proxy server会根据/account/container/obiect查询Ring文件,得到存储该对象的节点索引(长度为3);
2、proxy server会将请求转发到这三个节点执行修改操作。如果只有两个节点写入成功,就认为这次put操作成功;(超过半数才会被认为执行成功)
3、写入失败的节点在一段时间后会将得到写入成功的节点Obiect Replicator进程推送过来的数据在进行一次写入。
从swift中获取一个对象:
1、proxy server会根据/account/container/obiect查询Ring文件,得到存储该对象的节点索引(长度为3);
2、proxy server和上述三个节点交互,如果有两个节点确认对象状态OK(超过半数),则转步骤三。否则返回失败
3、proxy server随机选取一个健康的节点获取数据并返回给用户。
Swift的原理swift使用的算法,存储理论主要有:
一致性哈希算法
1、首先拿到一个地址空间(2^32),并且将地址空间分布到一个环,然后将节点服务器的IP地址、主机名等信息计算hash,将hash值映射到环上。
2、有数据需要存储,就将数据进行hash,得到一个hash值,这个hash值也会映射到环上。
3、通过映射到环上的位置,顺时针去找到最近的计算节点,然后就保存。
如果新增一台节点,那么影响的范围则是当前新增的节点逆时针的最近的节点中间的数据,而这些数据中的节点指针则指向了当前新增的节点。
partition
对象与物理节点多加一层虚拟节点,虚拟节点映射到物理节点,数据与物理节点是没有直接关系的,变更的时候只需要将物理节点与虚拟节点变更
replica(副本)
需要有冗余的副本来保证数据安全,理论依据主要来源于NWR策略(也叫Quorum协议)
NWR是一种分布式存储系统中用于控制一致性级别的策略。
N代表同一份数据的Replica份数
W是更新一个数据对象时需要确保成功更新的份数
R代表读取一个数据需要读取的Replica的份数
公式W+R+N,保证某个数据不被两个不同的事务同时读和写
公式W
zone
所有的Node都在一个机架或一个机房中
断电、网络故障等
对机器的物理位置进行隔离,以满足分区容忍性。
引入Zone的概念,把集群的Node分配到每个Zone中
Zone的大小可以根据业务需求和硬件条件自定义
weight
分配到更多的Partition
更好的利用已有存储空间
避免由于存储空间不同带来的问题
ring
ring是存储元素的描述,定位存储元素。
部署模式测试用的部署模式
常用的部署模式
备注:此文章为本人学习笔记,各位大佬不喜勿喷,谢谢!
§ §