原建伟(陕西工业职业技术学院 信息工程学院,陕西 咸阳712000)
中小企业云盘系统的设计与实现
原建伟
(陕西工业职业技术学院 信息工程学院,陕西 咸阳712000)
在研究了Openstack平台与对象存储项目Swift的工作原理后,为解决中小企业存储资源使用紧张的问题,在对JOSS API进行重新封装后设计了基于Keystone组件的统一认证机制的适合中小企业使用的网盘,同时设计和实现了PC和移动平台客户端用以从不同设备访问网盘。测试结果表明系统服务性能稳定。
对象存储;云盘;Swift API;跨平台访问
企业对存储的需求会随着业务的发展不断增加,在企业中各类业务数据不断增加大量占用这些存储,所有这些业务数据并不是企业业务中必须实时需求的,且多数为非结构化数据不适合采用数据库等技术进行存储,同时需要进行一定共享需求。面对这样的需求,越来越多的企业选择网络硬盘系统进行数据存储与共享,网盘不仅可以满足用户之间对数据共享的需求,还能为用户提供高可靠性及可用性的数据服务[1-2]。目前市场上有很多基于公有云的网盘系统提供用户使用如:Dropbox,金山网盘,百度云盘等产品,这些产品为互联网用户提供了在易用性、可靠性和可用性方面能够提供较强保障的云存储服务,但是企业应用不能接受其安全隐患,因此针对企业应用特点开发一个基于企业私有云的网盘系统对于解决企业数据共享,尤其是非结构化数据的共享非常重要。
1.1 OpenStack云计算框架
OpenStack是著名的开源云计算框架,采用模块化设计,整个框架由7个主要项目,通常也称作组件:Keystone认证服务、Nova计算服务、Swift对象存储服务、Glance镜像服务、Neutron网络服务、Cinder快存储服务、Horizen图形界面服务,除此之外,最近两年OpenStack体系还发展出一些新的项目如:Heat组件用于实现模板服务、Ceilometer组件用于实现监控服务等[3-5]。这些组件共同组成一个庞大的云计算体系如图1所示。OpenStack模块化设计不仅可以根据需求灵活搭建云计算平台,同时还具有集成第三方技术的能力。
OpenStack框架中主要项目可以组合在一起构成完整的Iaas平台为企业构建底层云计算平台服务,也可以将其中的Nova(计算服务)、Swift(存储服务)等服务分离出来根据企业需求实现单独的计算服务或存储服务。近年来随着Openstack不断发展与成熟,越来越多企业采用Openstack构建企业私有云实现IT资源的弹性应用。
图1 OpenStack核心组件结构关系图
1.2 对象存储技术
OpenStack提供3种存储技术,Glance用于存储和管理虚拟机镜像,Swift是一种基于对象存储的技术,Cinder提供整合后端不同种类存储类型的块存储技术。Glance仅为nova提供镜像的存储,查询和检索服务,往往要借助Swift或其他存储用于存放镜像数据,存储数据量较小,不适合做网盘的存储技术。Cinder能够实现对后端存储的统一封装,从而实现块级服务,在OpenStack体系里,它主要负责为Nova提供虚拟机所使用存储资源,也不适合单独作为存储向外提供服务。
Swift是通过标准硬件构建冗余的、可扩展的、支持多租户的分布式对象存储系统,它是一种能够提供高并行性、高伸缩性和高安全性的对象存储技术[6-8]。很多企业对存储的需求已经发展到PB级别,且存在大规模非结构化数据。Swift以较为便宜的标准存储设施上,通过一致性散列技术和数据冗余实现分布在众多服务器上海量级别的对象访问时的寻址,同时将对象均匀分布在虚拟节点上从而减少在增删节点时数据的移动量,达到PB级存储。使用对象存储的可以通过使用对象作为存储基本单元,以对象的属性来维护存储管理从而简化管理非结构化数据过程,提高存储的灵活性。
Swift采用层次数据模型,共设三层逻辑结构:Account/Container/Object(即账户/容器/对象)[9-10],每层节点数均没有限制,可以任意扩展。这里的账户可理解为租户,用来做顶层的隔离机制,可以被多个个人账户所共同使用;容器代表封装一组对象,类似文件夹或目录;叶子节点代表对象,由元数据和内容两部分组成如图2所示。
图2 Swift层次数据模型
1.3 对象存储开发接口
Swift通过代理服务向外提供基于 HTTP的REST服务接口,对账户、容器和对象进行 CRUD等操作,并且提供多种语言环境的绑定实现。JOSS是Java OpenStack Storage的缩写,它是一组使用Java语言访问Swift的REST API,提供对Swift存储的各种操作[11]。JOSS通过内存模式能够将应用从目标服务器中分离出来,并提供一系列的类与接口实现操作和控制对象存储,常用的接口大致分为两类:一类用于管理授权与账户如:Access、Account和Client等,一类用于操作对象存储中的各种对象如:Container、 List Subject、Object Store Entity和Stored Object等。
2.1 系统架构设计
系统采用目前主流的富客户端B/S结构实现,基于云的存储和使用往往需要多种形式的终端实现,目前用户使用存储的主要终端为Web终端和移动终端,因此系统设计时考虑到目前的应用情景,设计了两种客户端分别针对Web应用和移动应用。服务器端采用Jfinal框架实现对云盘用户数据信息以及访问记录的管理,采用JOSS实现对Swift提供的存储进行操作,如图3所示。
图3 系统架构设计
两个客户端在设计时采用了同一体系的前端技术实现,即Web端采用HTML5与jQuery框架的组合实现具有良好交互性的UI,在移动端采用了jQuery Mobile与PhoneGap结合的混合框架实现适合移动端的UI。
服务器端由两部分组成,一部分是提供云存储的 OpenStack存 储 服 务集 群 ,对 外 以OpenStackRESTful API形式提供用户使用,另一部分为Web服务器,用以实现存储和管理使用云存储的用户注册信息以及使用信息,同时提供通过JOSS组件访问云存储的渠道。
2.2 系统功能设计
用户无论从Web端还是移动端登陆,在使用资源之前必须获得Keystone的认证,否则无法使用任何资源。通过在服务器端的MySQL数据库中用户信息的分类确定用户类型,分为管理员和普通用户,普通用户面对的资源都是抽象的对象存储中的文件和文件夹等数据(一个用户使用的所有对象存储可能分布在不同的容器中),管理员的一个重要职责是对容器和用户的管理,系统功能图如图4所示。MySQL数据库中存储用户的账户信息:账户名称、状态、有效期、申请空间、空间使用情况等信息,操作记录:操作请求的时间、内容、方法、操作结果、上传流量、下载流量、传输时长等信息。
图4 系统功能设计
3.1 云平台安装与部署
由于系统只用到对象存储因此对OpenStack体系进行精简只保留最基础的认证项目Keystone以及核心存储组件Swift。Swift在安装部署时需要安装Proxy service、Account service、Container service和Object service[12-13]。这些服务中Proxy service实现代理需要安装在一台服务器上,其他服务安装在存储服务器上,实际生产中往往为了构建紧凑的系统会将Swift代理服务与Keystone安装在同一台物理服务器作为控制结点,一方面可以减少硬件开支,另一方面也便于管理[14]。
控制结点服务器与存储服务器都采用CentOS6.4系统,控制结点在安装系统需要的NTP服务、MySQL等基础服务后,安装Keystone与Swift代理服务,存储结点安装Swift其他服务。在控制结点服务器端创建访问存储服务所需的 Endpoint、container等资源。
3.2 功能封装
JOSS提供接口实现对象存储操作的全部功能,结合企业业务应用对其进一步封装,一方面解决对象存储本身存在的一些问题,另一方面更好地实现企业需求。
1)授权管理类
JOSS提供的授权管理接口主要实现对授权的管理与令牌的管理,涉及Access、Account和Client3个接口。Keystone在提供认证服务时,通过Endpoint端点实现,Endpoint端点形式上位一个网络可访问的服务地址(一个URL地址),通过这个地址来获取相应的服务。Endpoint端点分为3种:提供给admin用户使用的为adminurl,提供给OpenStack内部服务之间通信使用的为internalurl,其他用户可以访问的为publicurl。
OpenStack在Grizzly版中引入了PKI Token方法验证令牌(Token)从而使Keystone逐渐成为一个数字签名认证中心[15]。令牌是Keystone在授权过程中非常重要的一个因素,各服务之间的访问以及外部对资源的访问的相关授权都由与令牌息息相关,在默认情况下授权令牌在生成24小时后失效,如果在一个长生命周期的Web应用中,账户实例的生命周期可能比令牌生命周期更长,如果没有很好的令牌管理机制就会导致在这种情况下,账户对使用云存储失效。
针对以上情况采用auAccount类封装Web客户端访问对象存储时与认证相关的主要方法如表1所示。getAccount方法,通过Username,Userpasswd,Tenant,URL等参数申请访问存储资源的授权,并返回一个句柄,通过该句柄为其他方法提供访问相关资源的途径;getURLsList用户获取可访问的Publicurl, 这是访问存储资源的授权地址;newContainer、getContainer、delContainer等方法用于创建、获取和删除指定名称的容器对象;reautToken方法用于检测指定会话的生存时间,如果超过令牌默认生存周期将自动申请获取令牌。
表1 auAccount类主要方法
2)容器管理类
容器依靠容器服务器处理对象的一个功能映射,用于存放和管理存储对象的集合。在通过auAccount类的newContainer和getContainer方法获得容器对象后,Container类封装容器管理的方法和管理存储对象集合的方法。主要方法如表2所示。Container最主要的方法是getObject方法,该方法用户获取容器中指定的存储对象,并返回该对象的操作句柄,通过该句柄进一步对该对象进行操作。
表2 Container类主要方法
3)存储对象管理类
JOSS API中存储对象接口StoredObject提供对存储其中的对象进行全面操作方法,因此通过getObject方法获取的存储对象操作句柄使用原生接口中提供的操作方法实现复制、删除、重命名等操作。
4.1 测试环境
PC客户端:硬件配置情况为主频2.26 GHz的双核Intel Corei5处理器,4G内存,320 G硬盘;软件环境为Windows 7操作系统。
移动客户端:安卓手机CPU:双核1.0 GHz,2 G内存,8 G存储
服务器1:Intel Xeon E5-2620六核处理器(主频2.0 Hz),8G内存,4TB硬盘,操作系统CentOS。
服务器2:Intel Xeon E5-2620六核处理器 (主频2.0 Hz),16 G内存,4TB硬盘,操作系统CentOS。
服务器1两台作为存储结点,服务器2一台作为控制结点以及提供Web服务。
4.2 系统性能测试
测试以模拟企业网盘应用场景中上传下载频率不会过高,上传下载文件尺寸在不会过大的情况下进行测试。在测试过程中模拟了从100到1 000个线程的并发访问,以及分别对从1 MB至1 GB不等的数据文件进行传输的状况进行测试。测试过程中采用多次重复取平均值的策略避免单次测试可能产生的系统或人为误差。
表3 不同线程条件下不同大小文件上传速度测试结果
测试结果表明在1 000以内的并发访问情况下文件传输速度变化不大,偏小的文件传输速度相对较慢,在64 M以上的文件传输速度较为稳定。企业应用过程中大多数文件大小一般集中在这个范围,过大或过小的文件数量相对较少,因此从测试结果来看系统适合企业应用特点。
文中介绍了一种基于Swift对象存储的企业云盘系统的体系结构及其实现的关键技术,此系统根据实际生产需求实现了针对中小企业的云存储应用的整体解决方案,能够为用户提供多平台访问云盘的客户端,以及可靠的弹性存储服务,并采用统一的认证服务保证系统访问的安全基础,为企业云计算应用解决方案提供很好的参考。通过测试,本系统能实现基于对象存储的云盘数据操作和数据管理功能,同时保证了整个云盘的良好性能。
[1]盖玉莲.基于云计算的数据管理技术研究[J].电子设计工程,2015(3):71-77.
[2]石彦博,傅颖勋,刘青昆,等.一种应用于网络硬盘存储系统的安全模块技术[J].小型微型计算机系统,2014(6):1253-1257.
[3]李磊,金连文,黎德生,等.基于OpenStack体系的多融合管道式服务云监控系统的研制[J].电信科学,2014(1):24-30.
[4]吴非.“云存储”助力构建海关报关单证电子档案库[J].上海海关学院学报,2013:109-115.
[5]苏培华.基于Openstack的高校数据中心应用研究[J].电子设计工程,2015(11):48-51.
[6]郑驰,赵建军,李成金,等.基于OpenStack的对象存储性能实验及研究[J].微型机与应用,2014(18): 13-16.
[7]蒋溢,孙雪涛,杨川.Swift云存储环境下基于I/O负载均衡的读取策略 [J].计算机工程与设计2013 (9):3024-3027,3032
[8]李淼淼,梅向东.基于中心节点的云存储系统应用分析[J].电子设计工程2015(5):34-38
[9]王海燚,张云超,岳晓瑞.基于OpenStack的对象存储服务管理平台设计与实现[J].广东通信技术,2013(4):35-37.
[10]曲进男,唐政,王帅群.基于OpenStack云架构的尺度不变特征变换算法[J].计算机应用,2014(34): 90-92,123.
[11]42 BV Group.ava library for OpenStack Storage,aka[EB/OL]Swifthttp://joss.javaswift.org/
[12]陈熔仙,张冬冬,张亚英.基于OpenStack的多媒体会议虚拟化方案[J].计算机应用,2014(34):82-85,89.
[13]肖扬,于艳华.基于IaaS云平台的应用性能管理研究与应用[J].软件,2013(12):241-245.
[14]李仁飞.基于OpenStack的企业成本降低系统设计[J].电子测试,2014(10):53-54,25.
[15]熊微,房秉毅,张云勇,等.OpenStack认证安全问题研究[J].邮电设计技术,2014(7):21-25.
Design and implementation on cloud disk system of minor enterprises
YUAN Jian-wei
(College of Information Engineering,Shaanxi Polytechnic Institute,Xianyang 712000,China)
Based onresearching of OpenStack platform and the theory of Swift that is object storageproject,the cloud disk system of minor enterprises with unified authentication of Keystone is designed for solution toabsence of storage in the minor enterprises,after encapsulated JOSS API,and the PC client and the mobile client developed can access the cloud disk from different platform.The result of testing indicate thestability of system service.
object storage;cloud disk;Swift API;cross-platform access
TN<915.09 文献标识码:A class="emphasis_bold">915.09 文献标识码:A 文章编号:1674-6236(2017)07-0070-05915.09 文献标识码:A
1674-6236(2017)07-0070-05
A 文章编号:1674-6236(2017)07-0070-05
2016-03-20稿件编号:201603254
陕西省教育厅2016年度研究计划专项(16JK1057);陕西工业职业技术学院专项科研计划项目(zk14-23)
原建伟(1973—),男,河南沁阳人,硕士,副教授。研究方向:计算机网络技术应用,企业信息化建设。