【问题标题】:Multi-Step Image Submission To Load Balanced Server Problem多步提交图片到负载均衡服务器问题
【发布时间】:2011-05-21 23:20:20
【问题描述】:

我们有两个使用 squid 页面缓存代理负载平衡的 apache/php Web 服务器。 squid 缓存在图像提交页面上未激活。我们有一个表单,用户可以在其中提交图片。

这是一个两步过程。他们首先上传图片。第二步,他们可以输入有关图像的详细信息,然后在提交图像详细信息后将图像移至正确的文件夹。

问题是,当流量很高时,第二步可能由另一台服务器提供服务,然后是上传图片的服务器。所以第二步可能找不到上传的图片,上传失败。

我们在这些服务器上有数千个图像文件,因此它们之间的同步速度很慢。无论如何,我们可以强制始终从特定服务器提供特定页面吗?基本上是绕过负载均衡功能。

【问题讨论】:

  • 我们的服务器管理员做了一些事情,现在我们没有看到这个问题。他们还在使用 rbdb 进行服务器同步。应该比 rsync 工作得更好。这应该可以解决服务器之间同步的延迟并解决丢失文件的问题。

标签: php apache load-balancing squid


【解决方案1】:

对此有一些解决方案。

  1. 切换到 nginx 作为反向代理,您可以将客户端粘贴到主机上
  2. 使上传目录成为安装在两台主机上的 NFS 共享
  3. 将文件上传到 mysql 表中(可能最好使用哈希表),以便两台服务器都可以访问它。

我个人会选择选项 1,因为您仍然可以获得循环负载平衡,但每个连接都被卡在它最初连接的主机上。

选项 2 的好处是仍然均衡地平衡请求,但缺点是 NFS 共享是单点故障。

如果您使用哈希表,如果数据库服务器上没有足够的内存,选项 3 可能会导致问题。

【讨论】:

  • 看起来#2 是最好的选择。
【解决方案2】:

我可以看到两个接近 Geoffrey 答案的选项。
1. 上传图片到通过rsync同步的上传目录。
然后图像的数量会更小,同步速度也会更快。
完成整个过程后,您可以将图像移动到正确的文件夹。
2. DB:存储的不是图像本身,而是图像的 url,因此您始终可以知道哪个服务器正在保存它,可以访问它。
阅读 Geogrey 的答案并寻找与此主题相关的信息只有两个选项。

【讨论】:

    猜你喜欢
    • 2011-04-19
    • 2022-01-24
    • 2013-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-17
    • 2017-06-12
    相关资源
    最近更新 更多