Swift 是 OpenStack 提供对象存储的组件,尤为适合静态数据的持久化存储,因此 OpenStack 的众多组件都支持 Swift 作为存储后端,例如:
- Glance 镜像的存储
- Cinder 的卷备份
- Nova 的实例备份
但请注意,HCS 中仅用于存放镜像,华为有单独的对象存储产品。
Swift 是完全对称架构,各存储池节点完全对等,拥有无限的可扩展性、无单点故障。因此核心存储相关组件每个存储节点都有。
组件:
Access Tier接入层,多个Proxy Node节点对外通过 LB 提供 APIProxy提供 APIAuth认证Cache缓存
Storage Nodes对应存储的三层结构:account/container/object(简洁非常,直接就是相应的 REST API)AccountContainerObject
- 其他审计、备份/副本 replicate、更新等组件
Proxy 通过 Ring 查询 account/container/object 和存储节点的对应关系。(Ring 应该在每个机器上都有相当的一份)
细节问题
Swift 的存储层
首先分五个层级:
- Region:Swift 系统至少包含一个 region
- Zone:按照硬件上的隔离划分了的 zone
- Storage Node
- Device:可理解为盘
- Partition(仅指文件系统的目录,不是硬盘分区)
对于备份的要求是:
每个 partition 的 replica 都确保放在不同的 zone 中。
Swfit 的一致性
Swift 放弃严格一致性,而采用最终一致性模型(Eventual Consistency),来达到高可用和无限水平扩展能力;如果数据出现了不一致,后台服务进程会在一定的时间窗口内通过检测和复制协议来完成数据同步,从而保证达到最终一致性。