CSFS:云存储服务支撑的文件系统设计与实现
肖达1, 苏丽裕2, 王俊龙3, 郑世慧1, 杨榆1    
1. 北京邮电大学 计算机学院, 北京 100876;
2. 中国移动通信集团 广东有限公司, 广州 510100;
3. 国家信息中心 公共技术服务部, 北京 100045
摘要

云存储服务性能开发是云端数据技术的重要课题.提出了一种基于云存储服务的文件系统数据存储架构, 描述了一个基于该架构的云存储文件系统(CSFS)设计及实现.通过利用免费邮件服务降低了开发和部署成本, 通过数据与元数据分离管理、分布式存储、云端数据预取等技术提高了系统的高效性和可扩展性.测试结果表明:相关优化技术有效提高了系统的读写性能.

关键词: 云存储     文件系统     元数据管理     预取技术     增量加密    
中图分类号:TN911.22 文献标志码:A 文章编号:1007-5321(2015) 增-0077-05 DOI:10.13190/j.jbupt.2015.增.018
CSFS: Design and Implementation of Cloud Storage Service-Based File System
XIAO Da1, SU Li-yu2, WANG Jun-long3, ZHENG Shi-hui1, YANG Yu1    
1. School of Computer Science, Beijing University of Posts and Telecommunications, Beijing 100876, China;
2. Guangdong Co., LTD, China Mobile Communications Group, Guangzhou 510100, China;
3. Department of State Information Center, Public Technology Service, Beijing 100045, China
Abstract

The development of cloud storage service is one of the key elements to cloud data technology. New data storage architecture for cloud storage service based file systems was proposed. And the design and implementation of cloud storage-backed file system based on the architecture (CSFS) was described. The development and deployment costs are reduced by utilizing free email service. The efficiency and scalability are increased by separated management of metadata, data block, distributed storage and cloud data prefetching. Experiments show that the optimization method improves the read and write performance of the system effectively.

Key words: cloud storage     file system     metadata management     prefetching     incremental encryption    

面对当前PB(Petabyte)级的海量数据存储需求,云存储服务支撑的文件系统应运而生,得到了产业界和学术界的广泛关注,如GmailFS、EMFS、Dropbox、Google Drive等.

设计并实现了一个新型云存储服务支撑的文件系统(CSFS,cloud service-backed file system).与现有系统相比,CSFS同时满足了以下3个需求.

1) 低成本. CSFS使用邮箱进行数据存储,有效地整合网络可用资源,减少对硬件资源的投入,降低了系统的开发成本.

2) 高效率. CSFS数据与元数据分离管理的架构设计有效地缓解了服务器、客户端在存取数据时带宽方面的压力,高了访问速度;CSFS文件优化存储、预取高效性.技术、增量加密算法的设计进一步提高了系统的高效性.

3) 易扩展. CSFS采用分布式存储缓解了单个存储设备的性能瓶颈,提升了系统对海量数据的存储能力;CSFS存储抽象层的设计使系统易于实施空间扩容,文件标识的设计使系统易于实现多终端同步和访问控制等功能扩展.

1 系统总体设计

CSFS的设计目标是尽可能减少硬件资源投入,在实现传统文件系统基本架构和功能的基础上,有效地整合了网络可用资源建设云存储平台,并达到较好的性能表现.该系统改变了本地数据存储的传统思维,将文件分离出元数据与数据部分,分别存储在SVN(Subversion)服务器和imap邮箱云存储服务中.系统客户端的设计与实现分为用户接入层,数据管理层和存储抽象层,系统的总体设计如图 1所示.

图 1 CSFS系统总体设计
1.1 云存储服务选择

SVN[1]是一个开源的版本控制系统.它是版本控制技术的典型代表,该技术能够在服务器中建立文件的版本库,并支持在本地访问或通过网络访问版本库服务器中的文件数据,它可以有效地记录版本库中文件的所有变化,其键/值对属性、出色的跨平台支持、增量存储特性、灵活的网络连接等特点使其成为系统元数据存储的最佳选择.另外,为尽可能地减少系统的硬件投入,考虑到邮箱服务作为互联网的基础服务,其稳定性较高,且不同邮箱服务提供商可采用相同的技术接入,更具通用性,系统在借鉴GmailFS[2]和EMFS[3]设计思路的基础上选取邮箱存储服务作为云端数据存储单元,同时,使用分布式存储、数据与元数据分离管理和大文件拆分[4]等设计避免了GmailFS和EMFS文件系统的不足.

1.2 用户接入层设计

用户接入层直接面向文件系统的使用者,主要负责用户与文件系统底层的交互,对底层数据管理和存储进行封装,为用户提供了接入文件系统的接口,使文件系统的底层操作对用户变得透明. dokan是用户态的文件系统驱动[5],CSFS使用dokan虚拟出易于用户使用的磁盘文件夹,将用户的文件操作行为抽象为创建、删除、命名与读写4种操作接口,然后将不同文件操作的方法注册到dokan.sys驱动中,用户只需直接使用相应的接口,便可完成文件系统对应的功能. dokan.sys相当于一个运行在内核态的代理,作为提出请求的程序和文件系统程序之间的桥梁,当相应的文件操作接口被调用时,将会触发对应事件进入消息队列等待处理.

1.3 数据管理层设计

数据管理层是文件系统中的数据管控和调度中心,主要负责数据和元数据的分离以及元数据的管理与缓存.该层依次将任务消息队列中的任务取出,根据任务对象的类型做出不同的数据与元数据分离处理,然后将分离出来的元数据以文件的形式存储在客户端缓存区,同时,将其抽象为不同的字段缓存到本地数据库中,进行统一管理,以便文件系统调取使用.

1.4 存储抽象层设计

存储抽象层是文件系统中的数据存取控制中心,负责文件数据和元数据的云端同步以及文件系统存储空间的管理.该层是文件数据与云端交互的集散地,经过数据管理层预处理的文件将在这里被离散存储在云端存储服务中;相反地,从云端取回的离散数据也将在这里重新聚合起来.

存储抽象层主要包括元数据同步模块和数据同步模块,元数据同步模块通过SVNClient类的文件操作将分离出的元数据直接存储在元数据服务器中;同时,不断地与元数据服务器进行交互,实现系统的控制.数据同步模块下设计了逻辑存储和物理存储2个模块,逻辑存储模块将多个物理存储模块按照一定的规则整合在一起,抽象为一个大的存储单位,主要负责对各个物理存储单元的管理与调度,实现数据块在云端的分布式存储,其工作对象是物理存储单元;物理存储模块是整个云存储文件系统的基本单元,表示具体的云存储服务(如163邮箱、126邮箱等),负责数据块在云端结点的实际存取,它是具体的云存储服务的接入模块,其工作对象为数据块.

2 系统关键技术2.1 数据与元数据分离管理

CSFS中的所有文件都被分离为元数据和数据两个部分,元数据部分包括文件的文件标识、文件时间戳、文件大小等,数据部分则是源文件的完整数据.文件系统几乎所有的操作都需要使用元数据,但并不是所有操作都要使用具体文件数据,因此,对元数据的接入和管理显得尤为重要,如果将其存储在邮箱云存储服务中,当邮箱中数据量过多时,其接入开销将显著地影响系统性能.系统使用SVN服务器管理元数据,使用邮箱进行数据存储,对数据与元数据分离管理的架构设计有效地缓解了服务器、客户端在存取数据时带宽方面的压力,提高了访问速度.

CSFS设计了2种数据与元数据分离方法:1) 创建一个与源文件对应的空文件副本,在其中记录其元数据信息;2) 将源文件作为元数据,借助SVN的键/值对属性将各项元数据标记在文件SVN头信息中.对于常被用户编辑的文件类型,如doc、docx、xls等,如果将其存放在邮箱服务中,频繁的数据接入将会降低文件系统的性能,对于此类文件CSFS使用方法二将整个文件缓存在缓存区中与元数据服务器交互.该文件优化存储设计可以充分利用SVN技术的增量存储特性减少数据传输的数量以及对邮箱存储服务的频繁接入,有效地提升了文件系统的读写性能.

CSFS通过元数据同步模块将元数据存储在元数据服务器中,同时,该模块定时监测元数据服务器中的版本库版本号与客户端版本号的异同,当服务器版本号大于客户端时,执行文件同步,实现系统控制.通过数据同步模块将数据按照系统设计存放在不同的云存储服务节点中,需要读写时再进行具体接入.

2.2 分布式存储

由于不同文件的数据量差异很大,不同邮箱存储服务对不同大小文件的传输速率不同,且对传输文件的大小会有所限制.因此,CSFS设计了文件拆分策略,将拆分后的数据块分散存放在邮箱存储服务中. CSFS采用可扩展的分布式存储系统结构,利用多个云存储服务资源分担存储负荷,利用SVN服务器定位存储信息,不但缓解了传统集中式存储系统中单个存储设备的性能瓶颈,提升了系统对海量数据的存储能力,还提高了系统的可用性和扩展性.

CSFS利用文件标识和逻辑存储块中物理存储单元的个数(PStore_num)计算首个数据块的邮箱存储位置;根据文件大小(file_size)和系统设置的切块大小(chunk_size)计算文件块数;按系统设计拆分文件并为每个数据块标识块号(chunk_id);最后,将切分后的数据块按顺序循环存储在各个邮箱存储服务中.其中,文件标识与用户系统中的文件是一一对应的,由用户标识(User_id)和元数据标识(Metadata_id)两部分组成:User_id是系统为每个用户分配的编号,Metadata_id为32位的2进制数据,其29~31位用于表示特定的逻辑存储模块(LStore_id),29~28位为终端标识(Terminal_id),0~26位是为每个文件生成的随机数(Random_id),该随机数在同一用户的文件系统内是唯一的. 图 2以chunk_size:5 Mbit/s,PStore_num:5,file_size:43 Mbit/s,file_id:214791576034为例显示了系统分布式存储的实现过程.

图 2 系统分布式存储过程

系统文件取回过程类似,首先计算出数据块个数和首个数据块的邮箱存储账户位置,然后依次从邮箱存储服务中取回所有数据块,再根据chunk_id在本地重新组合为完整的文件.

2.3 云端数据预取技术

实践表明,通过IMAP技术实现文件数据在邮箱账户中的存取是有效且稳定的,但测试过程发现,从邮箱存储服务取回数据时存在检索时间较长的问题.尤其当邮箱中数据量较大时,这一问题对文件系统的性能表现的影响更加突出.

邮件UID(user identification)是一串长整数形式的邮件标识,其与邮箱中的邮件是一一对应的,CSFS根据邮件的关键字(file_id)得到邮件的UID,再根据UID取回云端数据.因此,解决该问题的关键是缩短从file_id到UID映射的建立时间.考虑到系统使用APPEND命令将文件数据以附件邮件形式存储在邮箱中,新的邮件将被添加到邮箱账户的底部,并为其添加顺序递增的UID号,CSFS在客户端数据库中建立file_id与UID的映射表,并在系统后台动态维护其中的映射数据实现云端数据预取.该技术有效降低了文件系统从邮箱存储服务中检索及接入数据块的时间开销,提升了数据的接入速度,从而提高了系统的高效性.

2.4 增量加密算法

目前,云存储环境易受到黑客攻击,针对存储在元数据服务器端的文件数据,改进了普通AES机密算法,提出了一种基于客户端的透明加密方案——增量加密算法.该算法不是直接对整个文件进行16字节定长分块加密,而是根据内容使用Rabin指纹[6-7]对文件变长分块,再使用AES加密算法对这些变长分块加密.文件修改后,新文件分块和原文件分块的差别在于修改处,新密文件分块和原密文件分块的差异也仅在相应的分块处.因此,CSFS同步文件可以充分利用SVN技术的增量存储特性,实现密文同步高效性.

通常密钥管理包括密钥生成、密钥分发、密钥存储等.增量加密算法的密钥由客户端随机产生,每个文件对应一个密钥;同时,算法设计中采用了层级加密的思想,使用用户口令的Hash值作为密钥,采用基本的AES算法对文件主密钥加密,并将其作为文件属性保存在云存储服务器中.这样既保证了用户数据的机密性,又提高了文件同步的高效性.

3 性能测试

实现了CSFS云存储文件系统,对影响该系统的关键因素做了试验和分析,并对系统整体性能进行了测试.测试网络环境为校内局域网,测试用户终端为PC端,测试机为普通Win7系统台式机,云存储服务选择imap.163.com.为了模拟实际用户真实网络环境,测试实验过程中对SVN服务器进行了500 kbit/s限速设置.测试结果使用文件写入的时间开销作为度量,时间开销越小则表示系统性能越好,反之则系统性能越差.通过前期实验发现当分布式存储的切块大小为5 MB时读写性能达到最优,本节实验中的切块大小取5 MB.

3.1 分布式存储性能测试

CSFS的存储抽象层设计中,分布式存储作为关键技术,其逻辑存储块中物理存储单元个数的设置对文件系统的性能影响较大,本文设置了如下实验加以分析研究.本实验使用邮件存储作为物理存储单元,使用同一个大小为100 Mbit/s的文件进行测试,测试结果如图 3所示.

图 3 邮件存储单元个数对系统性能的影响

测试结果显示,当邮件存储个数小于3时,系统性能显著下降;当邮件存储单元个数为3、4、5时,系统性能最好.进一步计算每组实验的文件存储速率,分析其带宽方面的表现,结果见表 1.

表 1 邮件存储单元个数设置对存储速率的影响

表 1的结果显示,文件存储速率随邮件存储个数的增多而提高.由于文件系统在数据块传输过程中采用多线程并行传输技术,每一个线程代表一个物理存储单元的传输连接,线程越多占用网络带宽越多,同一时间向云存储服务发送多个数据块的过程中,受网络带宽影响,当邮件存储个数≥3后,带宽被占满后线程数增加,文件系统的存储速率也不再提升.

3.2 文件优化存储性能测试

CSFS的数据与元数据分离管理设计中实现了文件优化存储,本实验设置文件系统使得文件分别存储在SVN服务器和云端邮箱以分析该设计对系统性能的优化.其中,小文件存储方案对比测试结果如图 4所示.

图 4 小文件存储方案对比

测试结果显示,对此类文件的优化存储设计有效地降低了其写入文件系统的时间开销,将此类文件直接存储在SVN服务器中,使得文件系统对其进行修改操作的时间开销降低了约65%.

大文件存储方案对比测试结果如图 5所示.

图 5 大文件存储方案对比

测试结果表明,将大文件分块后并行地传输到云端存储服务中的时间开销明显低于直接存储在SVN服务器中,前者的时间开销仅约为后者的10%.

3.3 预取技术性能测试

设置如下实验以分析CSFS预取技术的设计与实现对系统性能的优化效果,测试结果如图 6所示.

图 6 预取技术性能测试

测试结果显示,同步一个相同文件的时间开销都随账户中已有文件个数的增多而增大,但是未采用预取技术的文件系统的同步时间开销都明显高于采用预取技术后的文件系统;而且,前者随着文件系统中已有数据量的增加,其时间开销增加的趋势也增大.相同网络环境下,2个系统从邮箱下载相同文件的时间都是相近的,未采用预取技术的文件系统,由于每次下载数据块时都需要在整个邮箱存储服务中检索数据块UID才能下载,相比之下,采用预取技术直接通过本地数据库映射表获得UID进而下载数据块实现文件同步的时间开销减少了至少53%.

3.4 增量加密方案对文件系统性能的影响

最后对云存储中透明加密方案进行了性能测试,测试结果如图 7所示.

图 7 增量加密方案对文件系统性能的影响

测试结果显示,相比普通AES加密同步文件,采用增量加密算法同步文件的时间开销节约了75%,比明文同步时间开销增加少于30%.

参考文献
[1] 贺自军. 基于SVN的统一协作平台设计与实现[D]. 北京: 北京邮电大学, 2009.
He Zijun. The design and implementation of unified cooperation platform based on SVN [D]. Beijing: Beijing University of Posts and Telecommunications, 2009.
[2] David Hansen GMail File system over FUSE[EB/OL]. 2010. http://sr71.net/projects/gmailfs/.
[3] Srinivasan J, Wei W. Emfs: email-based personal cloud storage[C]//Sixth International Conference on Networking, Architecture, and Storage, NAS 2011. Dalian, China: [S.n.], 2011: 248-257.
[4] Idilio Drago, Enrico Bocchi. Benchmarking personal cloud storage [C]//In: Proceedings of the 13th ACM Internet Measurement Conference, IMC 2013. Barcelona, Spain: ACM, 2013: 205-212.
[5] 田怡萌. BlueOcean海量存储系统Windows客户端设计与实现[D]. 上海: 上海交通大学, 2013.
Tian Yimeng. Design and implementation of windows client for blueocean mass storage system[D]. Shanghai: Shanghai Jiao Tong University, 2013.
[6] Rabin M O. Fingerprinting by random polynomials[J].Washington: Center for Research in Computing Technology, 1981.
[7] 孙继忠, 马永强, 李玉华. 基于字节指纹极值特征的数据分块算法[J]. 计算机工程, 2010, 36(8): 69–73.
Sun Jizhong, Ma Yongqiang, Li Yuhua. Data chunking algorithm based on byte-fingerprint extremum characteristics[J].Comupter Engineering, 2010, 36(8): 69–73.