作者: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

NetDrive软件的设计架构相关推荐

  1. 三层架构:软件设计架构

    三层架构:软件设计架构 1. 界面层(表示层):用户看的得界面.用户可以通过界面上的组件和服务器进行交互 2. 业务逻辑层:处理业务逻辑的. 3. 数据访问层:操作数据存储文件.

  2. 作《互联网时代的软件革命--SaaS架构设计》上市了

    拙作<互联网时代的软件革命--SaaS架构设计>借CSDN举办的'软件开发2.0大会2008'的东风上市了.本书12月5日的签销也比较火爆. 本书官方网站:http://www.broad ...

  3. 【软件体系结构】架构风格与基于网络应用软件的架构设计:Roy Tomas Fielding】

    [软件体系结构]架构风格与基于网络应用软件的架构设计:Roy Tomas Fielding 博士 - 唐雕 - 博客园

  4. 拙作《互联网时代的软件革命--SaaS架构设计》上市了

    拙作<互联网时代的软件革命--SaaS架构设计>借CSDN举办的'软件开发2.0大会2008'的东风上市了.本书12月5日的签销也比较火爆. 本书官方网站:http://www.broad ...

  5. 连载12:软件体系设计新方向:数学抽象、设计模式、系统架构与方案设计(简化版)(袁晓河著)...

    信息熵观点 针对软件设计来说,我们可以将所有的设计通过结构化来表达,于是我们的所有的设计信息都可以表达成结构熵的处理.那么如果系统的结构熵越大,系统就越不稳定,系统的有序化就越小. 那么是否结构化就表 ...

  6. 软件框架设计的艺术----读书总结

    总结 软件开发的艺术 理想主义,经验主义和无绪 文艺复兴时期,现代科学产生了两个重量级理论: 理性主义和经验主义. 理性主义认为理智是信息的首要来源.给出一个假设,只要通过思考就能理解和描述这个世界, ...

  7. Selenium 2.0的由来及设计架构(一)

    上一篇文章介绍了Selenium1.0的历史及工作原理, 现在,接着上一次的内容说2.0的由来及设计架构. 就在Selenium1.0处于开发阶段的同时,另一款浏览器自动化框架WebDriver也正在 ...

  8. 走近酷点KoolPoint,让我们深度挖掘网管软件的设计细节

    企业需要哪些管理功能   "企业需要哪些管理功能"这是中小企业的网管最应该注意的问题.网管软件都是价格不菲的,所以在为企业选择网管软件时一定要考虑到目前与未来企业网络环境发展的需要 ...

  9. Windows Azure-2.5天免费深度技术训练营——面向软件工程师和架构师

    Windows Azure-2.5天深度技术训练营--面向软件工程师和架构师 ●[深圳场]3月13日.14日全天,3月15日上午 在线报名 ●[北京场]3月20日.21日全天,3月22日上午 在线报名 ...

最新文章

  1. 文件和存储管理学习笔记-动态磁盘管理
  2. CTFshow php特性 web99
  3. 最后 24 小时,赶紧来领取这 50 本送书福利吧!
  4. JAVA项目怎么不是蓝色_解决IDEA创建maven项目时pom.xml没有变蓝的问题
  5. sevlet 注释initparams_servlet3.0注解配置学习笔记
  6. 【2019牛客暑期多校训练营(第二场) - H】Second Large Rectangle(单调栈,全1子矩阵变形)
  7. 三、服务器和客户端的信息函数
  8. mysql二分法查找亿行_算法——二分法查找(binarySearch)
  9. 法定节假日违规组织培训,51talk被通报批评整改不到位
  10. MySQL添加唯一约束和联合唯一约束(建表后添加)
  11. os.path 大全
  12. Hive练习之join
  13. web-----简单小游戏项目
  14. OC中常见的Signal错误
  15. 计算机英语中级职称题库,职称计算机考试题库(中级职称需要考计算机吗)
  16. 基于VHDL的交通灯设计(实训要求)
  17. 黑苹果完美升级mac10.13.6,更换内置无线网卡dw1820A
  18. Python从入门到自闭(网络篇)
  19. 南通大学机械院两年来的心得体会(给大一新生的一点建议)
  20. 庖丁解牛式读《Attention is all your need》

热门文章

  1. 明码标价:谈待遇的要领和禁忌
  2. 3D空间转换(位移、旋转、立体呈现)
  3. 嵌入式linux驱动之路07:裸机开发之蜂鸣器,时钟,中断
  4. php referrer policy,HTTP的Referrer和Referrer Policy设置
  5. 国产图数据库--Nebula备份/恢复
  6. Error: Invalid or corrupt jarfile xxx/lib/classes
  7. c#连接kafka_confluent-kafka-dotnet-master
  8. 创建realease 所需要的keystore 和sha1
  9. 随手记 关于音频中的WAV和图片中的BMP
  10. 我悄咪咪告诉你:罩杯越小的妹子倾向买越贵的内衣~~Python爬取京东9000条内衣销售数据之数据关联度分析