平衡HTTPD和保存项目文件


balancing httpd and saving project files

我有这个项目,我已经工作了3年以上。它是大的。我正在考虑未来的更新/场景,因为我正在完成它,以及我的最后润色工作。

我最近在网上查看了Apache/webserver守护进程平衡,它为平衡目的带来了多个服务器,这些服务器为文件提供线程服务。

我的问题是,当我将文件(图像)与我的项目保存在linux盒子中的选定文件夹中时:

当页面从另一个辅助服务器(平衡)提供时,用户需要保存图片,他应该保存在哪里?我需要知道这一点,所以如果我最终有多个httpd服务器,我需要知道我的用户保存的所有文件都在他们应该在的地方,所以应用程序整齐地显示它们。

这里有很多解决方案,取决于预算,技能等。首先,你的负载平衡软件应该确保会话是粘性的,这样你的用户就不会在上传过程中切换到另一个服务器,或者选择一个服务器来处理所有的上传。一旦图片上传,你可以:(我只有linux的经验,当它涉及到服务器,你没有说哪个操作系统)

  • 将图像FTP到其他服务器:http://php.net/manual/en/book.ftp.php
  • 使用rsync在服务器之间进行复制,要么由上传触发,要么在计划的cron上触发http://rsync.samba.org/
  • 将图像上传到CDN,如cloudfront或rackspace文件,并从那里提供服务
  • 使用网格fs从来没有亲自尝试过,但听起来很花哨:http://docs.mongodb.org/manual/faq/developers/#faq-developers-when-to-use-gridfs
  • 使用网络附加存储-可能会很昂贵

    当你想保持你的文件和元数据自动同步和部署在多个系统和设施。

关于上传到CDN的注意事项,如果本地副本死了,一次下载它们可能会很昂贵,所以不一定是单独使用的解决方案

最好不要用于NFS共享(通过网络挂载映像的目录),因为这意味着如果一个服务器宕机,最好的情况是没有映像服务,最坏的情况是它会拖拽其他服务器(如果发生这种情况!)

DB更新

我已经打折存储blobs很久以前,因为在项目中,我需要在多个服务器上有图像,我们有肖像,风景和方形版本在大约6个大小(文章,画廊,列表页面,移动等),但现在我想到了它。我可能会考虑只将最大的/原始的存储在DB中,然后根据需要使用缓存生成其他的,这可能会很好