基于Android的移动云存储系统设计与实现

2011-02-07 11:23王培海
电视技术 2011年15期
关键词:服务端存储系统客户端

王培海

(重庆邮电大学 移动互联网研究所,重庆 400065)

0 引言

随着3G业务的广泛推展,移动互联网已经开始渗透到社会和生活中的各个领域,终端应用也呈现出爆炸式的增长,移动终端已逐渐成为新的应用平台[1-2]。伴随着移动互联网的发展,用户对终端的存储空间以及终端资源的在线共享等要求愈来愈高。然而,移动终端资源受限的瓶颈始终制约着终端应用的发展。

云计算的出现,为解决终端应用瓶颈提供了一种可行的方案。据ABI研究公司调查显示,从2009年到2014年,面向移动终端的云计算应用年增长率将达到88%,2008年该市场的规模为4亿多美元,在2014年,这一数字将达到95亿美元[3]。可见,云计算将会是移动互联网未来发展趋势,而云存储是移动终端利用云计算最明显的方式。本文所实现的云存储系统是将终端应用的高计算与高存储从终端迁移到云平台上,利用云计算强大的计算和存储能力弱化应用对终端设备的处理需求。这种“云+端”的应用开发模式,有效地解决了终端资源受限的瓶颈,使云计算的特点在移动终端上得到充分的展现。

1 相关介绍

云计算(Cloud Computing)[4]是学术界热门研究领域之一,是移动互联网未来的发展方向。云存储是在云计算概念上延伸和发展出来的一个新的概念[5]。它是指通过集群应用、网络技术或分布式文件系统等功能,将网络中大量异构存储设备通过应用软件集合起来协同工作,共同对外提供数据存储和业务访问功能的一个系统。云存储这一概念的提出,得到了众多服务厂商的支持和关注。在国外,Amazon,Google,EMC,Microsoft,IBM纷纷推出了自己的云存储产品。在国内,世纪互联、金山等企业也纷纷推出了自己的云存储服务。可见云存储已经成为未来移动终端存储发展的一种趋势。

笔者通过对云存储相关技术进行研究,借助“云+端”的新型应用开发模式,实现了一个面向移动终端的私有云存储系统。

2 云存储系统功能设计

本系统主要针对当前移动终端存储空间严重不足、计算能力弱以及电池续航能力差等缺点来设计。该系统由多台联网的普通PC机组成的集群系统和一个客户端体验组成。用户通过系统提供的通用接口来访问系统,享受移动云存储服务。系统采用“云+端”的新型应用开发模式进行开发设计,云平台作为系统的服务端,基于Android的移动终端作为客户端,云和端之间通过HTTP协议进行交互。系统整体结构如图1所示。移动终端用户只需要通过一个统一通用的简单应用接口就可以访问云平台服务。在系统的整体设计中,分别采用一台普通计算机作为系统后台的主节点和资源监控节点,采用两组普通PC机构成的集群作为服务节点。

整个系统采用了基于软件的构件化思想和分布式存储技术,实现了系统中数据流的初始化配置和动态存储。同时,按照MVC(Model View Controller)设计模式的要求[6],对系统的各个功能模块进行了严格的细分,将数据访问和数据表现进行了分离,尽量降低各个功能模块间的耦合性[7]。通过这种模式,开发出一个伸缩性强、扩展性能高以及维护简单的弹性系统。

2.1 服务端设计

目前,业界开源的云计算平台和工具有很多,如Enomaly的ECP、加州大学的开源项目Euclyptus、10Gen的Mongo DB、基于网格中间件Globus的Nimbus以及Ha⁃doop等。

该系统采用在业界知名度很高的开源云计算框架Hadoop来搭建私有云计算平台。Hadoop是对谷歌云计算框架的开源实现,主要包括分布式文件系统HDFS、计算架构MapReduce及对于结构化数据处理的HBase等[8]。其云计算整体框架如图2所示[9]。

对于任何一个系统而言,服务端的逻辑组织结构是最为重要的基础结构,是系统性能最大化的关键。因此,服务端采用了并行的云存储技术,实现了服务器的负载均衡,提高了传输速率。同时,采用冗余存储的方法来保证服务端数据的可靠性,即为同一份数据存储多个副本。另外,以Java Web的思想来开发服务端,以Tomcat为中间件平台,采用Servlet作为前端的控制器,并有Servlet来对客户端的不同请求进行向下派遣,将服务器的控制层和业务层进行逻辑分离,符合MVC设计模式的要求[10],在系统维护和功能扩展上增加了极大的便利。

2.2 客户端设计

在客户端,该系统采用基于Android的移动终端作为承载工具。Android是Google公司于2007年公布的基于Linux平台的开源手机操作系统,其系统结构如图3所示[11]。

考虑到移动终端设备资源受限的约束,客户端的数据结构应尽量简单,页面交互设计应更加人性化,保证用户操作简单方便。为了保证移动终端不会有极大的时间延迟和等待,采用了多线程技术,增加了移动终端和云端通信的有效性,同时方便和简化了客户端的代码结构。客户端采用MVC的设计模式,将移动终端的数据访问和数据表现进行了分离,降低了各个功能模块间的耦合度,增强代码的可读性和可维护性。因此,客户端的页面结构如图4所示。

2.3 通信协议

为了减少云服务端的承载压力,使用HTTP协议作为传输协议。在通信协议方面,使用XML语法来制定私有协议格式,易于实现和维护,且便于理解。在服务端采用开源项目DOM4J进行解析,DOM4J是一个非常优秀的Java XML API,具有性能优异、功能强大和使用容易的特点。在移动终端方面,考虑到终端资源受限的约束,使用自定义解析类来对XML私有协议进行解析。下面以文件下载消息为例,消息格式如下所示:

客户端Request:/download

HTTP头部:

Content-Length:226

Content-Type:multipart/from-data;

HTTP正文

文件表单头部:

//下载文件名

//文件地址

//下载时间

文件表单体(大小不限制):

云服务器端response:

download

//解析结果

//原因

3 系统实现

3.1 服务端实现

按照服务端的设计思想,系统采用分布式云存储技术,充分地利用了后台服务机群的各个节点。下面以文件并行上传和下载为例,给出系统服务端具体的实现过程。

并行上传过程如下:1)登录请求:将用户信息发送到服务端,判断用户的权限。若用户合法,则进行下一步;反之,则进行注册。2)终端资源上传请求:选择要上传的移动终端上的资源,将要上传的资源信息发送给主节点。3)存储节点分配:主节点收到上传资源信息后,根据资源大小进行分块计算(本实例中笔者按照5 Mbit/块的大小进行计算,最后不足5 Mbit的也作为一块);根据监控节点所提供存储节点信息判断节点状态,将资源块均衡分配到各可用节点;同时,将资源信息和资源块信息记录在分布式数据库中(状态均设为“F”表示尚未上传)。4)响应请求:主节点将存储节点信息以XML格式发送给客户端。5)并行上传:主节点为集群中每个存储节点建立一个资源块消息队列,将资源块并行上传到相对应的存储节点。6)上传确认信息:集群的存储节点每接收到一个资源块后,向主节点发送一条确认信息,主节点将数据库中该资源块的状态改为“T”(表示已经上传成功)。当资源所有块都上传成功后,主节点将数据库中该资源的状态改为“T”。7)单个存储节点失效:当主节点通过集群实时监控信息,发现某个节点失效时,将资源重新进行分配。

下载云存储系统的资源过程如下:1)发送下载请求:从系统资源列表中选择要下载的资源,向主节点发送下载请求。2)查询资源信息:主节点接收到终端下载请求后,从分布式数据库中查找该资源的相关信息。3)响应请求:主节点将资源的信息以XML格式发送给客户端。4)并行下载资源:客户端根据接收到的资源块信息,为每个存储节点创建一个线程,将资源块并行下载到临时资源池中。5)资源整合:终端下载完所有资源块后,将其整合为一个完整的资源,并删除临时资源池中的内容。6)单个节点失效:当主节点通过监控节点的实时反馈信息,发现集群中某个存储节点失效时,立即将正在下载的资源重新进行分配。其服务流程图如图5所示。

3.2 客户端实现

按照客户端的设计思想,客户端采用MVC的设计模式,为了减少移动终端不必要的多余开销,界面设计进行了较大程度的简化。Controller包封装了负责逻辑处理的类,包括与云端的连接、文件的逻辑功能、协议的构造和解析以及数据结构的简单处理等。Model包封装了移动终端的数据。View包负责移动终端的界面呈现。下面以客户端主页面中文件列表类FileList为例,部分核心代码如下所示:

Public class FileList{

//文件解析类初始化

F_Parser fp=new F_Parser();

//获取文件数据包

ArrayListal=fp.getFileList(pack);

//文件数据装载到文件列表中

Iteratoritems=al.iterator();

//逐条读取文件记录

while(items.hasNext()){

FileItem file=items.next();

FileItem newfile=new FileItem();

//设置文件的相关信息,包括ID、文件名、文件详细信息

newfile.setFile_id(file.getFile_id());

newfile.setFile_name(file.getFile_name());

newfile.setUser_id(file.getUser_id());}

//记录文件日志

Log.i("FileRec",newfile);

//将文件列表中的信息发送到处理主页面显示的Handler类中进行显示

ListStore.getMainViewHandler().sendMessage(file);

}

系统部分执行效果图如图6所示。

4 结束语

笔者通过研究云存储的关键技术,结合MVC设计模式和“云+端”的开发思想,实现了一个面向移动终端的私有云存储系统,解决了终端存储能力不足的问题。面向移动终端的云存储系统与传统的存储系统有较大的不同,表现在如下3点:1)在业务需求上,移动云存储系统是面向多终端异构平台的移动在线存储服务,而传统存储系统则面向WEB终端的高性能计算、事物处理等应用;2)在性能需求上,移动云存储服务针对移动数据的安全、可靠、效率等指标,且移动用户数量大、移动网络动态不确定性等特点,对移动网络文件的传输大小做出了优化。3)在数据管理上,移动云存储系统不仅要支持多终端异构平台的并行访问,还要支持海量数据的管理,保证数据的安全与可靠等。通过云存储技术解决了移动终端存储能力不足以及共享困难等问题,提高了用户体验度,具有一定的现实意义。通过实验证明,系统具有良好的稳定性。

随着移动互联网的快速发展,终端应用将更加智能,移动云存储技术也会得到广泛的关注,将会有更多的用户使用移动终端享受云存储服务,未来移动云存储的发展要从安全性和便携性等角度进行深入研究。

[1] 腾讯科技.移动互联网终端发展趋势[EB-OL].(2009-10-16)[2010-10-15].http://news.qq.com/a/20091016/000843.htm.

[2] 杨扬.移动互联网混搭云计算:破坏性创新时代[EB/OL].(2010-04-10)[2010-11-03].http://cloud.it168.com/a2010/0410/871/000000871791.shtml.

[3] ABI Research.Mobile cloud applications[EB/OL].(2010-03-09)[2011-02-20].http://www.abiresearch.com/research/1003385-Mobile+Cloud+Applications.

[4] 王鹏.走进云计算[M].北京:人民邮电出版社,2009:36-37.

[5] 王鹏,董静宜.一种云计算架构的实现方法研究[J].计算机工程与科学,2009,31(1):11-13.

[6] 刘亮,霍剑青,郭玉刚,等.基于MVC的通用型模式的设计与实现[J].中国科学技术大学学报,2010,40(6):635-639.

[7] 夏奕,邓广宏.基于构件重组的分布式业务集成系统设计与实现[J].计算机与数字工程,2009,37(7):157-160.

[8] Tom White.Hadoop权威指南(中文版)[M].北京:清华大学出版社,2010:44-80.

[9] 刘鹏.云计算[M].北京:电子工业出版社,2010:2-8.

[10] 张轼坤,冉崇善.基于反模式的J2EE的中间件优化模型[J].计算机工程,2010,36(10):256-258.

[11] 杨文志.Google Android程序设计指南[M].北京:电子工业出版社,2009:3-7.

猜你喜欢
服务端存储系统客户端
分布式存储系统在企业档案管理中的应用
如何看待传统媒体新闻客户端的“断舍离”?
天河超算存储系统在美创佳绩
县级台在突发事件报道中如何应用手机客户端
孵化垂直频道:新闻客户端新策略
新时期《移动Web服务端开发》课程教学改革的研究
在Windows Server 2008上创建应用
华为震撼发布新一代OceanStor 18000 V3系列高端存储系统
一种基于STM32的具有断电保护机制的采集存储系统设计
摸清黑客套路防范木马侵入