面向云存储的存储网关

时间:2024-11-11 00:47:38 来源:作文网 作者:管理员

随着计算机网络的发展与网络带宽的不断增长,利用网络技术来提高存储系统的容量、可靠性与可扩展性成为可能. 近年来, 分布式网络存储已经成为存储技术发展的新趋势. 分布式文件系统可以将分散在网络中的存储资源组织起来, 构成大容量的虚拟磁盘存储ย空间. 该系统能够更好地解决多客户端并发操作下, 有限的网络带宽和磁盘 I/O 对数据访问速度的限制; 同时, 由于该系统在重复利用原有设备、动态扩充虚拟空间容量、容灾备份等多方面具有的优越性, 因而受到了开源社区和相关技术公司的追捧, 并在很短的时间内出现了很多开源的分布式文件系统, 如 KFS、moosefs、FastDFS、Ceph、HDFS、GFS 等, 以及闭源的分布式文件系统 LoogStore、BWFS等.

就开源分布式文件系统而言, 多数不支持在Windows 操作系统上进行应用开发. 即使某些分布式文件系统支持, 也只是提供些动态库或者静态库, 这对已经存在于Windows操作系统上的原有应用程序而言, 不但要考虑重新编码, 还要考虑当前应用程序和分布式文件系统提供的动态库或静态库之间的接口和语言兼容性等问题. 假如分布式文件系统的接入网关能够以网络虚拟磁盘的方式提供服务, 这样既可以减少程序之间的耦合性, 又可以避免对原有应用程序的修改. 本文主要对分布式文件系统的 Windows 网络虚拟磁盘的实现方式进行研究, 并实现了一个 Windows版存储网关程序 dfsclient.

1 基于Linux存储网关的实现分析

基于 Linux 系统的存储网关实现方法有两种: 一种实现方式如 Open-ISCSI, 其所有功能都在内核态实现, 用户态只完成网络连接管理和磁盘设备的挂接操作. 实质是在网络设备对象 net_device 上抽象出一个虚拟的磁盘驱动设备对象, 然后通过一个网络连接对象 sock 将网络设备对象和虚拟磁盘设备关联起来, 以实现网络虚拟磁盘功能. 当将这€个磁盘设备挂接到根文件系统上的时候, 就将这个设备对应的文件系统挂接到根文件系统上了, 对挂载点内文件的操作通过网络对应为对远端存储设备的操作.

2 基于Windows存储网关的设计与实现

基于 Windows 系统存储网关的实现方法和基于Linux 系统存储网关的实现方法相似, 也有两种. 本文介绍 Windows 版存储网关的实现方法和基于 Linux 下fuse 的存储网关实现方法相似.

2.1 RDFL 文件系统驱动

RDFL 文件系统驱动在操作系统启动时候, 由后台服务进程 RDFSMounter 自动将之加载到操作系统内核中, 当 RDFL 文件系统驱动被加载到内核中时,RDFL 会创建一个名称为 RDFLCtl 的设备对象, 用户态可以通过该设备对象设置和查询RDFL驱动的状态,以及创建和删除文件系统对象和虚拟磁盘设备对象.

2.2 RDFL 用户态动态库

RDFL 内核驱动的用户态部分, 对内核态 RDFL驱动程序提供的功能进行了封装, 提供了一组管理函数. 这些函数包括三部分: 文件系统对象和虚拟磁盘对象的创建、删除、查询和设置, 其中创建函数在dfsclient 启动的时候被调用, 删除函数在 dfsclient 函数结束的时候被调用, 查询和设置函数被 RDFSMounter调用, 用以对文件系统对象和虚拟磁盘对象状态进行查询和设置. 文件系统回调函数 MajorFunction 到用户态的映射函数, 这些回调函数包括 createFile、OpenDirectory、createDirectory、ReadFile、WriteFile、CloseFile 等函数, dfsclient 存储网关的主要功能就是将这些回调函数转换成对分布式文件系统的操作. 最后一些包括调试开关的打开关闭, 版本信息的查询等函数.

2.3 dfsclient 存储网关

从程序设计上而言, dfsclient 包含三部分: 调度转发子系统通过分布式文件系统操作原语实现RDFL.dll 中要求实现的类似 Windows 文件系统标准接口的回调接口, 调度转发子系统也包括了多线程数据并发读写, 读写数据缓存, 元数据缓存等功能. RDFL.dll 模块接收来自 RDFL.sys 的对文件进行操作的事件, 并将事件转发给调度转发子系统, 由调度转发子系统 翻译成分布式文件系统操作原语, 实现对分布式文件系统的操作. 分布式文件系统操作原语是由分布式文件系统提供的, 基于 socket 的可以对文件及文件夹进行操作的函数集合.

3 Windows系统存储网关性能测试

✉ 以下是基于 HDFS 分布式文件系统的 Wi☣ndows 版存储网关和 Linux 版存储网关的读写性能对比, 读写数据为 4G 大小的大文件, 服务器配置如下:

元数据服务器配置: 一块千兆网卡,8G 内存, 4 个 2 核 CPU.

存储数据服务器配置: 两块千兆网卡, 15000 转 8M 缓存磁盘, 4 磁盘 RAID0, 8G 内存, 4 个 2 核 CPU.

存储网络客户端配置: 一块千兆网卡, 15000 转8M 缓存磁盘, 4 磁盘 RAID0, 8G 内存, 4 个 2 核 CPU.

通过两层千兆交换机将元数据服务器, 存储数据服务器和 Windows, Linux 版存储网关连接起来. 数据存储采用一个副本方式存储, 存在三台存储数据服务器.

4 总结

使用 Windows 文件系统过滤驱动开发类似于Linux 下 fuse 的驱动程序 RDFL, 可以比较容易的开发Windows 版存储网关, 极大的缩短开发周期. 当然, 在开发过程中存在很多问题, 主要是 Windows 操作系统和Linux操作系统之间的兼容性问题, 但是, 这些问题对数据访问的影响基本可以忽略. 对基于 RDFL 开发存储网关而言 , pthread_win32 可以使从 Li☮nux 到Windows 下的移植变得容易简单, 特别对 Windows 多线程接口不熟悉的开发者.


热门排行: 教你如何写建议书