Swift分布式技术架构解析.docx

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

?

?

分布式存储技术解读系列之三

Swift分布式技术架构解析

?

?

1.什么是Swift?

首先,我们从OpenStack的官方网站上,可以看到Swift的定义:“TheOpenStackObjectStoreproject,knownasSwift,offerscloudstoragesoftwaresothatyoucanstoreandretrievelotsofdatawithasimpleAPI.Itsbuiltforscaleandoptimizedfordurability,availability,andconcurrencyacrosstheentiredataset.Swiftisidealforstoringunstructureddatathatcangrowwithoutbound.”。从它的定义上我们可以明确它是OpenStack框架当中的一个对象存储组件,它专门用于海量非结构化数据的存储,而且它具备以下特性:

(1)扩展性(Itsbuiltforscale):意味着节点的横向扩展能力,这是它的核心;

(2)并发能力(Concurrency):意味着高并发处理机制,必须是以分布式集群架构为依托的;

(3)高可用性(Availability):意味着节点的故障或者架构的变化对它的影响很小。

接下来,我们从其架构原理以及读写原理上来分析其如何支撑定义当中所提到的各个特性。

2.?Swift架构原理

2.1?Swift存储功能架构

从功能角度来讲,Swift存储系统仅仅提供对象存储服务。从客户端发起请求到Swift存储提供数据服务整个过程需要经过代理层和数据存储层两部分。

代理层向用户提供Swift的API接口,对于客户端的PutGet请求,代理层首先会查找被操作实体对象的物理位置,然后会将请求发送给存储节点层获取对象存取的服务;由于客户端的对象存取请求是通过无状态的REST协议完成的,因此我们可以在外层加负载均衡。

具体如图2.1所示:

图2.1Swift存储系统功能图

Swift-PRoxy

(1)提供RESTAPI给客户端;

(2)无状态服务模式,由多个代理节点组成一个集群;

(3)将客户端请求转给某个存储节点上的数据读写服务,完成客户端请求;

这里,可能会有2个问题:“Proxy如何知道某个对象应该存储到存储节点层的具体位置?Proxy如何知道要查找的对象到底已经存储到什么位置了??”

暂且我们带着问题往下读。

Swift-Storage-Nodes

(1)数据存取寻址服务(Account、Container、Object);

(2)数据一致性保护服务(Replicator、Updater、Auditor);

这里,同样会有问题:“?这些服务到底有何作用,扮演何种角色??”

暂且我们带着问题往下读。

2.2?Swift数据对象组件

我们先看Swift的数据模型,通俗讲就是Swift当中的对象数据是以什么样的形式在存储系统里面组织起来的,基本上我们认为Swift的数据模型使用了以下三个概念:

①?账户(Account)

OpenStack天生就是为云而生的框架,Swift作为它的核心组件之一,那么自然有租户的概念,暂且我们把这个Account理解为类似租户的用户命名空间隔离的概念。Account的配置数据和其下级Container的列表数据都会被保存在SQLite数据库当中。

②?容器(Container)

容器类似于文件系统中的目录,主要目的就是将对象数据进行逻辑分割,由用户自定义,同样它包含自身的配置数据和容器内的对象列表数据,也是被保存在SQLite数据库中。

③?对象(Object)

对象即客户端对象请求对应的物理对象文件,包括数据本身和数据对应的元数据,它们会以文件形式保存在存储节点上的文件系统上。

图2.2Swift数据对象组件图

从图2.2当中,我们可以看到Acount/Container/Object的组成关系,同时也能看到真正支撑这些对象服务的存储服务器节点与他们的关系。每个对象在不同的服务器上都会有相应的服务进程(AcountService、ContainerService、ObjectService)为其对象提供服务,所有节点上的同类服务组成了共同的对象服务。

2.3?Swift数据映射过程

在2.2节当中,我们详细介绍了Swift数据的组织形式,但是并没有阐述如何放置和寻找数据。要解决这个问题,就需要Ring这个概念了。Swift根据由管理员配置的Ring使用相对简单直接的算法来确定对象的

文档评论(0)

180****0576 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档