云存储中的对象存储数据同步方法研究硕士学位论文.doc_第1页
云存储中的对象存储数据同步方法研究硕士学位论文.doc_第2页
云存储中的对象存储数据同步方法研究硕士学位论文.doc_第3页
云存储中的对象存储数据同步方法研究硕士学位论文.doc_第4页
云存储中的对象存储数据同步方法研究硕士学位论文.doc_第5页
已阅读5页,还剩50页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

浙江大学硕士学位论文 abstract 云计算平台中对象存储的数据同步方法研究 摘要随着云计算的快速发展,以及数据产生速度的不断提高,各种云计算平台和应用对信息存储的要求也越来越高。包括亚马逊、谷歌和ibm在内的很多互联网巨头都投入到对云存储系统的研究中。本文通过分析openstack平台的云存储系统swift,在对该系统进行分析的基础上,了解云存储系统中对象存储技术的使用,以及对象存储系统中同步各类数据的方法。同时本文使用了一定的篇幅详细分析了swift存储系统中客户端与系统的数据传输,并研究了存储系统内维护对象的一致性而进行的同步,基于此提出可配置副本存储方案在数据同步方面所需要进行的设计开发。在上述工作的基础上,通过修改swift的部分源代码,调整系统的配置结构和业务逻辑,实现可配置副本的存储方案。最后,基于云存储系统的应用环境对设计的系统进行分析,讨论该系统在不同情况下的工作方式并给出系统api调用的方法示例,评估系统在实际应用环境中的表现。关键词:云存储,对象存储,对象同步,一致性i浙江大学硕士学位论文 abstractabstractwith the rapid development of cloud computing, as well as the continuous improvement of the data generation, a variety of cloud computing platforms and applications for information storage requirements are also increasing. many internet giants, including amazon, google and ibm are put into the cloud storage system.in this paper, we analysis the openstack cloud storage platform system swift. based on analyzing the system, we try to understand the using of cloud storage system and object storage technology. at the same time, we use a detailed analysis of the data transmission and the client of the system in the swift storage system, and research the synchronization for the sake of consistency maintenance of the object storage system. then, we study the design of a configurable copy storage scheme for the data synchronization.on the basis of the above-mentioned work, we modify the swift part of the source code, adjust the configuration of the system structure and business logic to design and develope the configurable storage solutions.at last, we analyse the system based on storage system application environment for the design, discuss the way of working on the system in different circumstances and give the example for a method of system api calls to assess the performance of the system in actual application environment.key words:cloud storage, object storage,object synchronization,consistency. ii浙江大学硕士学位论文 目录目录摘要iabstractii图目录iv表目录v第1章 绪论11.1 研究背景11.2 研究现状及发展趋势11.2.1 国外云存储技术发展现状11.2.2 国内存储技术发展现状21.2.3 发展趋势31.3 论文内容和结构31.3.1 主要研究内容31.3.2 论文组织结构3第2章 相关理论基础52.1 云存储52.1.1 云存储的结构52.2 对象存储62.2.1 存储对象72.2.2 优势比较92.3 一致性哈希102.3.1 简单哈希算法102.3.2 一致性哈希112.4 数据同步112.5 本章小结12第3章 openstack swift技术解析133.1 openstack云计算平台133.1.1 openstack架构143.1.2 openstack未来153.2 swift架构153.2.1 swift架构分析163.2.2 swift存储访问过程173.3 swift中对象的存储结构183.3.1 帐号存储结构183.3.2 容器存储结构203.3.3 对象存储结构223.4 对象同步233.4.1 对象服务233.4.2 复制器273.5 本章小结31第4章 设计与分析324.1 系统设计324.1.1 原型分析324.1.2 开发设计思路324.2 系统结构334.3 系统工作流程354.4 client开发354.5 系统环境与性能分析374.5.1 测试环境配置374.5.2 测试结果分析384.6 磁盘故障与多备份效能分析404.7 多备份系统性能分析414.8 系统分析综述434.9 本章小结44第5章 总结与展望455.1 论文回顾455.2 未来展望45参考文献47作者简历49致谢50iii浙江大学硕士学位论文 表目录图目录图 2.1云存储系统结构6图 2.2对象组成8图 2.3虚拟目录技术9图 2.4传统哈希11图 3.1 openstack架构图14图 3.2 新浪swift存储系统17图 3.3 帐号存储结构19图 3.4 账号存储展示19图 4.1 可配置副本系统结构34图 4.2 系统运行中的一次测试结果37图 4.3 测试客户端38图 4.4 由于同步故障的性能下降39图 4.5 aws instance 列表41图 4.6文件上传到系统的效率42图 4.7从系统传出文件的效率42表目录表 3.1 account-stat表结构20表 3.2 container_stat结构21表 3.3元数据写入26表 3.4 对象检测代码27表 3.5 get_hashes方法29表 3.6 invalidate_hash方法30表 4.1 auth调用36表 4.2不同类型文件上传同步比较39表 4.3mtddl分析40v浙江大学硕士学位论文第1章 绪论第1章 绪论1.1 研究背景当前,随着信息技术的快速发展,数据的生成速度飞速的提高,加上互联网应用的覆盖面和需求不断的提升,每年数据的生成以3到5倍的速度增长1。传统的数据传输和存储方式正在发生巨大的变化。目前,人们正在大力发展云计算技术来解决传统的信息存储与处理技术在处理海量数据时的不足。因此,高效的云存储系统作为云计算技术发展的产物和满足云计算对数据存储的更高要求的需求,必然成为今后存储领域发展的方向。云存储改变了以往数据主要集中在本地存储和处理的传统模式,企业和个人用户无需再投入大量购置硬件等设施的成本就能够方便快捷地通过网络根据需求访问计算与存储等服务2。同时,作为新时期的一个重要的存储变革,对象存储的概念逐渐的在海量数据的浪潮中脱颖而出,作为对文件存储和块存储的补充和革命,它正在快速的占领大规模存储技术的舞台。同时,由于它的一些优良特性,与云计算可以很好的结合起来,实现存储和应用的整体高效化,极大的驱动和发挥了云计算的性能。本文中所描述的云存储系统主要基于开源的云计算框架和平台组建,在吸收成熟和开放的技术基础上,主要对云存储环境下的数据同步方案的进行解析,同时通过研究实现直接配置存储实例数的存储系统,从而完成对云存储系统中对象存储方案的深入分析和优化过程。通过研究和实现存储系统的内部结构与配置以及存储优化,可以更好的利用网络带宽和存储空间,从而通过提供优化的访问接口,加速对数据的访问过程,给云计算服务带来性能的提升。1.2 研究现状及发展趋势1.2.1 国外云存储技术发展现状在国外,云存储技术已经得到了广泛的应用。尤其是在需要大规模计算和数据吞吐的领域,云存储正在作为云计算的重要组成部分发挥着巨大的作用。在亚马逊,通过对对象存储技术的研究和应用,简易储存服务(amazon s3)为企业提供了一种以实惠价格的方式来存储大量数据。虽然s3没有向外提供很多的前端功能,但是也正因为如此它更广泛的应用于作为其他互联网云存储工具的后台支持力量来存在。这样,s3的周围就形成了一个庞大而健康的生态圈,又进一步的推进了它的发展。emc公司作为企业存储和虚拟化市场的领头人,提供了主流的存储服务mozy,并拥有了超过80,000余家企业客户。与其他的一些网络磁盘和存储服务不同,mozy主要集中于备份而不是文件共享,它同时支持微软和苹果的操作系统。企业的云存储方面,真正的王者还要数box,它拥有至少140,000家,其中甚至包括大约400家世界500强企业3。box公司的产品有一个非常简单和直观的界面,可以方便地共享和访问文件,并带了一系列的工具,如salesforce的整合和管理控制台进行有效的用户管理。同时,ibm也于近日宣布加入openstack项目4,加上intel、vmware等国际知名企业的加盟,openstack已经成了冉冉升起的朝阳。1.2.2 国内存储技术发展现状与国外的情况类似,国内的云存储业务也是由各大it互联网企业依托于自身的技术或者平台搭建起来的。在华为,依托于自身的硬件技术,利用推广能力和初始容量的优势,推出了数据银行来作为一个新的业务扩张点。同时,更加一步的,他们积极的开发新的符合云计算趋势的硬件系统,成为了国内少有的软硬兼修的云计算提供商。而新浪、腾讯等企业,也从企业已有的门户和平台的优势出发,推出了微盘、网盘等新的服务。尤其是腾讯,不仅仅是传统的存储服务,同时也根据用户的需求和反馈,将离线传输、文件中转站等概念加入到了自己的产品线中,从而在云存储技术的应用上展开了宽阔的前沿。金山在这场长跑中也站在了一个有利的位置,将传统的应用需求云端化,再加上国内几乎是独一无二的国产办公应用软件,金山快盘的市场占有率也在逐渐攀升。其用户数在2012年末达到了3500万。另外,还有酷盘、115网盘等等处于发展中的云存储提供者。可以说,国内的云存储在技术上和世界并驾齐驱,在市场上也同样的繁花似锦。因而,研究云存储技术是有着直接的应用的价值的。1.2.3 发展趋势目前来说,云存储技术还是处于一个发展的起步阶段,有很多提供商宣称的云存储实际上还只是传统存储技术和概念的延伸。因而它的发展和进步都还在快速的进行中。云存储在未来的发展中,将会更进一步的深入到并扩散到计算机应用的各个领域中,与其他的云计算技术紧密的结合,充分发挥起云计算的优势。同时,当前的云存储由于传统技术的限制,在很多的应用上都还存在一些限制,比如面对海量的文件,传统的存储方式和底层结构已经无法支持。并且,如何提高数据的稳定性和安全性的命题也已经提上了议程。未来的云存储,将可以满足用户对快速增长的数据存储需求,同时也实现用户需要的网络访问性能和功能。成为一种更加安全、廉价、稳定和高性能的主流存储技术。1.3 论文内容和结构1.3.1 主要研究内容本文主要是在理解开源的云服务平台的基础上,通过应用一些新的技术,来实现对存储系统的解析和二次开发,并实现一个基本的网络存储应用。本文的主要研究内容包括:首先,部署云服务平台,深入了解平台组件之间的关系,分析各个模块的作用和依赖。完成对关键模块的代码分析并整理出按照课题目标需要进行的工作。其次,分析系统的底层实现,并对swift进行二次开发,通过调整内部的数据同步方案来进一步研究存储同步技术以及它的实现。最后,在上述原型系统上开发一个实验性的网络存储应用,分析评估在现实的应用中,该系统的作用和性能。1.3.2 论文组织结构第一章为绪论部分,介绍了论文的研究背景,研究现状及发展趋势,以及本篇论文的研究内容和组织结构。第二章介绍了有关对象存储和云储存平台的相关背景知识,简要的介绍了openstack开源平台和restful风格。第三章分析了openstack平台下的对象存储组件swift的基本结构,结合第二章的理论重点分析了其同步对象的工作原理和机制。同时也介绍了swift存储系统的存储结构和对象同步机制,重点分析了在可配置副本方案下,同步机制需要进行的改动和设计。第四章主要综合介绍了本文研究的系统的结构和工作流程,分析了设计中遇到的问题及处理方法和研究工作的成果。通过部署单节点的运行环境和在aws上部署多节点的运行和测试环境,分析基于对象存储的云存储系统的存储与同步的性能。并分析可配置副本设计的工作性能。第五章是全文的总结和对未来工作的展望。4浙江大学硕士学位论文第2章相关理论基础第2章 相关理论基础2.1 云存储云存储是基于云计算的概念扩展到存储领域而形成的概念,是云计算的重要补充和支持,也是传统的存储概念在云计算时代的更新发展。云存储是云计算的存储部分,即虚拟化的、易于扩展的存储资源池。存储作为一种服务,通过网络提供给用户。用户可以通过云计算来使用存储资源池并根据使用的情况付费。2.1.1 云存储的结构目前,公认的云存储由存储层、设备管理层、应用接口层、访问层组成5。存储层:云存储最基础的部分。主要是由通过光域网、光纤等手段连接在一起的存储设备组成,并且包括一个统一的设备管理平台来实现对设备虚拟化的管理和监控维护工作。设备管理层:云存储中最主要的部分,也是功能和实现最复杂的部分。通过集群、分布式文件系统和网格计算等技术,实现云存储中多个存储设备之间的协同工作,使多个存储设备对外提供同一服务,并提供更强的数据访问性能。应用接口层:云存储中最灵活多变的部分。通过具体的应用提供不同的接口。访问层:通过公共的授权接口获得服务。具体的实现方式往往和服务提供商提供的业务相关。如下图2.1所示:图 2.1云存储系统结构所以,云存储的开发主要集中在设备管理层的开发上,包括各种数据和设备管理的子系统。这些子系统组成了云存储的基本架构。客户代理子系统(ca)是用户访问云存储的门户,可以进行文件和目录的读、写、修改等操作,支持基于文件系统的应用。元数据子系统(mds)是用来管理整个云存储的所有元数据、进行对象条带化和布局分配。对象存储管理子系统(osn/oms)是来存储和管理用户数据。用户数据以对象的方式在osn上进行存储和读写。同时提供对设备的基本管理。集群管理子系统(cms)是用于管理整个云存储,收集系统资源情况,监控设备状态。2.2 对象存储当前,主要流行的存储接口是块级接口和文件级接口。这两种接口也对应了两个流行的网络存储系统san和nas。san通过块级接口提供了较好得到数据吞吐率和可扩展性,但是在跨平台文件共享上有一定的缺陷6。nas则通过文件级接口提供了良好跨平台文件共享,但是在性能和扩展性上不足7。针对这两种系统的缺陷,提出了基于对象的存储的概念。本质上,对象存储是将通用文件系统的底层存储管理部分转移到存储设备上,而其余的功能放在了客户端和元数据服务器上8。从而提供了以对象为传输单位的传输接口,构建出在安全性、可扩展性、跨平台性和性能方面均表现卓越的存储系统。目前,对象存储的实现主要是通过块存储的文件系统加上扩展属性的方式,比如一般操作系统采用linux操作系统,磁盘块的管理目前由通用linux文件系统ext或xfs负责,而对象以文件的形式存储在ext或xfs上。也有一些企业研发了专用的对象存储设备,在硬件的层次上实现了对象管理的功能而不再仅仅依靠操作系统本身的文件系统,这样的技术主要执行ansi t10 scsi osd标准。该设备也被称为对象存储设备。一个对象存储设备(osd)类似于一个逻辑单元。不同于传统的面向块的设备提供作为无关联块阵列组织的数据的访问方式,对象存储允许以存储对象的方式来访问数据。存储对象是一个组织数据的虚拟个体,该虚拟个体通过用户以逻辑上相关的方式进行制定。存储对象的空间是通过设备的本身进行分配而不是一个基于主机的文件系统。osd对所有必要的底层存储设备进行管理,包括空间管理和提供安全功能。因为对于对象没有基于主机的元数据(如inode信息),那么对于应用程序而言获取一个对象的唯一方法就是通过它的对象标识符(oid)。下面简单介绍对象存储内的一些概念和定义。2.2.1 存储对象存储对象是对象存储中的基本组成元素。每个对象是完备的,它由用户数据、一个oid、元数据(构成对象的块的物理位置)和属性构成9。用户数据以文件的形式存储在文件系统中,一般是通过块级的接口利用已有的文件系统保存的。oid是存储对象在对象存储系统中唯一的身份识别信息,它是一个128位二进制id信息,提供了平坦的命名空间,从而可以支持巨大的文件数量。元数据是构成存储对像所占用块的物理位置和一些基本的系统固定内容,也是存储对像实体的实际存在。属性是往往由用户和应用来决定的,通过对属性的解析和操作,完成对对象的一些基本操作和调整。从概念上,存储对像是一个实体,在磁盘中通过文件、扩展属性的方式存在。而对象存储是一个存储的技术,主要是通过存储对象来完成数据存储功能。如下图2.2所示:图 2.2对象组成在对象存储系统中,存储对象的使用将文件存储的元数据从文件系统中分离了出来,从而减少了在不同主机的文件系统之间共享数据块的困难。对象存储中,只需要获得存储对象的oid,通过oid就可以直接的访问到存储的具体数据块和属性信息,不同的主机平台也可以通过唯一的oid独立访问存储对像。而文件系统可以利用目录元数据等维持高层次的索引信息。同时,oid宽阔的命名空间保证了海量数据存储中性能的稳定,通过oid来对存储对象进行的操作,对于同样存储类型的数据是平等的,也不会由于目录层次问题带来性能的波动。10存储对象独立的维护自身的存储信息,对象的存储位置、访问控制等信息封装在对象中。通过对不同层次的数据控制,文件系统可以很容易的建立起从存储设备到对象组、单个对象乃至对象内的数据块的访问控制,从而实现安全、跨平台和高共享度的存储系统。如果需要实现类似传统文件系统的管理和控制界面,可以采用虚拟视图的方式,按照用户和应用的需要,在不同的环境下使用不同的视图来模拟文件目录的结构。而且,得益于存储对象的特性,虚拟视图的创建、变更和删除都可以不影响对象实体存储数据。并且,在虚拟目录技术下,最终排列的对象指针也是直接对对象的访问,相较于传统的目录访问,在文件的存取能力和批量处理上面依然具有很大的性能优势。虚拟目录和传统目录结构见图2.3图 2.3虚拟目录技术2.2.2 优势比较通过解析对象存储的技术结构,我们可以看出,相对于传统的方式,对象存储具有着自己独特的优势,从而在海量数据的操作中可以更加的游刃有余。首先,数据分配和数据块访问控制的功能分配到了存储设备上,从而减轻了文件系统处理压力,消除了传统文件访问的主要瓶颈。而对象存储系统的自我管理又增强了存储设备的智能化,使存储设备可以优化对象的数据块组织,提高存储访问性能。在访问性能上,对象存储的独特架构使得它可以实现高度并行化的数据访问,支持大量用户的同时并发访问并具有高度的可伸缩性。因此,可以看出,面对当前海量数据的浪潮,对象存储的技术尤为适合。主要体现在以下几点:高性能:通过将存储分配功能迁移到存储设备上,解决了传统集中存储分配的性能瓶颈问题。可伸缩性:对象存储的结构具有可伸缩性,直接通过增加存储设备就可以提高存储的容量、吞吐能力,同时也可以很容易的对存储设备进行迁移与升级。高访问能力:在对方存储系统中,客户端可以直接从提供的标准访问接口访问文件资源,一致性的命名方式保证了客户端数据访问的统一。易于管理:面对海量的文件,传统的管理难以保证功能和效率,而对象存储系统将很多的管理功能集成在存储对象中,可以智能化的调整存储方案,管理人员只需要关注虚拟资源的分配而不用投入太多精力在磁盘分卷上。高安全性:与传统的文件由一系列块集合组成相比,对象作为基本存储单位由系统独立控制和管理,使得文件系统能够建立对象存储设备、对象组、单个对象、对象内的字节范围等多层次的安全访问机制。112.3 一致性哈希在分布式系统的应用中,由于设备数量多,应用环境复杂,往往需要频繁的调整存储设备的数量。这时候,如果没有较好的调度算法,设备迁移带来的数据的迁移会成为性能的巨大阻碍。为了解决这个问题,研究者们提出了一致性哈希的调度算法,在实际应用中获得了很大的成功。12在分布式系统哈希算法的使用评估中,有一个重要的指标,这就是单调性。单调性是指如果已经有一些内容通过哈希分派到了相应的缓冲中,又有新的缓冲加入到系统中。哈希的结果应能够保证原有已分配的内容可以被映射到新的缓冲中去,而不会被映射到旧的缓冲集合中的其他缓冲区。而这种缓冲空间的变化在分布式系统中是经常发生的,对性能有着至关重要的影响。openstack swift中,当存储设备发生变化的时候,会调用rebalance方法,也就是对存储设备的映射关系进行重分配,这时候,使用的主要算法就是一致性哈希。这里,通过分别讨论传统哈希和一致性哈希的方式比较二者的特点,主要是在单调性表现上的不同。2.3.1 简单哈希算法以最简单的可动态调整扩展哈希表:线性哈希算法为例,它的基本公式是:x ax + b mod (p)。在这个式子中,p表示全部缓冲的大小,x标识。不难看出,当缓冲大小发生变化时,原来所有的哈希结果均会发生变化,从而不满足单调性的要求。在分布式系统中,为了保证结果可以准确的命中,当哈希表和结果发生变化的时候,就意味着大量的数据迁移,这会对整个系统的性能和可用性产生巨大的影响。如下图2.4所示,不管是对于增加服务器,还是减少服务器,需要迁移的数据都是4个。也就是有(n-1)/n(减少)和n/(n+1)(增加)的数据需要转移。1,43,62,52,4,61,3,53,6图 2.4传统哈希2.3.2 一致性哈希与传统的哈希不同,一致性哈希是将对象映射到哈希环上的某一个点,同时,设备也被映射到哈希环上的某一个点。当对象的映射完成后,按照某种方向找到的第一个设备就是该对象存储的设备。当新增一个节点的时候,由于访问顺序不变,当查找产生不命中的情况时,需要迁移的数据仅仅是处在发生变化的设备映射点和下一个设备映射点之间。相比传统的哈希来说,资源占用会少很多。而且,一致性哈希还有利于解决另一个重要的问题:平衡性。也就是数据在不同设备上面分布的均匀程度。以swift为例,向系统中添加设备时,可以指定设备一些性能参数,从而得到设备的权重。系统在这之后会按照设备的权重进行分配,首先将设备映射到虚拟节点上,这在系统中被称为partition。每个设备会由于不同的权重,分配到不同数量的partition,这些分配信息在系统中被称为ring。通过这样的方式,swift可以保证数据的存储与设备的性能相关,达到设备使用的平衡。2.4 数据同步数据同步技术是一种广泛应用于集群计算、网络管理和移动计算领域中的关键技术。它的目标是如何将位于两个不同的逻辑或者物理位置的文件同步到一个统一的状态。最简单同步技术是直接文件覆盖。首先确定一个版本为最新数据,然后将这个数据覆盖到旧版本数据上即可。但是在网络的环境下,直接的数据同步是一种极为消耗资源的方案。因此,应用中往往采用差分同步的方式,传输两个版本之间不同的部分,而保留版本内相同的部分,从而减轻数据交换的数量。迄今为止,国内外研究者提出了不少用于文件同步的算法。1996年,andrew tridgell和paulmackerras在提出了rsync算法。随着时间的推移,人们也在不断的改进同步的算法13。在1999年andrew tridgell对rsync经典算法进行了深入讨论和研究,比较了rsync中各种数据块校验码算法的优劣,设计了多级签名层次搜索方法以便加快数据块校验码匹配及搜索过程,并且对rsync算法在实际中可能遇到的问题进行了研究14。为了改进rsync算法的性能,bemd freisleben等人进一步通过研究设计实现了一种类似于rsync的多级签名的分布式文件系统的数据块管理算法14。在openstack swift中,差分同步主要用于对虚拟节点的同步,当系统的监控器运行到某一个目录,就会把该目录下的pkl文件与远程目录下的相同文件对比,然后确定发生更改的存储对象,并对该对象进行复制。而在对象的更新过程中,每一次的更新都会向pkl文件中更新自身的记录。在分布式的同步中,当数据出现不一致的时候,由于可能存在多种情况,确定哪一个文件是最新的版本也是一个重要的议题,在swift中,采用的是简单多数的投票方式,即系统初始设定保存奇数个文件,当某一个文件创建或更新时,需要多数节点返回成功才确定保存成功。这样,当读取文件时,先请求版本信息,当多数节点的版本信息被成功获得,那么就可以通过比较反馈信息来得出最新版本的特征,这一点,使得系统不需要在所有的节点都可用的情况下就能够完成数据的验证和更新工作。2.5 本章小结本章主要对全文涉及到的几个主要概念做了简要的解释,同时也对对象存储的特征进行了解析并将它与传统的存储方式进行比较,突出了对象存储在当前海量数据环境下的作用。本章还介绍了一致性哈希和数据同步的一些概念以及它们在swift系统中的应用,其中后者也是本文主要的讨论要点。12浙江大学硕士学位论文第3章openstack swift技术解析第3章 openstack swift技术解析3.1 openstack云计算平台openstack是一个美国国家航空航天局和rackspace合作研发的云端运算软件,以apache许可证授权,并且是一个自由软件和开放源代码项目。它使用python语言编写,具有较好的跨平台特性和易用性16。openstack的版本保持着半年一次的较快更新速度,目前使用比较广泛的版本代号flosom,它主要由多个和云计算密切相关的子系统组成,他们分别是:对象存储系统swift,提供类似于亚马逊s3的简单存储功能。通过对象存储技术,它可以支持极大数量的文件存储以及提供存储服务接口。镜像管理系统glance,用于管理虚拟磁盘镜像目录,这些镜像主要被用于云计算系统。云计算系统nova,提供虚拟设备下的云计算服务,这项技术已经被多家知名企业使用。仪表盘组件horizon,提供web控制平台,可以利用它远程管理openstack的资源。身份认证系统keystone,提供openstack的身份验证和授权服务,并且作为服务向外提供此类的接口。网络服务系统quantum,提供网络连接服务,是新版本加入的功能,也是今后很重要的扩张点。块存储服务cinder,同样是新加入的模块,主要提供块存储的管理。openstack作为一款正在蓬勃发展中的云计算平台,人们势必要把它和已经如火如荼的亚马逊aws平台相比较。而实际上,他们在很多地方都有相似之处,并且在api和一些工具上甚至是可以通用的。从技术上来说,nova和aws ec2很接近,而且有很多方式可以让nova和ec2兼容。类似的,swift也和aws s3在概念上非常相似,它也实现了s3 api的一个子集。另外,glance类似于ami目录,cinder则和ebs很像。3.1.1 openstack架构openstack作为一个整体的设计,目的是提供一个大规模可扩展的云操作系统。为了完成这个目的,就需要上述的各个部件之间紧密的协作,提供一个完整的基础设施即服务的系统。每一个组件都向外提供api作为服务,同时也与其他组件的api相关联。这些api也不仅仅用于系统的内部,只要符合调用的规范,每一个组件都可以独立的向外提供部分服务17。这样,基于openstack的不同云应用,在api上可以保持相当的一致性。下面的结构简图展示了各个部件的关系,其中swift在系统内部的主要作用是提供了虚拟镜像文件的存储服务,同时接受dashboard的管理和keystone的鉴权服务。下图3.1描述了openstack(folsom)基本系统架构图 3.1 openstack架构图图中展示的仅仅是程式化的结构关系,基于整个系统都被使用的情况。实际上,客户可以根据自己的需求来选择部分组件组成自己的云服务。因而,如果仅仅是为了实现一个简单的对象云存储服务,只需要保留swift本身,然后通过一定的开发实现基本的访问与控制接口即可。而要改变swift的内部存储业务逻辑,也只需要改变内部的业务实现,保留系统定义的访问接口以保证其通用性。这也是最小化实现一个存储系统的直接途径。3.1.2 openstack未来由于具有符合时代要求的云计算特性以及易于二次开发和部署的架构,openstack从一开始就得到了大量的拥护,并且以每半年一个版本的速度飞速的发展着。而且,每一个版本都会为之带来更多的新特性和系统组件。不过,openstack也面临着激烈的竞争,不仅仅来自于亚马逊aws和微软azure,尤其是citrix公司从openstack的同盟中退出,自己建立的cloudstack云平台,在吸收了openstack的优点的基础上,进一步的在商业化道路上发展着,同时也获得了大量的云应用商的支持。可以说,目前的openstack面临着激烈的竞争18。openstack本身也在积极的寻求支持和突破,在成为惠普稳定的合作伙伴之后,与思科协作开发了quantum,与vmware合作优化虚拟系统,最近,又和ibm签订了技术合作的协议,使得ibm开始将openstack的技术全面的引进到ibm智慧地球的战略中。openstack的真正意义就在于提供了一个框架和标准的api,用户可以通过它完成个性化的高效的云计算解决方案。有人认为openstack的意义就像linux在操作系统领域的意义一样,通过一个核心和支持的厂商,实现复杂多变的不同应用需求。所以,在可以预见的将来,openstack将会和自己的合作伙伴们一起快速发展,成为云计算领域一个重要的平台和解决方案标准19。3.2 swift架构swift是openstack平台下的重要组成部分,它通过对象存储技术,实现了一个用来创建冗余的、可扩展的对象存储引擎(软件)。从openstack的第一个版本开始,就在为整个的云计算业务提供存储支持。经历多个版本和改进之后,swift在性能和功能上都有了很大的提高,同时,与平台内其他组件类似,在它的基础上进行开发也是比较容易进行和与其它组件结合起来的。3.2.1 swift架构分析一个完整的基于的swift存储系统主要由以下几部分组成。区域(zone),在逻辑或者物理上隔离的不同存储设备组,这些设备通过硬件的管理或者配置来保证不会同时宕机。同时,每一个zone之中只保存存储对象的一个副本,在数据的一致性表决中,通过简单多数的协定(或者称为最低多数协议quorum protocol)来完成。同时,完成存储任务的各个server也独立的运行于每一个zone之中环(ring),保存设备上实体名称和物理位置间的映射。系统中不同的存储对象,如帐号、容器、对象都有相应的环。当swift的其它组件(比如复制)要对帐号、容器或对象操作时,需要查询相应的环来确定它在集群上的位置。同时,当设备发生变更时也需要重新建立环。代理服务器(proxy server),负责swift架构的其余组件间的相互通信。对于每个客户端的请求,它将在自身保存的ring中查询帐号、容器或者对象的位置并且相应地转发请求。也可以使用公共api向代理服务器发送请求。账号服务器(account server),帐号服务器的首要工作是处理容器的列表。服务器并不知道容器的具体位置,只知道指定账号对应的容器。 这些信息以sqlite数据库文件的形式存储,和对象一样在集群上做类似的备份。帐号服务器也对帐号以及账号下面的容易进行监控和统计。容器服务器(container server),与账号服务器功能类似,不过里面保存的是容器内所存储的对象的数据。对象服务器(object server),对象服务器是一个简单的二进制大对象存储服务器,可以提供存储、检索和删除本地设备上对象的功能。在文件系统上,对象以二进制文件的形式存储,它的元数据存储在文件系统的扩展属性(xattrs)中。所以,用于实现swift的文件系统本身必须能够支持扩展属性。在实际的存储中,帐号、容器和对象的处理方式基本一致,而且在整个系统中至少有3份副本,以保证满足简单多数的最低要求。以新浪的采用swift部署的存储系统为例,每一个zone由包含12块2t的硬盘的服务器构成,总共有5个这样的zone构成了整体的存储系统。在生产环境中,也可以在zone的上层增加一个负载均衡的控制来更好的维护访问的均衡性。通过这样一个简洁的存储结构,当系统的存储设备发生变化时,只需要重新建立ring并迁移少量的数据就可以正常的运行,大大的降低了系统扩展的消耗和维护的代价。3.2.2 swift存储访问过程以新浪应用的存储系统为例,当用户存储一份文件时,可以在任何一个zone上面进行映射的计算,从而得到实际应该存储的虚拟目录位置。proxy server将文件发送到对应的对象服务器中,仅当存储系统返回的成功满足简单多数协议时,proxy server返回保存成功。如果用户需要获取某一个存储对象,同样可以向任何一个zone发送对象oid,proxy server通过计算命中对象所在的虚拟目录,对象服务器返回的成功数满足简单多数时,proxy server选择对象服务器并将所要求的存储对像发送给客户。同时,系统内部的更新器按照预设的时间规律的查找失败的存储记录,在系统允许的情况下完成内部的一致性维护工作,保证存储系统的正确运行。如图3.2展示的新浪曾经使用过的swift存储集群结构。图 3.2 新浪swift存储系统从上面的系统我们也可以看到,当访问数据的用户增加,每一个用户可以通过不同的zone获得数据,也就是说,文件的冗余存储带来了io性能的提升。那么,当我们继续增加存储设备的数量,就可以通过增加文件的副本数量的方式来提高系统的访问性能。例如,对于一些拥有大规模访问量的文件共享服务器,通过将副本数量从默认的3份提高到更多的份数无疑可以提供更高的吞吐能力,并且这种增长与投入的设备数量是直接相关的,这种模式可以廉价的获得高弹性的存储性能。在现实的应用中,对于同一个存储系统,不同的应用环境下,对存储访问性能的要求是不相同的。如果直接采用最高性能的配置方案,会带来一定的资源浪费。而且,在多租户系统中,单一的性能配置方案也是不能够满足多样的用户需求的。那么,在现有的系统上找到一种可以充分利用云存储的高可伸缩性的设计方案是具有很强的现实意义的20。通过了解swift的存储过程我们可以看出,要想提升系统的可配置性,最直接的方法就是让系统中副本的冗余度是可配置的。通过提供更灵活的副本数量来提供灵活的吞吐性能选择。3.3 swift中对象的存储结构在swift中,主要存在三种类型的对象,即账号、容器和存储对象。其中,帐号和容器的数据都以sqlite的形式存储在相应的目录中。而存储对象主要是由.data文件和存储并由文件系统的扩展属性来维护meta信息。在每一个具体的存储设备下,挂载的目录内会存在以下子目录,它们是accounts、containers、objects,对应账号、容器、对象的存储目录;async_pending是异步待更新目录;quarantined是隔离目录;tmp是临时目录。下面分别分析帐号、容器和对象的存储结构。其中容器与帐号的存储结构类似。3.3.1 帐号存储结构在accounts目录下存放的是各个partition,而每个partition目录是由若干个suffix_path目录组成,suffix_path目录下是由account的hash名构成的目录,在hash目录下存放了关于account的sqlite db。如图3.3所示图 3.3 帐号存储结构如图3.4,展示了测试系统中的帐号存储结构。图 3.4 账号存储展示如图所示,在存储设备下存在帐号、容器、对象存储目录和临时目录。而帐号的信息以.db文件的方式存储在accounts目录下。如图3.5,对上面的结构进行了分析。pathdeviceaccountpartitionsuffix_pathhash pathhash+extensionsdb1/2/node/sdb2/accounts160771c839d00cc839d00cc83.db图 3.5目录结构解析帐号信息的db文件主要保存了关于account的信息,如名称、创建时间、容器数统计等。共包含了account_stat、container、incoming_sync 、outgoing_sync等4张表,其中最基础的是account_stat表,其内部结构schema如表3.1:表 31 account-stat表结构account_stat (account text, created_at text,put_timestamp textdefault0, delete_timestamp textdefault0, container_count integer, object_count integerdefault0, bytes_used integerdefault0, hash textdefault00000000000000000000000000000000, id text, status textdefault, status_changed_at textdefault0, metadata textdefault );可以看出来,account主要管理了其包含的容器计数、对象计数,并记录空间的使用情况。3.3.2 容器存储结构容器存储结构在文件系统中的目录与帐号存储结构类似,只是其中的账号目录换成了对应的容器目录。容器在swift系统中有着重要的作用,对象可以通过容器直接列举出来,同时也可以按照容器来直接的下载容器内全部对象。所以,容器是与对象存储直接相关的一个逻辑结构。通过对容器的理解和操作,可以完成很多一般的文件系统所做不到或者低效的工作。但是,由于容器是与对象直接相关的结构,它的结构和管理要比帐号数据复杂。db文件中包含了container_stat、object、sqlite_sequence、incoming_sync 、outgoing_sync5张表,object表保存了其下属的存储对象的名称、etag等基本信息。而它最基本的container_stat表的内部结构的schema如表3.2所示:表 32 con

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论