对象存储的架构

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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存储元数据 对象名上含有时间戳
相关文档
最新文档