杨 静 殷建琳
(1.江苏省档案局,江苏南京,210008;2.南京新模式软件集成有限公司,江苏南京,210009)
随着我国电子政务和信息化建设的不断推进及其在各个领域的广泛应用,产生了类型繁多、数量巨大、内容丰富的电子文件。从中央到地方,从各级国家行政机关到各类企事业单位,甚至每一个个人,无不都在广泛地使用电子文件。电子档案的长期保存也不可逆转地进入了大数据时代。
由于传统存储设备容量带宽有限、设备节点不易扩展、不易使用、数据管理困难,不足以应付日益增长的大数据,而在云计算发展背景下应运而生的云存储技术在一定的程度上解决了这个难题。云存储技术是人类进入大数据时代一种新型的存储模式,可以通过网络提供可配置的虚拟化存储及相关数据访问的服务,为海量数据的存储和管理提供解决方案。
狭义上来说,云存储是一个以数据管理和存储为核心的云计算平台,依靠软件将分布在不同位置不同种类的存储介质有效结合组成一个更大的存储介质,对外界提供透明一致的存储和业务访问接口。
云存储的内涵主要是存储虚拟化和存储自动化,在虚拟存储技术之上对存储服务和设备进行虚拟化,即把对物理存储数据的访问抽象成对逻辑数据的访问。存储虚拟化除了要实现异构存储介质的互联和统一管理,实现数据的共享、冲突解决、一致性及数据迁移,实现数据的透明存储和容错容灾策略,对系统有性能优化和负载均衡处理能力之外,还要提供存储安全和数据访问的安全保证,此外虚拟存储系统本身还要具有高可靠性和高可扩展性等特点。
云存储结构模型是一种层次结构,它由4 层组成,见图1。传统存储设备仅仅是简单的硬件范畴,而云存储的组成更多的是存储设备、网络设备、应用软件、服务器、访问接口等多个部分的有机聚合,超越了传统硬件的单一性。云存储模型是一种典型的层次结构,低一层向高一层提供服务,高一层次不必关心底层次的业务逻辑只需要调用接口即可,这样提高层内内聚度和降低了层次之间耦合性,易于维护。
(1)云存储架构中最基础的部分是存储层。存储层的设备可以是网络接入服务器NAS、光纤通道FC、网络小型计算机系统接口iSCSI 等。这一层的存储设备种类繁多,由统一的设备管理系统进行集中管理、虚拟化操作、状态监控和升级维护等。考虑到数据冗余备份和能量消耗,通常是把存储集群分布在不同的地域,各个地域间的集群通过网络互联或光纤通道连接形成一个更大的逻辑设备。
(2)云存储架构核心部分是基础管理层,基础管理层通过集群应用、网格计算、分布式文件系统等技术实现多个存储设备之间的协同工作,使多个设备可以向外提供相同的服务。该层的P2P对等存储技术可以保证数据的高扩展性和高容错性。为了保证云存储介质中的数据不会被未授权的用户访问,该层采取内容分发系统和数据加密技术,同时为了达到数据冗余和云存储自身安全稳定的目的在该层采用数据容灾备份技术。
(3)应用接口层是云存储框架中最灵活多变的一层,因为该层的组成由实际的运营单位决定,业务的不同会有不同的应用接口提供不同的服务,例如网络硬盘的接口、视频监控的应用平台等。
(4)访问层是用户可以直接接触到层次,任何有权限的用户都可以通过该层的接口进入云存储系统,享受云存储高效便捷的服务。
图1 云存储结构模型
目前,最为流行的开源云计算平台是Apache 基金组织开发的Hadoop 生态系统。Hadoop 系统在实现上借鉴了谷歌云计算的理论架构,具有良好的可靠性、扩展性和容错性。基于Hadoop 的核心技术HDFS、MapReduce和HBase可以为用户提供一个系统底层透明的云存储系统,这个系统可以针对PB级数据存储和管理。
HDFS 是Hadoop 中 众 多 技 术的基础,很多更高级的应用都是建立在这个分布式文件系统上的。HDFS 存储对象针对大规模的应用数据,数据吞吐量高且具有容错性。Hadoop 中有一个综合性的文件抽象系统,它提供了文件系统实现的各类接口,HDFS只是这个抽象文件系统的一个实例。
HDFS 结构采用云存储架构松弛耦合非对称架构,是一个主从结构体系,它有两类节点,一类是Namenode,另一类是Datanode。这两类节点分别承担管理者和执行者的任务。Namenode 是管理集群中的任务执行调度,Datanode 是具体任务的执行节点。NameNode是整个HDFS 的管理节点,相当于集群的大脑,负责收集和管理存储节点上文件的元数据,维护整个集群上文件系统的命名空间。NameNode执行文件系统命名空间的打开、关闭、重命名等操作。客户端若想操作文件首先要通过NameNode通信获得文件的元数据信息,如得到文件的存储节点,然后去和存储节点交互操作完成数据的访问。从Namenode 中可以获得每个文件的每个块所在的Datanode。需要注意的是,这些信息是临时的,Namenode 会在每次文件系统重启的时候动态地重建这些信息。
Datanode是文件系统的工作和存储节点。HDFS文件系统存在一个文件块Block的概念,若存储在上面的一个文件大于这个块的大小,文件会被切分成很多块并尽可能分散存储在不同的数据节点Datanode上。Datanode主要职责是响应客户的读写数据请求,以及在Namenode的统一管理指挥下对数据块进行复制、删除、创建等操作,并且通过心跳机制定时向Namenode 报道节点上的数据块的情况,默认条件下DataNode上的数据复制成三份。
为了提高NameNode节点的内存效率,需要把对文件系统元数据的操作分开,NameNode 中采用了编辑日志文件(Editlog)和映像文件(FsImage)策略。编辑日志和映像文件都存储在Namenode 的本地文件系统,前者负责记录HDFS 文件元数据的变化,后者存储整个文件系统的命名空间,即所有文件或数据块的元数据信息。两者的作用关系是,HDFS在启动的时候会把磁盘中的映像文件和编辑日志文件加载到内存中,按照日志文件上记录的元数据变化更改映像文件,然后新的映像文件刷新到本地磁盘,旧的编辑日志文件被置空等待新的操作写入。同时为了减轻NameNode的负担,HDFS为Namenode还提供了一个辅助名字节点(Secondary Namenode),Namenode启动的时候合并映像文件和编辑日志,而剩下的时间里辅助名字节点会周期地从名字节点上复制映像文件和编辑日志到辅助节点上合成一个新的映像文件,合并生成新的映像文件后重新传到名字节点替换掉原来的映像节点。
出于安全性的考虑,HDFS 集群上的节点一般部署在不同的机架上,机架之间节点的交互通信都要经过交换机。默认情况下当集群副本因子为3 时,一个副本放在与原始数据相同的机架的另一个节点上,机架内节点间的带宽要比机架间节点的带宽大,这样可以保证较快访问数据。另外一个副本则放置在与原始数据不同的机架上,机架的错误率要比节点错误率低,可以防止整个机架失效时数据丢失。
借鉴了Google的Mapreduce编程思想,Hadoop 也有一套MapReduce 编程模型,在这个模型上做并行开发很容易实现数据处理。MapReduce把数据的处理分为两个阶段:映射Map 和化简Reduce。也就是说先对数据分解操作,针对分解的片段分别处理,在Reduce阶段把结果汇总得到最后结果。并不是所有的数据都适合MapReduce 处理,用MapReduce 编程要体现一个分而治之的思想:首先把待处理的数据集分解成许多小的数据集,每一个小的数据集可以分别并行进行处理。
在Map 映射阶段,MapReduce框架将用户输入数据分割成为M个片段,对应M个Map任务。对数据分解操作,针对分解的片段分别处理,在Reduce阶段把结果汇总得到最后结果。
Hadoop是基于LCA架构的,不仅HDFS存在两类节点,MapReduce也存在管理任务JobTracker和执行任务TaskTracker。JobTracker 是管理者,负责调度和监控TaskTracker的执行,JobTracker分派任务把Map和Redece 函数交给空闲的TaskTracker去执行。TaskTracker负责执行JobTracker 分配的任务,若TaskTracker 运行出现问题,JobTracker 将调度另外的一个空闲的TaskTracker重新开始执行。
HBase是基于列的分布式数据库,与传统的关系数据库相比,它的特点如下:
(1)数据类型:关系型数据库有丰富的类型选择(比如日期、整型、字符串等)和存储方式。HBase 没有那么多类型只有字符串类型,所有的类型都是由用户自己处理的。
(2)数据操作:传统数据库有各种各样的函数、连接操作。针对HBase 的操作相对比较简单,只有插入、删除、查询、清空等。表之间的关系也很简单,表与表相互分离,所以没有表与表之间的连接操作。
(3)存储模式:关系表中的数据通常是基于表结构和行来存储的,而HBase则是基于列存储的。
(4)数据维护:传统数据库更新操作时是替换操作,新值替换掉旧值。HBase 中,确切的说是不应该叫做更新,因为更新后旧的版本依旧会保留。
(5)可伸缩性:传统的数据库可伸缩性差,需要增加中间层次才可实现伸缩性。而HBase设计之初就考虑到了伸缩性,可以很轻易动态增加和删除节点,这样对错误有较高的兼容性。
电子档案的长期保存需要一个存储平台。这个平台需要满足以下的要求:
(1)容量大。电子政务、商务等办公过程中产生了大量的电子文件,这些文件归档数据的存储要求一个大的存储容纳空间。
(2)性能高。存储平台要有高的并发性来响应用户的请求。
(3)可靠性高。为防止数据丢失,采取冗余备份机制尽可能地将数据分散存储保证数据可靠性。
(4)扩展性好。随着时间的推移,产生的电子档案数量将不断增加,这要求这个存储平台可以动态扩展存储空间来满足不断增长的电子档案。
(5)数据简单处理。系统需要对存储平台上的数据进行简单地处理,这些处理提取出存储文件中的关键信息,并对这些信息进行存储,方便以后查询检索等操作。
云存储是一种通过网络提供可配置的虚拟化存储的服务。云存储的实现可用Hadoop 技术搭建一个云存储平台,这在一定程度上解决了电子档案数据的真实性、完整性、安全性、存储成本等问题。
系统基于MVC三层架构体系,层次清楚、易于开发、方便维护和部署、有利于软件工程化管理,结构设计如图2所示。
显示层是用户可以看到的与系统进行交互的界面。用户可以通过页面来进行对文件系统的增加、删除、查找等基本操作,系统管理员可以在显示层对集群运行状况进行监控和维护,还能对用户进行管理。
业务逻辑层表示整个系统业务逻辑和规则,在该层并行处理对HDFS和HBase数据的访问,处理如页面转发等基本逻辑,对整个平台存储系统进行配置,可以理解为Tomcat服务器。
数据存储层是整个存储系统的基础,主要是利用HDFS 和HBase对电子文档建立倒排索引,并对元数据进行存储。
3.3.1 文件上传流程
云存储平台有很多逻辑处理流程,现在最复杂的是电子文件上传时的过程。首先,外部数据由交互界面浏览器端的fileUpload 组件传到后台中心处理模块,中心处理模块初步处理电子文件提取出电子文件的元数据信息比如文件名、文件大小、文件类型等存储到HBase 数据库里面。如果文件大小超过一定的阈值可直接存放到HDFS 里面,如果文件小于阈值先把文件放到服务器的小文件队列里面,当文件队列满或者是定时器间隔到则对小文件队列里面的文件作Sequence压缩处理,处理后合并成大文件存放到HDFS 中。当文件放到HDFS 之后对上面的文件作MapReduce 处理,建立倒排索引,然后把索引放到数据HBase中去。
图2 云存储系统MVC架构图
3.3.2 文件下载流程
用户进行文件下载操作时,判断文件是否为空、为多个文件或为文件夹,如果是上述情况,输出用户错误提示信息。用户选定文件成功,系统将对用户提交的数据进行处理,并判断选定文件是否存在于HDFS 中,如果不存在,返回页面。如果文件存在,则读取文件内容,修改HTTP 协议的Head 信息,发送读取数据到浏览器输出,返回页面。
3.3.3 文件夹目录创建流程
用户创建目录时,系统将判断该用户是否有创建目录的权限,如果不允许在该目录下创建文件夹将提示用户相关信息,返回页面。如果用户拥有权限判断成功,系统将异步提交用户数据到服务端,服务器对用户数据字符处理判断该文件夹是否已存在。系统在用户指定目录创建文件夹,完成后,检测其文件夹是否创建成功。如果目录创建成功,则记录日志到数据库,提示用户创建成功返回页面。
3.3.4 文件重命名
用户重命名文件(文件夹)时,系统将会判断用户的权限,如果权限不允许用户进行重命名操作,将提示用户相关信息并返回提示页面。当用户权限认证成功后,系统将弹出对话框,上面是旧文件名称下面是要求和输入新的文件名,用户可以将名称修改,鼠标点击保存。用户向服务器提交相关数据,服务器对提交的数据进行过滤验证处理,用户输入数据验证成功,如果该新文件名已经存在,输出用户提示信息并返回页面。
*本文系江苏省档案局科研项目“基于云存储的电子档案长期保存技术研究”(项目编号2014-1)的研究成果之一。
[1]薛四新.云计算环境下电子文件管理的实现机理[M].上海:世界图书出版公司,2013.
[2]刘鹏.实战Hadoop--开启通向云计算的捷径[M].北京:电子工业出版社,2011.
[3]GB/T18894-201X,电子文件归档与电子档案管理规范[S].