扫一扫微信二维码

OpenStack实践分享:Swift对象存储项目 发布时间:2017-11-28


概览
Swift 源于 Rackspace 公司开发的高可用分布式对象存储服务,在 2010 年作为核心项目之一加入 OpenStack 开源社区。Swift 是一个分布式的对象存储平台,提供 Api 可访问存储资源,可以将其直接集成到应用程序中,或者用于存储 VM 镜像、备份、归档,以及小文件,例如照片、短信、电子邮件等等。作为互联网应用场景下非结构化数据存储问题的解决方案之一,Swift 可构筑在比较便宜的标准硬件存储设备之上,而无须采用 RAID。

数据模型

\

Swift 采用 Account |Container | Object(账户 | 容器 | 对象)三层逻辑结构,每层的均可横向无限扩展。值得注意的是,这里的 Account 并不是个人账号,可以理解为租户,多个个人账号可以共同使用同一个租户,用来做顶层隔离。Container 代表容器,可以理解为文件夹或者目录,最下层的子节点则代表容器中的封装的对象,可以是元数据,也可以是内容。

架构

\


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

Swift 架构中包含三个组件:服务器、流程、环。

服务器
代理服务器:对外提供对象存储服务 API,根据环的信息来查找服务地址并转发用户请求至相应的账户、容器或对象服务。

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

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

账户服务器:通过使用对象存储服务来管理帐户。它的操作类似于在内部提供了清单的容器服务器,在这种情况下,将会枚举分配到给定帐户的容器。

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

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

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

用户和其他OpenStack 项目会根据逻辑名称来引用存储实体,但最终,所有请求(读取、写入)都必须映射到某个物理位置,为了完成这一操作,代理服务器和后台流程(包括复制服务)都必须能够将逻辑名称映射到物理位置,这种映射就称为一个环。

写在最后
OpenStack Swift 作为稳定和高可用的开源对象存储被很多企业作为商业化部署,鉴于其完全的开放性、广泛的用户群和社区贡献者,有理由相信,Swift 可能会成为云存储的开放标准,推动云计算在朝着更加开放的方向前进。


© 2012-2017 九州云信息科技有限公司 99Cloud 版权所有 咨询热线:400 006 0472 售后服务热线:400 670 7810 培训咨询热线:400 826 0070   ICP证:浙ICP备12032350号-1

网站建设:信达互联

北京网站建设公司