我着实体会到不同服务器之间文件同步的烦恼。
电信、网通、教育网三个机房中分别运行着同样的程序,在这三个一样的程序中,用户可以在任意一节点网站上进行交互式活动,比如上传个性头像、修改歌曲封面等。本来上传文件是无可厚非的,但这涉及到一个很重要的文件同步问题:
A在电信服务器上上传了文件,在网通及教育网的机器上也应该出现,此时就应该将A上传的文件同时同步到网通及教育网机器上。
最开始打算在电信、网通、教育网三台服务器上分别开放同样的接口来处理Post过去的文件,电信服务器上上传文件后,立即向网通、教育网的该接口进行请求,从而进行文件同步。但由于走的是HTTP协议,在遇到大量文件要进行同步时,效率可能会非常低。
接着考虑用FileSystemWatcher来监测对文件的更改,当待同步文件达到一定数目时,才向其它接口请求,这样可以避免用户在上传文件时要同时向其它服务器post数据的危险性。但FileSystemWatcher占用资源不可小视,而且,同样走的是HTTP协议,同最开始的想法唯一的差别就是当文件累积到一定数目时才进行投递。还有一点没有提到的就是:post过去的文件可能存放的物理位置不同,如头像可能放在HeaderImage中,封面可能存放在CoverImages中等。
最后打算用FTP协议,三台服务器上分别安装文件上传服务、侦听服务。其中上传服务是把新增的文件统一上传到FTP服务器中,按类别的不同将文件保存到不同的目录。侦听服务用监视指定目录的文件改动,当发现有文件改动时,随即移动到指定的目录中,如HeaderImage目录。这也不是一个好的解决方法:首先,三台服务器上都要安装相同的服务,并且三者不能有一个Crash,否则无法做到同步。
看来,还是需要将所有的img放到独立服务器上,并且该服务器处于拥有电信、网通、教育网的机房中,且三个站点用统一的绝对URL来调用该独立服务器上的图片文件,估计这才是最好的解决方法。