一、概述
- Swift 不是文件系统或者实时的数据存储系统,而是对象存储,用于长期存储永久类型的静态数据。这些数据可以检索、调整和必要时进行更新。Swift最适合虚拟机镜像、图片、邮件和存档备份这类数据的存储。
- Swift没有采用RAID,也没有中心单元和主控点,而是通过在软件层面采用一致性HASH和数据冗余性,牺牲一定程度的数据一致性达到高可用性和可收缩性。支持多用户模式、容器、和对象存储。最佳应用场景为非结构化数据存储问题
二、Swift作用
1、极高的数据持久性
2、完全的对称系统架构:对称意味着Swift中的各节点可以完全对等,能极大的降低成本
3、无限的可扩展性:一方面是数据可以无限的扩,另一方面Swift的性能可以线性提升(暂时没有体会到,可以再后续的阅读了解中体会,主要看它的架构设计)
4、无单点故障:Swift的元数据存储时完全均匀随机分布的,并且与对象文件存储一样,元数据也会存储多份。
swift与HDFS的技术差异
5、在Swift中,元数据呈分布式,跨集群复制,而在HDFS中,采用中央系统(Namenode)来维护元数据,这对于HDFS来说,无疑使单点故障点,因而扩展到规模非常大的环境很困难
6、Swift设计时考虑到多租户架构,而HDFS没有考虑这个概念(下午学习什么是多租户架构)
7、在Swift中,文件可以写入多次,在并发场景下,以最近一次的的操作为标准。而在HDFS中,文件写入一次,而且每次只能有一个文件写入
8、Swift能够可靠地存储数量非常多的大小不一的文件,而HDFS用于存储数量中等的大文件,来支持数据处理。
三、Swift架构
四、Swift的主要组件
Proxy Server
- Proxy Server是提供swift api的服务器进程,swift通过Proxy Server
向外提供基于HTTP和RESET的服务接口,负责swift其余组件的相互通信。 - 对于每个客户端的请求,它将在环中查询Account、Container或者Object的位置,并相应的转发请求。由于采用无状态的REST请求协议,可以进行横向扩展来均衡负载。
- 在访问swift之前,要先通过认证服务获取访问令牌,然后在发送的请求中加入头部信息 X-Auth-Token。
Object Server
-
对象服务器提供元数据和内容服务,用于存储、检索和删除本地设备上的对象。在文件系统中,对象以二进制的文件的形式存储,它的元数据存储在文件系统的扩展属性中,建议采用默认支持扩展属性饿XFS文件系统。
-
每个对象使用对象名称的哈希值和操作的时间戳组成的路劲来存储。最后一次的写操作总可以成功,并确保最新一次的对象版本将会被处理。
Account Server
- 账户服务提供账户元数据和统计信息,并维护所含容器列表的服务,每个账户的信息被存储在一个SQLite数据库中
Container Server
- 容器服务器提供容器元数据和统计信息,并维护所包含对象列表的服务。容器并不知道对象存在位置,只知道容器里存的那些对象。这些对象信息以SQLLite数据库文件的形式存储,和对象一样在集群上做类似的备份。