1

我的问题有两个关于 haproxy 的部分。

问题一:

我正在使用的服务处理上传大量 XML 文档,以及下载也相当大的结果。工作人员使用上传的 XML 文档生成响应,稍后可以从工作人员那里下载。这是一个粗略的设置:

--request--> www.domain.com --> worker(1 or 2).domain.com

www.domain.com 是一个静态内容服务器,也是 haproxy 所在的位置。所有请求最初都会来到这里。静态内容(html、图像等)应由 www.domain.com 上的 nginx 提供。

但是,具有特定 URL 的请求(例如 www.domain.com/[upload]/[id1] 或 www.domain.com/[download]/[id1])需要由工作人员自己处理。这里的另一个问题是转发需要基于 url 具有粘性。

例如:

假设一个 XML 文件被上传到 www.domain.com/upload/123。haproxy 将看到 url 包含上传,并将请求路由到 worker1.domain.com 或 worker2.domain.com。稍后,当向 www.domain.com/download/123 发出 GET 请求时,我需要 haproxy 将其路由到最初提供具有相同 id (123) 的上传请求的工作人员。基本上,我不能将给定 ID 的上传请求发送到 worker1,然后将相同 ID 的下载请求发送到 worker2。使用 haproxy 可以实现这样的事情吗?

问题2:

假设我正在将文件上传到 www.domain.com/upload,并且 haproxy 将其路由到 worker1.domain.com,那么整个文件会通过 haproxy 吗?也就是说,worker1.domain.com 会收到文件,而 haproxy 是否也会因为它在进行转发而受到相同的带宽影响?

非常感谢你!

4

1 回答 1

0
  1. 此解决方案需要每个工作人员一个后端加上负载平衡后端:
    • haproxy 将所有常规请求发送到通用后端
    • 工作人员在客户端上设置了一个 cookie
    • 随后的请求通过检查 cookie(使用 hdr_sub(Cookie))发送到特定于 worker 的后端,类似于 ``use_backend worker1 if { hdr_sub(Cookie) SRV=1 }
  2. 是的,整个文件通过 haproxy。您可以让工作人员直接将客户端重定向到工作人员,在这种情况下,客户端将继续使用工作人员。但是,如果工人出现故障,客户将无法找到其他工人。根据您的用例,使用 haproxy 代理整个文件不是问题,它非常高效。

您也许可以使用表格进行后端选择,但我不确定如何。不过,您可以将内容存储在后端的表中并在前端读取它们。

于 2012-01-31T17:19:11.537 回答