以对象的层次结构 account/container/object 作为键,采用 MD5 散列算法得到一个散列值;
对该散列值的前 4 个字节进行右移操作(右移m位),得到分区索引号;
在分区到设备映射表里,按照分区索引号,查找该对象所在分区对应的所有物理设备编号。如下图:
5.Swift的一致性设计
Swift 采用 Quorum 仲裁协议
定义:N:数据的副本总数;W:写操作被确认接受的副本数量;R:读操作的副本数量
强一致性:R+W》N, 就能保证对副本的读写操作会产生交集,从而保证可以读取到最新版本;
弱一致性:R+W《=N,读写操作的副本集合可能不产生交集,此时就可能会读到脏数据;
Swift 默认配置是N=3,W=2,R=2,即每个对象会存在 3 个副本,至少需要更新 2 个副本才算写成功;如果读到的2个数据存在不一致,则通过检测和复制协议来完成数据同步。
如R=1,就可能会读到脏数据,此时,通过牺牲一定的一致性,可提高读取速度,(而一致性可以通过后台的方式完成同步,从而保证数据的最终一致性)
Quorum 协议示例如下所示:
6.Swift特点
原生的对象存储,不支持实时的文件读写、编辑功能
完全对称架构,无主节点,无单点故障,易于大规模扩展,性能容量线性增长
数据实现最终一致性,不需要所有副本写入即可返回,读取数据时需要进行数据副本的校验
是OpenStack的子项目之一,适合云环境的部署
Swift的对象存储与Ceph提供的对象存储区别:客户端在访问对象存储系统服务时,Swift要求客户端必须访问Swift网关才能获得数据。而Ceph可以在每个存储节点上的OSD(对象存储设备)获取数据信息; 在数据一致性方面,Swift的数据是最终一致,而Ceph是始终跨集群强一致性)
五、 Lustre分布式存储
Lustre是基于Linux平台的开源集群(并行)文件系统,最早在1999年由皮特•布拉姆创建的集群文件系统公司(Cluster File Systems Inc.)开始研发,后由HP、Intel、Cluster File System和美国能源部联合开发,2003年正式开源,主要用于HPC超算领域。
1、Lustre的主要架构