作者:Frank
NetDrive是一款对于个人用户免费的客户端软件,它可以将网络上的FTP空间或者WebDAV空间映射为本地的磁盘,就像操作计算机中的磁盘一样方便,支持拖拽(Drag-and-Drop)操作。这与目前比较流行的一些云存储软件,与网络硬盘比较类似,在软件供应模式逐步转变为提供软件服务的今天,客户端有越来越多的资源需要存储到云端(Cloud Storage),例如一般用户手机上的照片,短信,邮件等等。本文通过对NetDrive的设计架构分析,发现构建一般的网盘服务实现也并不复杂,我们可以使用一台存储服务器,加上类似于NetDrive的客户端程序即可实现。
服务器实现的关键是提供稳定的存储空间,和方便扩展的通信协议。WebDAV(Web-based Distributed Authoring and Versioning)是基于 HTTP 1.1 的一个通信协议。它为 HTTP 1.1 添加了一些扩展(就是在 GET、POST、HEAD 等几个 HTTP 标准方法以外添加了一些新的方法),使得应用程序可以直接将文件写到 Web Server 上,并且在写文件时候可以对文件加锁,写完后对文件解锁,还可以支持对文件所做的版本控制。
而客户端实现的关键包括两个方面,1. 客户端与存储服务器的通信;2. 云存储操作的本地虚拟化。下面针对NetDrive软件设计架构进行介绍,解析此云存储客户端的实现方案。
如下图:
NetDriver 架构主要分为文件系统驱动(File System Driver),Mount服务(Mount Service)和应用程序(NetDrive Application)三个模块:
1. Mount Service
将一个虚拟盘符加载作为本地的一个硬盘,以便在此硬盘上进行类似于普通硬盘的操作,如拷贝/粘贴,Drag-and-Drop等。这样一来,使得软件的用户体验极大的优于一般的网络存储软件,如FTP客户端, HTTP客户端等。用户可以像本地硬盘一样操作服务器的存储空间。
2. File System Driver
实现用户态的文件系统驱动,主要将其加载到虚拟磁盘中,接收磁盘上的所有用户操作,并将所有IRP包过滤到NetDrive应用程序供其使用。一旦一个文件I / O请求从用户的行动创造出来,窗口浏览器中的I / O管理器窗口子系统将创建对应的IRP 到驱动层,驱动层通过分析,再与应用程序处理过后,将IRP发送回I/O管理器。
3. NetDrive Application
当应用程序层接收到文件驱动层sink的IRP包之后,会对其进行分析,以解析出具体的操作内容,如创建/删除,拷贝/粘贴,重命名之类操作,调用内部的WebDAV协议加工模块与远端的NetDriver Server进行通信,已实现文件在网盘中的真正操作。
说明:
用户态文件系统驱动可以使用如Dokan之类的开源的驱动程序框架实现。
参考资料:
1. NetDrive 官方网站 - http://www.netdrive.net/index.html
2. Dokan 开发者网站 - http://dokan-dev.net/en
2. WebDAV - http://en.wikipedia.org/wiki/WebDAV