image.png
    操作对象就是对象,一个对象就是一个标识符ID号,可以直接用过rest api方式访问对象,通过HTTP访问。提供对象存储服务,用于永久类型的静态数据的长期存储,这些数据可以检索、调整,必要时进行更新。最适合存储的数据类型的例子是虚拟机镜像、图片存储、邮件存储和存档备份。因为没有中心单元或主控结点,Swift提供了更强的扩展性、冗余和持久性。高效安全存储大量数据,适合存储非结构化数据(非结构化数据:视频、声音、图像 结构化数据:数字,文字)
    特点:

    • 极高的数据持久性:为了防止数据的丢失,提高数据的持久性,Swift采用冗余Replica(副本)的处理方法,Replica的默认值为3。
    • 无单点故障:Swift采用对称性设计,所以每个节点的地位完全相等,所以没有一个节点是单点的。即系统的性能不会因为某个节点的实效而造成整个系统不可用。此外Swift对元数据(数据的描述信息,如所有者,权限,类型等)的处理与对象文件的存储方式相同,即都是采用完全多份均匀随机分布存储。Swift的元数据存储是完全均匀随机分布的,并且与对象文件存储一样,元数据也会存储多份。整个Swift集群中,也没有一个角色是单点的,并且在架构和设计上保证无单点业务是有效的。
    • 可扩展性强:因为是对称架构,所以系统的扩展也相对简单。这里的扩展性分两方面,一是数据存储容量无限可扩展;二是Swift性能(如QPS、吞吐量等)可线性提升。因为Swift是完全对称的架构,扩容只需简单地新增机器,系统会自动完成数据迁移等工作,使各存储节点重新达到平衡状态。

    场景:

    • 镜像后端存储:在Openstack中与镜像服务Glance结合,为其存储镜像文件
    • 静态数据存储:Swift扩展能力好,适合存储日志文件和数据备份仓库

    Swift架构:
    image.png
    image.png
    Swift多租户隔离(三级结构)账户→容器→对象系统架构设计。
    1. 代理服务(Proxy Server):对外提供对象服务 API,会根据环的信息来查找服务地址并转发用户请求至相应的账户、容器或者对象服务;由于采用无状态的 REST 请求协议,可以进行横向扩展来均衡负载。
    2. 认证服务(Authentication Server):验证访问用户的身份信息,并获得一个对象访问令牌(Token),在一定的时间内会一直有效;验证访问令牌的有效性并缓存下来直至过期时间。
    3. 缓存服务(Cache Server):缓存的内容包括对象服务令牌,账户和容器的存在信息,但不会缓存对象本身的数据;缓存服务可采用 Memcached 集群,Swift 会使用一致性散列算法来分配缓存地址。
    4. 账户服务(Account Server):提供账户元数据和统计信息,并维护所含容器列表的服务,每个账户的信息被存储在一个 SQLite 数据库中。
    5. 容器服务(Container Server):提供容器元数据和统计信息,并维护所含对象列表的服务,每个容器的信息也存储在一个 SQLite 数据库中。
    6. 对象服务(Object Server):提供对象元数据和内容服务,每个对象的内容会以文件的形式存储在文件系统中, 元数据会作为文件属性来存储,建议采用支持扩展属性的 XFS 文件系统。 默认使用本地磁盘(本地硬盘、raid、挂载到本地的Lun,画出一个VG给Swift做存储空间)
    7. 复制服务(Replicator):会检测本地分区副本和远程副本是否一致,具体是通过对比散列文件和高级水印来完成,发现不一致时会采用推式(Push)更新远程副本,例如对象复制服务会使用远程文件拷贝工具 rsync 来同步;另外一个任务是确保被标记删除的对象从文件系统中移除。
    8. 更新服务(Updater):当对象由于高负载的原因而无法立即更新时,任务将会被序列化到在本地文件系统中进行排队,以便服务恢复后进行异步更新;例如成功创建对象后容器服务器没有及时更新对象列表,这个时候容器的更新操作就会进入排队中,更新服务会在系统恢复正常后扫描队列并进行相应的更新处理。
    9. 审计服务(Auditor):检查对象,容器和账户的完整性,如果发现比特级的错误,文件将被隔离,并复制其他的副本以覆盖本地损坏的副本;其他类型的错误会被记录到日志中。
    10. 账户清理服务(Account Reaper):移除被标记为删除的账户,删除其所包含的所有容器和对象。