1

我们在 haproxy 负载均衡器后面有两个最近升级的 Plone 4.3.2 实例,它本身就在 Apache 后面。

我们将每个 Plone 实例限制为使用 haproxy 配置服务两个并发请求。

我们最近遇到了一个问题,客户端快速连续发送 4 个字节范围的 PDF 请求,每个请求需要 6 到 8 分钟才能得到响应。这会将所有可用请求锁定 6 分钟,因此 haproxy 会超时队列中的其他请求。PDF 存储在 Plone 中的一个 ATFile 对象,我认为在我们最近的升级中应该已将其迁移到 blob 存储。

我的问题是我们应该采取哪些措施来防止将来发生类似情况?

我也有兴趣:

  • 如何调试为什么负载较轻的服务器上的字节范围请求需要这么长时间才能响应
  • plone.app.blob 如何处理字节范围请求
  • 是否可以将 Apache 配置为从其缓存而不是后端服务器提供字节范围请求

按照这里的要求,去掉了多余配置的 haproxy.cfg。

global
    maxconn         450
    spread-checks   3

defaults
    log             /dev/log local0
    mode            http
    option          http-server-close
    option          abortonclose
    option          redispatch
    option          httplog
    timeout connect 7s
    timeout client  300s
    timeout queue   120s
    timeout server  300s

listen cms 127.0.0.1:18181
    id 3
    balance leastconn
    option          httpchk
    http-check      send-state
    timeout check   10s

    acl cms_edit url_dom xxx.xxx.xxx.xxx
    acl cms_not_ok nbsrv() lt 2
    block if cms_edit cms_not_ok

    server cms_instance1 app:18081 check downinter 10s maxconn 2 rise 1 slowstart 300s
    server cms_instance2 app:18082 check downinter 10s maxconn 2 rise 1 slowstart 300s
4

2 回答 2

0

您可以安装https://pypi.python.org/pypi/Products.LongRequestLogger并检查其日志文件以查看请求卡住的位置。

于 2014-05-01T06:47:45.837 回答
0

我选择禁用对后端 Zope 服务器的字节范围请求。我已将以下内容添加到 haproxy 的 CMS 监听部分。

reqidel ^Range:.*
于 2015-03-30T10:02:23.383 回答