Idea share: 基于文件共享方式的网络软件开发
Sunday, May 25th, 2008一个很老的idea, 一直没引起什么共鸣,但自己一直没忘, 恰好前几天又考虑到了文件相关的一个问题,把这份email翻出来:
Re: 一个网络软件开发的新思路探讨February 09, 2003
寒假里考虑了一种网络软件开发的新思路, 初步考虑下来,感觉是可行的。 而这种方法一旦证实是可行并且效率足够高,将极大程度地降低网络软件开发的难度,而且应用越复杂,其优势越明显,势必对我们今后的发展带来重大的意义。
下面简要说明来供大家探讨,如果必要可以进行一些原型验证。
基本的原理:
=========
通过网络文件系统(可以用多种现有协议实现NFS, WebFS, SMB, CIFS, 甚至基于http, ftp)和windows的网络支持,来把远程的资源模拟并且映射为本地的一个磁盘。 这样对远程的各种操作,可以全部通过基本的文件操作函数来变成对文件的读写操作。由于远端的模拟文件服务器由我们来实现,所以不但能处理文件,而且可以把内存、外设等全部映射为文件。 这个思路,主要来源于Unix系统的/dev/xxx的设计,以及mem map file等IPC机制的设计。
这普遍适合于P2P, Client/Server型的应用, 但不适用于IP Phone, Video Conf类型的。
如果采用这种方法,将对开发网络协作共享型的应用,IM类应用等产生巨大的帮助,因为开发和调试变得非常简单,可以轻松重用现有的其他软件(例如利用word, excel开发一个IM系统,不过发送的IM格式是word格式或execl格式)。 开发调试也很简单,用单机就能模拟网络环境进行调试,大部分应用,可以直接在文件系统上开发,然后加到网络文件系统中测试。
适用条件:
=========
通过和Presence Service的结合,或者其他P2P方法(入JXTA.ORG的技术)的结合,peer和peer之间首先需要发现对方,才能使用本方法进行协作。
和传统方法比较的优势:
==================
(传统方法指: 1. 网络协议实现; 2. RPC方法实现;)
1. 简单:所有操作都变成文件操作, 不需要学习任何网络知识就能开发;
越复杂的应用,越有价值;试想像一下实现一个支持复杂的文件发送,IM, 日程表管理,数据共享的应用,无论用那种传统实现方法,设计,开发,调试是多么复杂!
2. 适用性强:一旦底层机制完成,以后所有项目都不需要修改,也不需要扩展;
3. 可重用现有部件和应用。 利用word可以实现发送word格式的IM, 利用EXECL可以发送excel格式IM, 利用outlook可以发送email格式的IM, 利用IE, 可以轻松发送HTML格式的IM… 如果不采用这种方法,实现起来何其复杂!
4. 同时适用于P2P和C/S结构
5. 对于文件共享型,数据同步型的应用非常适合,而如果采用传统方式来实现文件共享和数据同步都要复杂很多,其实现的代码接近于这种新方法的底层代码的工作量。
需要克服的技术点:
==============
已经证实了这些技术点都是可行的,只存在工作量问题。
1. 网络文件系统技术的选择:目前看来NFS类型比较合适, SUN在NFS基础上的WebNFS可以参考,不知道是否有价值。 Microsoft最近提出的CIFS (Common Internet File System)是MS非常看重的技术,基本是SMB的改进,但还缺乏足够支持。
初步考虑认为不能采用http, ftp等传输型协议,因为这些协议在实现seek和write操作方面过弱。
我曾经独自从底层成功实现过NFS server,认为实现这类服务端的难度不大。
2. windows virtual drive的技术:有两个选择,一种模拟成SMB协议,采用windows share的方法,把远程的网络文件系统map成为一个网络盘; 另一种采用DDK, 写一个模拟的设备驱动,使系统认为这就是一个存储介质。 两种利弊需要评估。
不能使用Shell Name Space Extension来实现,因为Namespace extension只能实现expolorer中表现为一个folder, 并不是真正的文件系统,不能执行文件操作。
3. 防火墙的穿越和安全性问题。必须保证能穿越fw才能提高可用性, 同时要能保证系统安全不被破坏。
评估需要的进行的方面:
==================
1. 是否确实能提高开发效率? 可以采用windows net share的方法来开发测试程序试验评估,多台PC各自按一定规则share出某个目录,其他PC可以访问,开发一个测试的应用,通过读取自己的本地目录来收消息, 通过写对方的目录来发消息,通过多人同时写某个对方的共享文件来测试协作性应用;这个评估只要设计有效,开发工作较少,结果能说明大部分问题;
2. 采用什么技术实现网络文件系统?什么技术实现virtual drive? 如何解决fw穿越?
3. 性能和效率的评估,主要考虑两点: (1)采用文件操作方法后实现协议的 网络传输效率; (2)多机协作时的服务端处理能力,和共享锁机制实现的效率;
——————————
我自认为这可能是一个了不起的创意! 一旦能成功,将改写网络软件的开发办法! 呵呵,请大家开通脑筋,帮我一起考虑考虑。 email虽然只发给了各位,欢迎转发给你认为有价值的公司内部人员来参加讨论。
mao
About


































































