对象存储的架构
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
回顾
对象存储的基本概念
对象
就是存储在系统中的真正数据 类似于文件系统中的文件 有自己的标识符(ID)
容器
用来把对象进行分组 容器只有一级 类似于文件系统中的目录 有自己的标示符(ID) 访问接口 通过Web服务协议实现对数据和存储资源的访问 REST,HTTP,SOAP
对象存储系统逻辑结构
是Swift存储系统对外的接口 负责把用户请求分发给合适的存储服务器
存储服务器(Storage Server)
负责存放实际的数据 为整个存储集群提供磁盘存储空间
认证服务器(Auth Server)
负责对用户进行认证 通过认证后,发给用户一个令牌
代理服务器
是Swift存储系统对外的接口 运行着swift-proxy-server进程,负责把用户请
与主流备份软件相结合用来备份用户数据 比原有的磁带库或虚拟磁带库成本效益高,TCO低 分布式并行读写使数据恢复更快
归档和分级存储
将在线系统中的数据无缝归档/ 分 级 到 对 象 存 储 系 统
对象存储的基本架构
对象系统特点 Swift系统概念 Swift系统架构
Ring的概念 可靠性机制
比较方法:使用一个哈希列表来快速地比较每个虚节点的 子段
复制更新基于推模式的,更新使用rsync同步文件到 对等节点
如果只有两个节点写入成功,就认 为这次写操作成 功。写入失败的节点在一段时间后将会得到写入成 功的节点object-replicator进程推送过来的数据。
对象复制器
复制器也确保数据已从系统中移除 当有一项(对象、容器、或者帐号)被删除,则一
这个进程还对磁盘进行连续扫描来保证存储在磁盘 上的数据不会因为磁盘的坏点或文件系统的损坏而 丢失
讨论如何 检测一个 对象的数 据没有损
坏?
对象审计器
对象的检测及复制方式
对目录及文件进行哈希比较 如果发现问题,把受损的对象移动到隔离区
对象更新器
这个进程运行在storage node中,负责container数据 库的异步更新
迁移到别的区域
多副本写入
弱一致性:N=3,W=2, R=1 写入3份,但是只需要等待有2份写入成功,就可以
告知用户,上传成功,不需要等待第3个
单副本读出
弱一致性:N=3,W=2,R=1 只从一个副本读入,如果第一个副本有故障,则读下
一个副本
多副本读出
强一致性:N=3,W=2,R=2 只从3个副本读入,如果有一个副本有故障,则读下一
对象系统特点
Swift系统概念 Swift系统架构
Ring的概念 可靠性机制 可靠性实现
存储系统的类型
类型
块存储 文件系统
对象存储 特别存储
协议
SATA,SCSI, iSCSI XFS, NTFS
HTTP,REST
基于TCP的特别协 议
用途
DAS,SAN,ESB
PC,Server,NFS , NAS S3,CloudFile, Swift HDFS,MySql, MongoDB
因
多副本(Replication)
可用区域(Zones)
一个可用区域由一组具有单独故障隔离的物理硬件组成
一个具有独立电源和网络的机房,一个具有独立电源的机架, 一个存储节点,一个硬盘
可用区域用来区分故障的边界
可用区域(ZONES)
虚节点的不同副本尽量存放在不同的可用区域内 如果一个可用区域出现故障,在该区域的所有副本都会
存储节点
磁盘
虚节点
环:Ring
环用来确定实体驻留在集群中的位置 账号、容器和单个对象在集群中的位置都是通过环
来确定的 账号、容器、对象各有自己的环
简单来讲,环就是一个Hash函数
Hash1(account_id)= account所在的虚节点地址 Hash2(container_id)=container所在的虚节点地址 Hash3(object_id)=object所在的虚节点地址
多副本(Replication)
Swift的每个虚节点都会存放多份
当一个副本出现问题的时候,可以从其它副本生成新
的副本
当一个副本得到更改后,系统需要负责更改其余副本
系统的缺省值是3份 用户可以根据自己的需求增加/减少份数 份数越多,可靠性越高,成本越高 份数越少,可靠性越低,成本越低
引入虚 节点的 一个原
超强的扩展性
采用扁平化结构管理所有数据,解决了NAS复杂的目录 结构在海量数据情况下的数据查找耗时长的问题, 可以实现单一名字空间支持百亿级数据的存储
和SAN存储以逻辑扇区为单位的较细粒度的固定IO不 同,对象 存储IO粒度更有弹性,可以支持几个字节到 TB范围内 的任意对象大小
多租户
可以使用同一个存储集群为不同用户和应用提供存储 服务
采用一定算法进行冗余分片,这样随时的增删节点 不影响整个系统的数据完整性
数据/元数据的高可用和数据服务器的高扩展都得 以保障
对象系统特点 Swift系统概念
Swift系统架构
Ring的概念 可靠性机制
Swift的整体架构
公钥/私 钥服务器
交换机Βιβλιοθήκη 交换机代理服务器…
存储服务器池
Swift架构模块
代理服务器(Proxy Server)
通过一致性Hash实现存储空间分区 把所有的哈希值组成一个首尾相接的环(0 - 232) 将环分割成N份(N个虚节点) 需要存储的对象通过Hash映射到哈希环的某个值上 再从哈希值出发沿顺时针方向遇到的第一个虚节点负
责存储
虚节点4 虚节点3
Ring
虚节点1 虚节点2
对象Ring
容器RING
可以实现智能化管理 可以按照属性进行查找 可以按照属性提供QoS 可以进行访问控制 可以按照属性决定数据是
否还需要保留
对象系统特点
Swift系统概念
Swift系统架构 Ring的概念
可靠性机制 可靠性实现
Swift 发展历史
• 2007年 RackSpace Cloud Files V1 • 分布式存储 • 元数据集中
存储系统类型的特点
对象存储系统的主要目标
• 高可靠性 = 高持久性 + 高可用性 • 高持久性: 多副本和恢复 • 高可用性: 多副本和虚节点
• 低成本: 通用设备 • 高扩展性: 无单瓶颈,无共享
对象:数据+元数据+属性
对象:数据+元数据+属性
在对象存储中,存储的不 仅是数据,还有丰富的与 数据相关的属性信息
容器只有一级
IDs
对象存储系统物理结构 容器 A
对
象
(
容
器
)
容器
B
对象 a 对象 b
对象 c
对象 d 对象 e 对象 f
采用扁平化结构管理所有数据:对象,容器 只需要根据ID就可以直接访问对象,容器 访问对象并不需要首先访问容器
对象存储系统
公钥/私 钥服务器
交换机
交换机
代理服务器
…
存储服务器池
对象存储结构的优势
object_id.ts
容器服务器
是负责处理对container的请求的服务进程 使用sqlite的数据库文件保存container的相关
信息
Account ID,Container ID,创建时间,对象个数,使用 空间字节数,数据库的Hash值
Object:ID,创建时间,对象大小,内容类型
账号Ring
对象系统特点 Swift系统概念 Swift系统架构
Ring的概念
可靠性机制
Swift的可靠性机制
• Swift的数据可靠性不依赖于硬件机制 • 也没有使用常用的RAID机制 • Swift可靠性机制
讨论如何用 软件机制实
现数据的可 靠性
多副本(Replication )
可用区域(Zones)
方便的使用模式
统过网络浏览器就可以访问
对象存储的应用场景
存储资源池
向个人、企业、或应用提供商提供存储租赁服务 Amazon S3,RackSpace Cloud Files
网盘应用
提供图形界面实现对象存储资源的包装,使用户可以 简便的统过多客户端上传、下载、管理和分享数据
DropBox
集中备份
个墓碑文件被设置作为该项的最新版本。复制器将 会检测到该墓碑文件并确保将它从整个系统中移除。
容器/帐号审计器
这两个进程运行在storage node中分别检测account、 container的db文件是否损坏,如果损坏,将会向存 储有其它副本的storage node请求副本,替换损坏的。
求分发给合适的存储服务器 也负责把请求结果返回给用户
公钥/私 钥服务器
交换机
代理服务器
交换机
如何决定
把用户请
求发给哪
个存储节
…
点?
存储服务器池
存储服务器
账号存储服务器
存放着该账号所拥有的所有容器的信息 没有容器存放地址信息
容器存储服务器
存放着该容器里的所有对象的信息 没有对象存储地址的信息
帐号服务器
负责处理对account操作请求的服务进程 使用sqlite的数据库文件保存account的相关
信息
Account ID,创建时间,容器个数,对象个数,使用空间 字节数,数据库的Hash值
container:ID,最后操作的时间,容器大小
对象审计器
这个进程运行在storage node中,检测object是否损 坏,如果损坏,将把该object移动到分隔区。
• 2009年RackSpace Cloud Files V2 • 完全重新设计 • 分布式存储和分布式元数据
• 2010年7月贡献给了OpenStack社区 • 是OpenStack最初的两个项目之一
Swift设计思想
• Swift是一个高可用、分布式、最终一致性的对 象存储系统,使用通用服务器构建
使用异步更新的原因:在请求来量大时,containerserver不能实时处理对数据库更新的请求,这些请 求将被本地化到队列中(async_pending目录下), 由updater进程进行异步更新。
对象复制器
这个进程运行在storage node中负责object在集群中 副本的同步
把每一个本地虚节点和该虚节点的其它副本进行比 较来发现不一致的地方
Swift 特性
• 数据最终一致的设计思想
• 没有得到全部副本写成功之前就给用户返回结果
• 极高的数据持久性
• 99.999999999%
• 高并发
• 无共享结构(Share-nothing)
• 完全对称的系统结构
• 无单点故障
• 硬件设备要求低
• 使用常用服务器搭
Swift 的主要概念
• 账号(Account)
对象存储服务器
负责存储对象的数据及元数据
对象系统特点 Swift系统概念 Swift系统架构
Ring的概念
可靠性机制
虚节点:Partition
Swift把存储服务器的存储空间分成许多个小的存 储空间,称为虚节点(Partition)
每个虚节点可以用来存放对象、容器、账号 虚节点作为Swift的一个基本管理单位 一个虚节点中可以存放许多个对象
• Swift URL(ID)
• 使用URL访问对象、容器和账号
• https:///v1/<account>/<container>/<object>
Swift逻辑结构
容器只有一级
Swift物理结构
容器 A
对象 a
对
象
对象 b
(
容 器
对象 c
)
容器
B
对象
d
IDs
对象 e
• 每个用户必须有一个账号。只有通过Swift验证的账号才能访问 Swift系统中的数据。提供账号验证的节点被称为Account Server。
• 容器(Container)
• 类比Windows操作系统中的文件夹,用于组织管理数据,但是不能 嵌套
• 对象(Object)
• 基本存储单元。一个对象包含两部分,数据和元数据。其中元数 据包括对象所属container名称,对象本身名称以及用户添加的自 定义数据属性(必须是key-value格式)。
对象 f
采用扁平化结构管理所有数据:对象,容器
只需要根据ID就可以直接访问对象,容器
访问对象并不需要首先访问容器
解决树形目录结构的问题
Swift对象元数据的处理
采用分布式元数据管理
解决了元数据服务器单一失效点问题,保证了元数据的 高可用性
元数据和数据一起存放,可以分布在任何节点
保证元数据不会丢失,两者间的连接是可靠的 对两者的更新可以同时进行
个副本 如果2个副本的值不一样,如何决定哪一个是最新值?
那么谁来完成这些任务呢?
Swift的详细架构
对象服务器、容器服务器、帐号服务器 对象审计器、容器审计器、帐号审计器 对象复制器、容器复制器、帐号负载器 对象更改器、容器更改器
对象服务器
负责处理对Object的操作请求 使用XFS文件系统存储对象数据 使用xattrs存储元数据 对象名上含有时间戳
对象存储的基本概念
对象
就是存储在系统中的真正数据 类似于文件系统中的文件 有自己的标识符(ID)
容器
用来把对象进行分组 容器只有一级 类似于文件系统中的目录 有自己的标示符(ID) 访问接口 通过Web服务协议实现对数据和存储资源的访问 REST,HTTP,SOAP
对象存储系统逻辑结构
是Swift存储系统对外的接口 负责把用户请求分发给合适的存储服务器
存储服务器(Storage Server)
负责存放实际的数据 为整个存储集群提供磁盘存储空间
认证服务器(Auth Server)
负责对用户进行认证 通过认证后,发给用户一个令牌
代理服务器
是Swift存储系统对外的接口 运行着swift-proxy-server进程,负责把用户请
与主流备份软件相结合用来备份用户数据 比原有的磁带库或虚拟磁带库成本效益高,TCO低 分布式并行读写使数据恢复更快
归档和分级存储
将在线系统中的数据无缝归档/ 分 级 到 对 象 存 储 系 统
对象存储的基本架构
对象系统特点 Swift系统概念 Swift系统架构
Ring的概念 可靠性机制
比较方法:使用一个哈希列表来快速地比较每个虚节点的 子段
复制更新基于推模式的,更新使用rsync同步文件到 对等节点
如果只有两个节点写入成功,就认 为这次写操作成 功。写入失败的节点在一段时间后将会得到写入成 功的节点object-replicator进程推送过来的数据。
对象复制器
复制器也确保数据已从系统中移除 当有一项(对象、容器、或者帐号)被删除,则一
这个进程还对磁盘进行连续扫描来保证存储在磁盘 上的数据不会因为磁盘的坏点或文件系统的损坏而 丢失
讨论如何 检测一个 对象的数 据没有损
坏?
对象审计器
对象的检测及复制方式
对目录及文件进行哈希比较 如果发现问题,把受损的对象移动到隔离区
对象更新器
这个进程运行在storage node中,负责container数据 库的异步更新
迁移到别的区域
多副本写入
弱一致性:N=3,W=2, R=1 写入3份,但是只需要等待有2份写入成功,就可以
告知用户,上传成功,不需要等待第3个
单副本读出
弱一致性:N=3,W=2,R=1 只从一个副本读入,如果第一个副本有故障,则读下
一个副本
多副本读出
强一致性:N=3,W=2,R=2 只从3个副本读入,如果有一个副本有故障,则读下一
对象系统特点
Swift系统概念 Swift系统架构
Ring的概念 可靠性机制 可靠性实现
存储系统的类型
类型
块存储 文件系统
对象存储 特别存储
协议
SATA,SCSI, iSCSI XFS, NTFS
HTTP,REST
基于TCP的特别协 议
用途
DAS,SAN,ESB
PC,Server,NFS , NAS S3,CloudFile, Swift HDFS,MySql, MongoDB
因
多副本(Replication)
可用区域(Zones)
一个可用区域由一组具有单独故障隔离的物理硬件组成
一个具有独立电源和网络的机房,一个具有独立电源的机架, 一个存储节点,一个硬盘
可用区域用来区分故障的边界
可用区域(ZONES)
虚节点的不同副本尽量存放在不同的可用区域内 如果一个可用区域出现故障,在该区域的所有副本都会
存储节点
磁盘
虚节点
环:Ring
环用来确定实体驻留在集群中的位置 账号、容器和单个对象在集群中的位置都是通过环
来确定的 账号、容器、对象各有自己的环
简单来讲,环就是一个Hash函数
Hash1(account_id)= account所在的虚节点地址 Hash2(container_id)=container所在的虚节点地址 Hash3(object_id)=object所在的虚节点地址
多副本(Replication)
Swift的每个虚节点都会存放多份
当一个副本出现问题的时候,可以从其它副本生成新
的副本
当一个副本得到更改后,系统需要负责更改其余副本
系统的缺省值是3份 用户可以根据自己的需求增加/减少份数 份数越多,可靠性越高,成本越高 份数越少,可靠性越低,成本越低
引入虚 节点的 一个原
超强的扩展性
采用扁平化结构管理所有数据,解决了NAS复杂的目录 结构在海量数据情况下的数据查找耗时长的问题, 可以实现单一名字空间支持百亿级数据的存储
和SAN存储以逻辑扇区为单位的较细粒度的固定IO不 同,对象 存储IO粒度更有弹性,可以支持几个字节到 TB范围内 的任意对象大小
多租户
可以使用同一个存储集群为不同用户和应用提供存储 服务
采用一定算法进行冗余分片,这样随时的增删节点 不影响整个系统的数据完整性
数据/元数据的高可用和数据服务器的高扩展都得 以保障
对象系统特点 Swift系统概念
Swift系统架构
Ring的概念 可靠性机制
Swift的整体架构
公钥/私 钥服务器
交换机Βιβλιοθήκη 交换机代理服务器…
存储服务器池
Swift架构模块
代理服务器(Proxy Server)
通过一致性Hash实现存储空间分区 把所有的哈希值组成一个首尾相接的环(0 - 232) 将环分割成N份(N个虚节点) 需要存储的对象通过Hash映射到哈希环的某个值上 再从哈希值出发沿顺时针方向遇到的第一个虚节点负
责存储
虚节点4 虚节点3
Ring
虚节点1 虚节点2
对象Ring
容器RING
可以实现智能化管理 可以按照属性进行查找 可以按照属性提供QoS 可以进行访问控制 可以按照属性决定数据是
否还需要保留
对象系统特点
Swift系统概念
Swift系统架构 Ring的概念
可靠性机制 可靠性实现
Swift 发展历史
• 2007年 RackSpace Cloud Files V1 • 分布式存储 • 元数据集中
存储系统类型的特点
对象存储系统的主要目标
• 高可靠性 = 高持久性 + 高可用性 • 高持久性: 多副本和恢复 • 高可用性: 多副本和虚节点
• 低成本: 通用设备 • 高扩展性: 无单瓶颈,无共享
对象:数据+元数据+属性
对象:数据+元数据+属性
在对象存储中,存储的不 仅是数据,还有丰富的与 数据相关的属性信息
容器只有一级
IDs
对象存储系统物理结构 容器 A
对
象
(
容
器
)
容器
B
对象 a 对象 b
对象 c
对象 d 对象 e 对象 f
采用扁平化结构管理所有数据:对象,容器 只需要根据ID就可以直接访问对象,容器 访问对象并不需要首先访问容器
对象存储系统
公钥/私 钥服务器
交换机
交换机
代理服务器
…
存储服务器池
对象存储结构的优势
object_id.ts
容器服务器
是负责处理对container的请求的服务进程 使用sqlite的数据库文件保存container的相关
信息
Account ID,Container ID,创建时间,对象个数,使用 空间字节数,数据库的Hash值
Object:ID,创建时间,对象大小,内容类型
账号Ring
对象系统特点 Swift系统概念 Swift系统架构
Ring的概念
可靠性机制
Swift的可靠性机制
• Swift的数据可靠性不依赖于硬件机制 • 也没有使用常用的RAID机制 • Swift可靠性机制
讨论如何用 软件机制实
现数据的可 靠性
多副本(Replication )
可用区域(Zones)
方便的使用模式
统过网络浏览器就可以访问
对象存储的应用场景
存储资源池
向个人、企业、或应用提供商提供存储租赁服务 Amazon S3,RackSpace Cloud Files
网盘应用
提供图形界面实现对象存储资源的包装,使用户可以 简便的统过多客户端上传、下载、管理和分享数据
DropBox
集中备份
个墓碑文件被设置作为该项的最新版本。复制器将 会检测到该墓碑文件并确保将它从整个系统中移除。
容器/帐号审计器
这两个进程运行在storage node中分别检测account、 container的db文件是否损坏,如果损坏,将会向存 储有其它副本的storage node请求副本,替换损坏的。
求分发给合适的存储服务器 也负责把请求结果返回给用户
公钥/私 钥服务器
交换机
代理服务器
交换机
如何决定
把用户请
求发给哪
个存储节
…
点?
存储服务器池
存储服务器
账号存储服务器
存放着该账号所拥有的所有容器的信息 没有容器存放地址信息
容器存储服务器
存放着该容器里的所有对象的信息 没有对象存储地址的信息
帐号服务器
负责处理对account操作请求的服务进程 使用sqlite的数据库文件保存account的相关
信息
Account ID,创建时间,容器个数,对象个数,使用空间 字节数,数据库的Hash值
container:ID,最后操作的时间,容器大小
对象审计器
这个进程运行在storage node中,检测object是否损 坏,如果损坏,将把该object移动到分隔区。
• 2009年RackSpace Cloud Files V2 • 完全重新设计 • 分布式存储和分布式元数据
• 2010年7月贡献给了OpenStack社区 • 是OpenStack最初的两个项目之一
Swift设计思想
• Swift是一个高可用、分布式、最终一致性的对 象存储系统,使用通用服务器构建
使用异步更新的原因:在请求来量大时,containerserver不能实时处理对数据库更新的请求,这些请 求将被本地化到队列中(async_pending目录下), 由updater进程进行异步更新。
对象复制器
这个进程运行在storage node中负责object在集群中 副本的同步
把每一个本地虚节点和该虚节点的其它副本进行比 较来发现不一致的地方
Swift 特性
• 数据最终一致的设计思想
• 没有得到全部副本写成功之前就给用户返回结果
• 极高的数据持久性
• 99.999999999%
• 高并发
• 无共享结构(Share-nothing)
• 完全对称的系统结构
• 无单点故障
• 硬件设备要求低
• 使用常用服务器搭
Swift 的主要概念
• 账号(Account)
对象存储服务器
负责存储对象的数据及元数据
对象系统特点 Swift系统概念 Swift系统架构
Ring的概念
可靠性机制
虚节点:Partition
Swift把存储服务器的存储空间分成许多个小的存 储空间,称为虚节点(Partition)
每个虚节点可以用来存放对象、容器、账号 虚节点作为Swift的一个基本管理单位 一个虚节点中可以存放许多个对象
• Swift URL(ID)
• 使用URL访问对象、容器和账号
• https:///v1/<account>/<container>/<object>
Swift逻辑结构
容器只有一级
Swift物理结构
容器 A
对象 a
对
象
对象 b
(
容 器
对象 c
)
容器
B
对象
d
IDs
对象 e
• 每个用户必须有一个账号。只有通过Swift验证的账号才能访问 Swift系统中的数据。提供账号验证的节点被称为Account Server。
• 容器(Container)
• 类比Windows操作系统中的文件夹,用于组织管理数据,但是不能 嵌套
• 对象(Object)
• 基本存储单元。一个对象包含两部分,数据和元数据。其中元数 据包括对象所属container名称,对象本身名称以及用户添加的自 定义数据属性(必须是key-value格式)。
对象 f
采用扁平化结构管理所有数据:对象,容器
只需要根据ID就可以直接访问对象,容器
访问对象并不需要首先访问容器
解决树形目录结构的问题
Swift对象元数据的处理
采用分布式元数据管理
解决了元数据服务器单一失效点问题,保证了元数据的 高可用性
元数据和数据一起存放,可以分布在任何节点
保证元数据不会丢失,两者间的连接是可靠的 对两者的更新可以同时进行
个副本 如果2个副本的值不一样,如何决定哪一个是最新值?
那么谁来完成这些任务呢?
Swift的详细架构
对象服务器、容器服务器、帐号服务器 对象审计器、容器审计器、帐号审计器 对象复制器、容器复制器、帐号负载器 对象更改器、容器更改器
对象服务器
负责处理对Object的操作请求 使用XFS文件系统存储对象数据 使用xattrs存储元数据 对象名上含有时间戳