站点做动静分离,如何处理用户上传文件呢?
公司的站点是做微信服务的,最近客户量上来了,流量一下暴增,一台服务器撑不住了,经过分析日志,发现主要流量都是静态资源文件,图片, js , css 等。于是去开了 CDN 加速。并打算进一步把一台服务器拆分成两台,分别绑定不同域名,一台专门把动态处理程序,另外一条放纯静态资源并由 CDN 加速。让静态资源彻底不会干扰到服务器处理动态请求。一般的静态资源都很好迁移。但是有个问题是我公司服务器是允许用户上传文件的,主要是一些小的图片,音频,视频。分析流量发现这部分用户上传的图片才是流量的大头,但是要怎么做,才能让用户上传的时候,把文件上传到静态服务器上去呢?现在的困扰点在于,如果在静态服务器上专门部署一个处理上传的程序,由于这个程序无法判断 session (用户登录的时候在动态服务器上)。这就存在安全问题了。如果要动态服务器先接收文件再转发到静态服务器,这种做法不知道是否稳妥。可靠性不知道咋样。
请高手指点
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
sudo apt-get install inotify-tools rsync
可以考虑用
inotifywait
监听PHP服务器上保存上传文件的目录,文件有改变就通过rsync
同步到局域网的专门存储静态资源的服务器,最后PHP输出静态服务器域名的图片链接给浏览器.补充:
rsync不适合文件数量大,变化频繁的同步,因为rsync在同步数据时,需要先扫描所有文件后进行比对后进行差异传输.所以可以考虑用户上传文件后,PHP用
pclose(popen("timeout 10 ftp.sh $file >/dev/null 2>&1 &", 'r'));
异步上传文件到静态资源服务器(需要搭建FTP服务).在shell脚本中用ftp上传文件:
本人以前图片服务是采用以下两种方式(只适用于中转能解决问题的情况),
动态服务器直接把图片以
ftp
的方式直接提交到资源服务器文件临时保存在动态服务器,然后以增量同步的方式同步到资源服务器
若中转不能解决问题,只能把上传的交互直接与资源服通信,考虑同时把用户的相关标识(例如
ID
和TOKEN
)提交到资源服接收,资源服接收端处理完,直接更新DB
,或者动态服和资源服建立多一个上传数据通信挂载
挂载其他服务器的目录到后台服务器
最好可以放到七牛云或者又拍云上去,很方便做CDN,收费还比较便宜。
NFS 应该是个比较靠谱的方案
a:静态服务器
b:动态服务器
B给A上传图片。
————————————————
其实a可以做个上传程序的接口啊。
给接口做验证,发送上传请求的时候验证token判断是否为来自b的合法请求就好了。