面向云计算平台的在线存储系统研究与实现
耿胜男1, 刘川意1,2, 吴旭1,3
1.北京邮电大学可信分布式计算与服务教育部重点实验室 北京 100876
2.北京邮电大学软件学院 北京 100876
3.北京邮电大学图书馆 北京 100876
摘要

研究基础设施云中的重要组成部分——云存储系统中在线存储系统的设计与实现。本系统的设计遵循REST架构模式,使用cURL、HSQLDB等开源组件实现目录与文件的创建、上传、下载、删除等功能。

关键词: 云存储; 在线存储系统; 基础设施云
Research and Implementation of Cloud Computing Platform Oriented Online Storage System
Geng Shengnan1, Liu Chuanyi1,2, Wu Xu1,3
1.Key Laboratory of Trustworthy Distributed Computing and Service (BUPT), Ministry of Education, Beijing 100876, China
2.School of Software Engineering, Beijing University of Posts and Telecommunications, Beijing 100876, China
3.Beijing University of Posts and Telecommunications Library, Beijing 100876 , China
Abstract

This paper designs and implements an important part of the infrastructure cloud - online storage system of the cloud storage system. The system follows the REST architectural pattern, and uses cURL, HSQLDB and other open source components to achieve the creation, upload, download and delete of directories and files and other functions.

Keyword: Cloud storage; Online storage system; IaaS
1 引 言

云计算是一种基于因特网的超级计算模式,它包括以下几个层次的服务:基础设施即服务(Infrastructure as a Service,IaaS)、平台即服务(Platform as a Service,PaaS)和软件即服务(Software as a Service,SaaS)。

IaaS也称基础设施云,是指消费者通过Internet可以从完善的计算机基础设施获得服务[ 1]。它是云计算的最底层,也是最重要的一层。

本文将一个典型的基础设施云解构为5个子系统,分别是:虚拟化运行环境子系统;云存储子系统;虚拟网络子系统;模块互联子系统;用户管理子系统。其中云存储系统是基础设施云中不可或缺的一部分,它可以通过两种方式为用户保存数据:用户可以将数据存储在虚拟磁盘存储系统提供的虚拟磁盘中;用户可以将数据写入文件,然后上传文件至在线存储系统。本文设计并实现了基础设施云存储子系统中的在线存储系统。

2 国内外研究现状

在基础设施云的研究方面,国外起步比较早,其技术更为先进成熟。国内起步较晚,可供参考的研究比较少。本文考察了多种开源的基础设施云,分析了其中的存储系统。

(1)Eucalyptus[ 2]是一个开源的云计算平台。它通过一组面向用户的接口和亚马逊的EC2、S3服务标准兼容。作为一个典型的模块化系统,Eucalyptus是一种属于IaaS的私有云和混合云,将基础设施资源(如计算资源、存储资源和网络资源)通过单一的接口提供给用户访问。Eucalyptus中的组件Walrus是一种基于对象的存储,实现了亚马逊S3接口,以取出(GET)和放入(PUT)的方式提供对虚拟机镜像的一致性存储,并对用户数据提供访问控制机制。而存储控制节点SC是一种块级的网络存储资源。它实现了亚马逊的 S3 接口,通过网络文件传输协议,实现弹性存储,为虚拟机提供数据的保存。SC 与 Walrus 联合工作,用于存储和访问虚拟机映像、内核映像、RAM 磁盘映像和用户数据。

(2)OpenStack[ 3, 4, 5]是由RackSpace和NASA提出的一个云计算项目,旨在让任何人都可以自行建立和提供云端运算服务。OpenStack中的子项目Swift 提供对象存储。

(3)Scalr[ 6]是一种开源的基于Web的云计算管理平台,用它来管理亚马逊弹性计算云,由Scalr公司开发。Scalr可以创建和管理超规模的基础设施,提供并配置从缓存到数据库的所有东西,来处理需求高峰。

(4)Nimbus[ 7]是一个开源工具集,提供“基础设施即服务”(IaaS)的云计算解决方案,得到了Ocean Observatories Initiative(OOI)、Future Grid Project、NSF SDCI Missing Links Project、NSF CSR Virtual Playgrounds Project、DOE SciDAC CEDPS Project的支持。Nimbus包括云存储服务,称为Cumulus,它与亚马逊网络服务S3的REST API及其他中央服务兼容(如配额管理)。

(5)Enomalism[ 8, 9, 10]是一个开源的基于网络的虚拟基础设施平台,它提供了一个功能类似于EC2的基础设施云。Enomalism基于Linux,支持Xen、KVM和VMware虚拟机管理器。而它的不同之处在于,Enomalism 提供了基于 TurboGears Web 应用程序框架和 Python 的软件栈。

3 需求及技术思路
3.1 功能需求

该系统为用户永久存储数据,应允许用户创建、删除、列举文件夹,上传、下载、删除文件,以及对文件夹和文件设置控制信息,并且还要提供其他机制来方便用户管理存储于系统中的数据。例如通过设置VersionId来为用户管理不同版本的文件;提供普通下载方式和BT下载方式两种选择等。在线存储系统同时可以担负存储虚拟机镜像的职责,允许用户和其他子系统对虚拟机镜像进行上传、下载、删除等操作。

3.2 开源组件

根据以上分析,笔者决定使用的开源组件包括:

(1)基于RESTful模式的文件访问

HTTP[ 11](超文本传输协议)是分布式双向超媒体信息系统应用层协议,主要应用于WWW。通常HTTP消息包括客户机向服务器的请求消息和服务器向客户机的响应消息。

RESTful Web[ 12]服务(也称为 RESTful Web API)是一个使用HTTP并遵循REST原则的Web服务。它从以下三个方面的资源进行定义:

①URI,如:http://example.com/resources/;

②Web服务接受与返回的互联网媒体类型,如:JSON、XML、YAML 等;

③Web服务在该资源上所支持的一系列请求方法,如:POST、GET、PUT或DELETE。

与基于SOAP的Web服务不同的是,RESTful Web服务并没有“正式”的标准。这是因为REST是一种架构,而SOAP只是一个协议。虽然REST不是一个标准,但在实现RESTful Web服务时可以使用其他各种标准,如HTTP、URL、XML、PNG等。

本文在线存储系统的整体设计遵循REST的架构模式,使用RESTful模式的文件访问。

(2)cURL

cURL[ 13]是一个利用URL规则在命令行下工作的文件传输工具,支持文件的上传和下载,是一款综合传输工具。它支持的协议有:FTP、FTPS、HTTP、HTTPS、GOPHER、TELNET、DICT、FILE以及 LDAP。cURL同样支持HTTPS认证、HTTP POST方法、HTTP PUT方法、FTP上传、Kerberos认证、HTTP上传、代理服务器、Cookies、用户名/密码认证、下载文件断点续传、上载文件断点续传、HTTP代理服务器管道(Proxy Tunneling),甚至还支持IPv6、Socks5代理服务器,通过HTTP代理服务器上传文件到FTP服务器等,功能十分强大。

本系统使用cURL向在线存储系统发送HTTP请求,调用在线存储系统功能。

(3)HSQLDB

HSQLDB[ 14]是一个开放源代码的Java数据库,其具有标准的SQL语法和Java接口,可以通过 JDBC Driver来存取, 支持 ANSI-92 标准的 SQL 语法;而且占用空间很小, 大约只有 160K, 拥有快速的资料库引擎; 也提供了一些工具, 例如 Web-Server、记忆体查询及一些管理工具。HSQLDB提供三种数据库模式:Server模式、进程内模式(In-Process)和内存模式(Memory-Only)。

本系统使用HSQLDB来存储后台资源元数据。

3.3 体系结构

在线存储系统以存储桶(Buckets)和对象(Objects)的结构进行组织,其中Buckets与文件系统中的目录对应,而Objects与文件系统中的文件对应。

在线存储系统体系结构分为三个部分,分别是:

(1)服务接口

服务接口作为在线存储系统的入口,接收从普通用户或者其他子系统,如虚拟磁盘子系统、虚拟化运行环境子系统中发出的存取请求,其中虚拟磁盘子系统中只对虚拟磁盘的快照进行存取,虚拟机化运行环境子系统只对虚拟机镜像文件进行存储。

(2)文件存储系统

文件存储系统将用户或者其他子系统需要存储的文件按照既定的方式及流程进行处理(如加密、解密、分块、重组等操作)之后再按照既定的组织结构进行存储。

(3)元数据存储

元数据存储通过对文件存储系统中所存储文件的元数据进行存储及管理,方便用户及管理员或其他子系统操作文件存储系统中的海量文件。

在线存储系统的体系结构如图1所示:

图1 在线存储系统体系结构

4 系统实现

在线存储系统是基础设施云中的重要组成部分,用户可以通过以太网访问该系统。系统主要包括文件的上传、下载、删除、设置访问权限等操作。这些操作会根据不同用户呈现出不同形式。该系统总共包括16个功能原语:访问控制列表管理、创建Bucket、删除Bucket、Bucket的版本控制信息管理、查询用户Bucket信息、上传Object、下载Object、删除Object,镜像文件的绑定、上传、注册、注销、下载以及快照保存、删除、下载。

在线存储系统中的每个Bucket和Object都绑定一个访问控制列表(Access Control List, ACL)信息。ACL定义了不同用户或组对Bucket和Object的访问权限。例如,用户A创建了一个Bucket,名为bucketA,如果定义的ACL列表中授权用户B对该Bucket具有写权限,那么用户B就可以在该Bucket中上传Object。当用户B上传Object时,系统需要验证该用户是否对bucketA具有写权限,验证通过后,执行上传文件操作,否则返回Access Deny的错误通知。当用户创建Bucket或上传Object时,系统会为用户创建一个默认的ACL,使该用户对该Bucket或Object具有完全访问权限。

使用ACL的实际用途体现在:对于个人而言,可以通过设置某个Bucket或Object为对所有人可读,表明该文件为公开,可以向所有人分享;也可以设置指定用户的读写权限,表明只向这些人公开;也可以设置某些隐私文件只有自己具有读写权限。对于一个公司或组织而言,可以设置Bucket或Object为所有人可读,表明文件为公用;也可以设置某个Object对某个组用户为可读可写,表明该文件为某个部门所管理。但需要说明的是,对于Admin用户而言,ACL是失效的,也就是说管理员可以查看所有普通用户的Bucket和Object。用户访问带有ACL的Object对象的过程如图2所示:

图2 用户授权访问流程

ACL的权限可分为5种:FULL_CONTROL, WRITE, WRITE_ACP, READ, READ_ACP,权限解释如表1所示:

表1 ACL权限说明

下面将以上传Object功能的实现为例进行详细的阐述。

用户上传Object时,上传的数据流保存在HttpRequest中,服务器获得上传的数据流后,对其进行分块并保存在一个数据块队列中。这里需要使用多线程机制并保证线程安全(如果多线程每次运行的结果和单线程运行的结果是一样的,而且其他的变量值也和预期是一样的,就是线程安全的)。当同时有多个用户或单个用户上传多个文件时,上传数据都不会互相干扰。其主要流程包括:

(1)数据库中查找上传Object所在的Bucket;

(2)判断Bucket的Versioning属性是否设置为Enabled,如果为Enabled,则产生一个全局唯一随机数赋给Object的VersionId,否则其VersionId为null;

(3)获得上传文件的数据块队列;

(4)在Bucket中写入上传的Object文件。

文件上传与下载时与数据库的交互过程如下:

(1)用户上传test.ppt,向在线存储系统发送上传文件请求PUT Bucket/test.ppt,请求转到Manager.java。

(2)调用Manager.java的putObject方法,在Bucket下创建test.ppt文件,其文件名object_name为使用UUID生成的全局随机码。

(3)向数据库发送commit操作,将该Object的ObjectInfo条目保存在数据库中,test.ppt作为object_key保存在ObjectInfo中。

(4)用户下载test.ppt,向在线存储系统发送下载文件请求GET Bucket/test.ppt。

(5)调用Manager.java的getObject方法,到数据库中查找用户所需下载文件。

(6)通过以下代码在数据库中查询用户请求下载的文件:

//以bucketName(Bucket)和objectKey(test.ppt)为参数,实例化一个ObjectInfo

ObjectInfo searchObjectInfo = new ObjectInfo(bucketName, objectKey);

searchObjectInfo.setVersionId(request.getVersionId());

//设置VersionId

searchObjectInfo.setDeleted(false);

//设置Delete标识为false

if(request.getVersionId() = null)

searchObjectInfo.setLast(true);

//设置Last为true

//在数据库中查询满足上面条件的searchObjectInfo,保存在List objectInfos中

ListobjectInfos=dbObject.query(searchObjectInfo);

ObjectInfo objectInfo = objectInfos.get(0);

//得到用户需要下载的objectInfo

(7)找到文件后,通过cURL的HTTP数据传输将test.ppt下载到用户本地。

具体过程如图3所示:

图3 用户上传下载文件时与数据库的交互

5 系统应用

在线存储系统界面如图4所示,左边为折叠目录,点击“云存储空间”的“云端目录”会显示系统的界面。后面为系统的显示区,系统的功能有“创建目录”、“删除目录”、“刷新目录”、“上传文件”、“下载文件”、“删除文件”,点击相应的按钮可以完成相应的功能。上半部分显示上传的目录名称和创建的时间,下半部分显示所选目录包含的文件名称。

图4 在线存储系统界面

本系统实现了目录的创建、删除、刷新,文件的上传、下载与删除功能。如:点击“创建目录”按钮,在系统弹出的对话框中输入目录的名字,目录创建成功,可以在系统右半部分查看已创建的目录,如图5所示:

要在test目录下上传文件,则用鼠标选中test目录,然后点击上传文件,等待文件上传成功后,则可以在右半部分查看已上传的文件。图6为上传文件后的系统图。

6 结 语

基础设施云是云计算平台最基础的部分。文章设计研究了基础设施云中云存储子系统的在线存储系统,进行了系统的设计并实现了目录的创建、删除、刷新,文件的上传、下载与删除功能。系统满足用户对存储的需求,扩展了存储空间,提高了存储效率。本系统是实现一个完整的云平台的重要部分。未来将继续完善该系统的功能,提高其安全性,使其更加贴合用户的需求。

参考文献
[1] 百度百科. 云计算 [EB/OL]. [2012-03-29]. http://baike.baidu.com/view/1316082.htm.(BaiduBaike.CloudComputing[EB/OL]. [2012-03-29]. http://baike.baidu.com/view/1316082.htm [本文引用:1]
[2] Eucalyptus [EB/OL]. [2012-03-29]. http://open.eucalyptus.com/. [本文引用:1]
[3] Open Source Software for Building Private and Public Clouds [EB/OL]. [2012-03-29]. http://www.openstack.org/. [本文引用:1]
[4] Wikipedia. OpenStack [EB/OL]. [2012-03-29]. http://en.wikipedia.org/wiki/OpenStack. [本文引用:1]
[5] Stokes J. OpenStack ‘Diablo’ is Out [EB/OL]. (2011-09-22). [2012-03-29]. http://www.wired.com/cloudline/2011/09/openstack-diablo-is-out/. [本文引用:1]
[6] Wikipedia. Scalr [EB/OL]. [2012-03-29]. http://en.wikipedia.org/wiki/Scalr. [本文引用:1]
[7] Wikipedia. Nimbus (Cloud Computing) [EB/OL]. [2012-03-29]. http://en.wikipedia.org/wiki/Nimbus_%28cloud_computing%29. [本文引用:1]
[8] Enomaly中文介紹 [EB/OL]. [2012-03-29]. http://trac.nchc.org.tw/grid/wiki/enomaly_ch.( Enomaly’s Introduction in Chinese [EB/OL]. [2012-03-29]. http://trac.nchc.org.tw/grid/wiki/enomaly_ch [本文引用:1]
[9] Wikipedia. Enomaly Inc [EB/OL]. [2012-03-29]. http://en.wikipedia.org/wiki/Enomaly_Inc. [本文引用:1]
[10] Enomalism: XEN Virtualized Server Management Console [EB/OL]. [2012-03-29]. http://enomalism.com/fileadmin/assets/templates/main/07_tmpl_2.html. [本文引用:1]
[11] 百度文库. Linux下LibCurl编程(一) [EB/OL]. [2012-03-29]. http://wenku.baidu.com/view/44ee693f5727a5e9856a61a7.html.(Baidu Wenku. Coding with LibCurl in Linux(a) [EB/OL]. [2012-03-29]. http://wenku.baidu.com/view/44ee693f5727a5e9856a61a7.html. [本文引用:1]
[12] Wikipedia. REST [EB/OL]. [2012-03-29]. http://zh.wikipedia.org/wiki/REST. [本文引用:1]
[13] 百度百科. cURL [EB/OL]. [2012-03-29]. http://baike.baidu.com/view/1326315.htm.(BaiduBaike.cURL[EB/OL]. [2012-03-29]. http://baike.baidu.com/view/1326315.htm [本文引用:1]
[14] HyperSQL. HSQLDB - 100% Java Database [EB/OL]. [2012-03-29]. http://hsqldb.org/. [本文引用:1]