0 引 言
自从2007年10月份云计算诞生至今,这一技术在短短的几年时间里对整个IT行业产生了巨大的影响。学术界、产业界和政府以及军队都对云计算产生了浓厚的兴趣;全球范围内讨论云计算技术的学术活动如火如荼;谷歌、亚马逊、IBM、微软等IT巨头大力推动云计算技术的宣传和产品的普及;各国政府和组织纷纷斥巨资打造大规模的数据中心与计算中心。云计算技术目前已经得到了业界的高度认同,逐渐走向成熟[1]。随着云计算的推广和流行,如何快速安全地保存和传输生于云端的大量数据,成了各大企业和组织研究的重点。云计算独有的无限扩展、随时获取的资源管理方式若运用于部队作战领域,必然会对部队作战平台建设带来深刻的影响与变革[2?3]。
本文建立了一种基于云计算的作战数据存储系统模型,并发挥云计算可用性、高性能、可扩展的特点,设计并实现一套基于云计算的高效、安全及面向部队作战实际的数据存储解决方案。配合部队三级网的调用,为部队在反恐、处突等作战任务中产生的侦察图像、作战会议视频、军事地图等海量数据提供高效的存储和传输,降低作战成本,提高军事效能。
1 云计算的定义及特征
云计算被认为是“继个人电脑、互联网之后电子信息领域又一重大变革”,云计算作为网络技术中的一个流行用语,已经被很多人所熟悉。云计算其本质是一种计算方式,通过这种方式,共享的软硬件资源和信息通过网络以按需、易扩展的方式获得所需的服务。云计算可以说是网格计算、分布式计算、并行计算、效用计算、网络存储、虚拟化、负载均衡等传统计算机技术和网络技术发展融合的产物[4]。云计算通过网络将庞大的计算处理程序自动分拆成无数个较小的子程序,再交由多部服务器所组成的系统经搜寻、计算、分析之后将处理结果返回给用户。通过这项技术,网络服务提供者可以在数秒之内,处理数以千万计甚至亿计的信息,达到和“超级计算机”同样强大性能的网络服务。云计算的程序和数据不再运行和存放在个人台式计算机上,可以托管到“云”中,利用个人电脑或便携设备,经由网络连接到“云”中,能够让你在任何地方访问你所有的应用程序和信息服务,不再受到桌面的限制。
云计算的特征如下:
(1)在技术体制方面,云计算不是全新的技术,而是现有技术的综合利用。“云”可以认为是以虚拟化、面向服务的计算和网格计算等成熟技术为基础,以大规模资源共享为目标,采用共享资源池的模式进行构建的大型服务器集群。
(2)在经济性方面,云计算强调系统构建的低成本。基于云计算技术,通常采用数量较多的高性能PC机或小型服务器等较为便宜的硬件构建分布式服务器集群,提供可用性、可伸缩性都很强的计算服务。
(3)在应用程序特征方面,云计算强调基于网络的应用。云计算的典型应用模式是客户端根据自身需要,通过浏览器等标准程序访问发布在网络上、以服务形式提供的计算能力、软件、存储服务、中间件平台等[5]。
2 HDFS架构
部队作战时所依托的三级网每时每刻都在产生音频、视频、文本、图像等数据。经过长时间积累,这些数据总量非常庞大,存储这些数据需要投入巨大的软硬件资源。如果能够利用已有空闲磁盘组成集群来存储这些数据,则可以不再需要大规模采集服务器存储数据或购买容量庞大的磁盘,减少了硬件成本[6]。解决这一问题的方案就是使用分布式存储。
Hadoop Distributed File System,简称HDFS,是一个分布式文件系统。HDFS有着高容错性的特点,并且设计用来部署在低廉的硬件上。而且它提供高吞吐量来访问应用程序的数据,适合那些有着超大数据集的应用程序。HDFS放宽了POSIX的要求,这样可以实现以流的形式访问文件系统中的数据。
HDFS在整个Hadoop体系结构中处于最基础的地位。从内部实现来看,其目录结构和文件内容都没有存储在本地磁盘中,而是通过网络传输到远端系统上。总体来说,HDFS分为3个部分,即客户端、主控节点(Namenode)和数据节点(Datanode)。Namenode是分布式文件系统的管理者,主要负责文件系统的命名空间、集群的配置信息和数据块的复制信息等,并将文件系统的元数据存储在内存中;Datanode是文件实际存储的位置,它将数据块(Block)信息存储在本地文件系统中,并且通过周期性的心跳报文将所有数据块信息发送给Namenode[7?8]。HDFS体系结构如图1所示。
HDFS系统具有如下特点:
(1)非常适合海量数据的存储和处理。
(2)可扩展性高,只需简单添加服务器数量,即可实现存储容量和计算能力的线性增长。
(3)数据冗余度高,默认情况下每份数据在3台服务器上保留备份。
(4)适合“流式”访问,即一次写入,多次读取,数据写入后极少修改。
可以看出,HDFS分布式文件系统非常适合作为作战数据存储系统的底层存储平台。
3 系统实现
3.1 系统功能模块
综合分析部队作战实际,将作战数据存储系统分为3个功能模块,如图2所示,即作战部队、首长机关和指挥中心。作战部队能够使用系统提供的作战数据检索功能,并进行数据的浏览,但不能对系统中现有的数据进行编辑[9?10]。首长机关除具有检索功能外,还能够添加、删除、替换作战数据。指挥中心主要负责管理和维护服务器,实时更新作战数据,及时发现并解决系统运行时出现的错误。
3.2 存储模块核心
存储系统分为HDFS操作通用类HdfsFileUtil、HDFS文件存取类HdfsIO、HDFS状态及辅助管理类HdfsManage共3个类。
HdfsFileUtil类主要负责通过HDFS的Java接口中的相关静态方法得到文件系统的FileSystem实例,是实现存储、管理操作的基础。在HDFS的Java访问接口中,有两个静态方法可以得到FileSystem接口的实例,分别为:public static FileSystem get(Configuration conf)throws IOException;public static FileSystem get(URI uri,Configuration conf)throws IOException。
Configuration类位于org.apache.hadoop.conf包中,是Hadoop文件系统的配置类,用来根据配置文件中指定的配置项来创建一个配置实例,Configuration封装了client或者server的配置,这些配置从classpath中读取,比如
被classpath指向的conf/core?site.xml文件。通过以上两个静态工厂方法,从抽象的Hadoop文件系统中抽取出一个具体的FileSystem实例。其中第一个方法返回默认的文件系统(在conf/core?site.xml文件中定义),若是文件中没有指定,则返回本地的文件系统;第二个方法返回由uri指定的文件系统,如果uri无效,则返回默认的文件系统。
HdfsFileUtil类的构造实现方法为:
Public HdfsFileUtil(){
Conf=new Configuration();
FileSystem hdfs=FileSystem.get(config);
}
这样就得到一个FileSystem接口的实例,所有的存取操作都通过这个实例来完成。
HdfsIO类主要实现文件的读写与存取等功能,包括将本地文件复制到HDFS系统的copyToHdfs()方法;在HDFS系统中创建文件的createFile方法;在文件系统中读取文件的readFromHdfs()方法及删除文件的deleteFromHdfs()等方法。例如deleteFromHdfs(String dst)方法:
Public Boolean deleteFromHdfs(String dst)throws
FileNotfoundException,IOException{
Boolean isdelete=this.fs.deleteOnExit(new Path(dst));
This.fs.close();
Return isdelete;
}
deleteFromHdfs(String dst)方法将指定路径上的文件从HDFS中删除。方法调用FileSystem实例中的deleteOnExit()方法,这个方法首先会将某个路径Path添加到deleteOnExit(这是FileSystem类中定义的一个变量)中,然后在FileSystem实例被销毁或JVM退出时删除该Path。
也可以调用public Boolean delete(Path p,Boolean recursive)方法来从HDFS上删除文件,如果p是一个文件或是空目录时,则recursive值将会被忽略;当p对应目录不空时,如果recursive为true,则采用目录及其内部内容均被删除的递归删除方式,否则抛出IOException异常。
需要注意的是,用户在删除某个文件时,这个文件并没有立刻从HDFS中删除。相反,HDFS将这个文件重命名,并转移到/trash目录。当文件还在/trash目录时,该文件可以被迅速地恢复。文件在/trash中保存的时间是可配置的,当超过这个时间,Namenode就会将该文件从namespace中删除。文件的删除,也将释放关联该文件的数据块。注意,在文件被用户删除和HDFS空闲空间的增加之间会有一个等待时间延迟。
HdfsManage类主要实现文件存取的一些辅助功能,包括获取文件位置、文件状态、文件目录、各Datanode主机名及存储系统日志记录等一系列操作。例如getFileLocation(String filename)方法:
Public BlockLocation[ ] getFileLocation(String filename)throws IOException{
Path path=new Path(filename);
FileStatus fStatus=this.fs.getFileStatus(path);
BlockLocation[ ] bl=this.fs.getFileBlockLocations(fStatus,0,
fStatus.getlen());
return bl;
}
getFileLocation()方法返回指定文件在HDFS中物理存储位置等信息,其中包含主机名列表、偏移位置、文件大小等。方法中涉及的FileStatus类封装了文件和目录的信息,包括它们的长度、块大小、副本因子、修改时间、操作权限等信息,FileSystem类的getFileStatus()方法提供了获取某一文件或者目录的FileStatus信息的方法。FileSystem类中getFileBlockLocation()方法原型为public BlockLocation[ ] getFileBlockLocations(FileStatus file,long start,long len)throws IOEXception{}。
3.3 系统测试
在HDFS中建立三个条目位置,对作战数据存储系统进行测试,图像和视频存储在对应条目下,如图3所示。
4 结 语
云计算作为一种新型的计算模式,从诞生之日起便引起社会广泛关注。它已经跨越了学术和科技界,融入到了许多社会行业。云计算采用分布式存储的方式来存储数据,其高可用、高可靠和经济性的特点同样适用于军事领域。本文设计的基于云计算的作战数据存储系统,符合部队建设实际,可为高技术条件下的部队战斗力生成提供有力保证。
参考文献
. Communications of the ACM, 2008, 51(1): 107?113.
[2] 卜少培.仿真资源云存储技术的研究与实现[D].北京:北京理工大学,2011.
[3] 张喜.海量数据存储模式的研究[D].广州:广东工业大学,2012.
[4] 鲍亮,陈荣.深入浅出云计算[M].北京:清华大学出版社,2012.
[5] 黎连业,王安,李龙.云计算与实用技术[M].北京:清华大学出版社,2013.
[6] 洑涵妤.基于云计算的安全数据存储系统的设计与实现[J].煤炭技术,2012,29(12):169?171.
[7] 吴绍忠,李靖.基于云计算架构的公安情报信息平台建设研究[J].中国人民公安大学学报,2012(3):30?41.
[8] 张路.基于云计算平台的海量图片存储系统设计与实现[D].北京:北京邮电大学,2012.
[9] 刘飞.基于云计算的分布式存储系统的研究和应用[D].西安:西安工业大学,2012.
[10] 苏孝青,盛志华.云计算环境下的数据安全存储技术[J].信息安全与技术,2012(8):23?24.