文件服务器和web应用分离的思路(转)
目前在做一个应用,有不同的客户端,包括web应用的客户端,其他的客户端,都要访问我的文件服务器,通过文件服务程序提供的服务来访问文件,但是对文件管理服务器这个应用,没有什么思路,请大家给点思路,谢谢:
大概的架构图(为了不让大家误解我的需求,重新画了个图)如下:
系统涉及到三个部分:
1、客户端:包括标准的java web应用,主要完成终端用户的上传下载文件,及其一些功能,用户上传或下载的文件,都保存在【文件服务器】上,而且不能直接访问【文件服务器】,必须通过【文件管理服务】应用提供的api来间接访问。(有点拗口)
2、【文件管理服务】程序,也是一个独立的应用,可以是web服务器,也可以是后台运行的程序,该应用主要功能就是管理【文件服务器】上的文件,如上传,下载,分类管理等,对外提供相关API供客户端访问【文件服务器】里的文件,同时对客户端进行权限校验,比如注册用户才能访问【文件服务器】,非注册用户不能访问等;还其他相关功能;,有可能以后会有集群
3、【文件服务器】具体存放文件的地方了,有可能以后会有集群。
说说我的要求:
客户端得所有操作文件必须通过【文件管理服务】程序提供的API来操作【文件服务器】上的文件,而且必须有相应的权限,而且客户端可以看到自己上传的所有文件的相关信息,包括其他非自己上传的信息(根据权限显示),就像本地一样。
现在是各个系统间的通信协议怎么处理,主要是【文件管理服务】程序与客户端的通信,http协议或则socket?或者其他方式?【文件管理服务】程序应该怎么设计比较合理,谢谢。
2011-05-08 补充说明****************************************************************
补充说明一些客户端及服务器端得一些功能划分,担心大家理解错误:
【客户端】,只是对应于【文件管理服务】系统<也可理解为一个服务,一个独立的应用程序>且仅仅涉及到文件操作的时候而言的,【客户端】实际上是一个完整的应用程序,比如一个运行在手机上的程序;也可以是一个网站(或其他的web应用系统,假定称为网站吧),该网站中,有供终端用户使用的portal及用户信息管理模块等,比如像javaeye的论坛,也有供网站管理员或系统业务员等使用的后端管理模块,他们只有在涉及到文件相关的上传,下载、删除等操作的时候,才需要和【文件管理服务】程序通讯,需要传入一些必要的数据,比如权限、用户信息等,只有校验通过后才能对后,才能通过【文件管理服务】程序提供的API间接操作最终保存在【文件服务器】上的文件。
各个【客户端(或网站)】之间都是独立在不同的服务器上跑的,有自己的管理系统,比如数据库等;
【文件管理服务】程序也是一个独立的应用,在独立的一台或多台机器上跑;
【文件服务器】也是独立一台或多台机器,保存所有的文件;
考虑到客户端的用户以后可能会很多,所以将三部分都作为独立的应用来部署,一是彼此间不影响,而是当某些地方有压力时,可以方便扩展,如集群,比如如果【文件管理服务】的压力大,可以对【文件管理服务】部分进行集群;如果【文件服务器】压力大,同样也可以单独对【文件服务器】进行集群管理。
当然三部分之间要确保用户的文件的关系理清楚,而且要方便查找及方便操作。
--------------补充,还有就是文件服务器上文件的备份和恢复问题,这些都没有思路