问题描述
最前面是2台nginx服务器N1,N2用keepalive做高可用后端是4台tomcat T1,T2,T3,T4做集群(使用memcached解决session共享问题)
代码里面会有一些js/css等静态文件,比较好处理,可以在这6台服务器间源代码同步。
系统会上传大量的pdf/doc这样的文件,并且需要转换成swf格式供以后预览,所以用T3,T4来专门处理。其它普通业务交给T1,T2
那么问题来了,客户端要访问一个pdf或swf文件,请求发给nginx,这里肯定不能拦截下来,因为本地只有js/css这类静态文件,没有doc/pdf,于是用location proxy_pass到T3,T4,但T3,T4上只有tomcat,它处理静态文件效率肯定不行。怎么办?
我的思路有两种:
使用共享文件系统,但稳定性有待考察后端再用一个apache不知道大家是怎么解决的?
问题解答
回答1:这个问题是要沉了吗?这个场景应该很多,有现成的可以参考的解决方案吧
回答2:最简单的方式应该是给doc/pdf资源指定一个新域名或子域名,配置nginx,对新域名的请求全部转发到t3,t4上。
不过你这里有一个问题,如果用户上传文件到t3,然后下次访问这个文件时nginx将请求转发到t4怎么办?所以,t3和t4是不是有同步机制?解决这个办法又有一些办法:1,按照你说的使用共享文件系统,samba之类的,t3、t4的文件都上传到这里2,手动在两台机器间同步文件,好处是数据相当于有了备份,坏处就不说了3,试试又拍之类的使用cdn吧,这样连你最开始的问题都能解决4,。。。。