A、B 两台文件服务器,同时用于提供文件上传和下载的服务,他们之间会配置磁盘同步。
(我是在WindowsServer2012下用DFS来实现2台电脑之间文件夹内容自动同步的)。
这2台服务器同时部署了一个文件上传的站点(端口号为3000)和文件下载的站点(端口号为3002)。
现在:
用nginx将fileIn.com映射到A、B的3000
用nginx将 fileOut.com映射到A、B的3002 ,
(形成一个高可用的负载,当一台挂了,这个站点仍然可用)
我们调用上传的API传一个文件之后,API会返回一个下载链接,调用下载的API时,有可能分配给A服务器处理,也有可能分配给B服务器处理,
如果我们上传时是由A处理,下载时交给B处理(A、B之间的目录会自动同步,同步完成时间和文件大小有关系),那么如果是图片这类的小文件,到B上也能下载(下载时已经同步到B上了)。
但是如果文件比较大,100M左右的文件,到B上下载时还没有从A同步过来,这时就会报找不到文件。。。
其他的分布式文件系统应该也会遇到类似的情况,
请问大家遇到这种场景,是如何处理的呢?
没做过类似的玩意,但我感觉比较简单的就两种吧,一种回源到A上拉取,一种上传到A的时候在返回前确保B也写入
如果上传后 立即下载 把nginx配置ip hash。
如果上传后 别人又可能会下载 那么获取文件的时候就判断一下文件是否存在 如果不存在就去重定向到另一台机器。