假设有人向 api.example.com/a/b 发出 HTTP get/post 请求
现在假设我已经设置了十台服务器作为后端服务器。
我想要一个代理充当负载均衡器,并且在请求期间,握手响应:
apiX.example.com/a/b
其中 X 是 1..10 范围内的数字
如果HAProxy
这不是合适的工具,您会建议什么?
基于硬件的负载均衡器有哪些好处?
更新
一般来说,据我了解,代理HAProxy
会接收请求,并将其代理到后端服务器,等待响应,然后将答案发送给客户端。客户端不知道哪个后端服务器响应了他们的请求。
现在,如果我有十台后端服务器,那么该HAProxy
服务器将会超载,因为它必须处理 10 台服务器的流量/带宽的吞吐量,因为所有请求和响应都要经过该HAProxy
服务器。
我很好奇是否HAProxy
可以将请求交给特定的后端服务器,然后客户端将直接与后端服务器对话(后端将在 api3.example.com 或 api[1..10].example.com 上公开访问)
客户端将只发出一个请求,因此会话将只持续一个应用程序,其中客户端发出 HTTP get/post 请求并等待响应,就是这样。
答案1
这可能可行也可能不可行,具体取决于您的设置。如果您的客户端配置为使用代理服务器(即 HAproxy)或您始终将所有请求透明地代理到 HAproxy,那么显然您的想法无法实现。
另一方面,如果名称 api.example.com 指向 Haproxy 主机本身。您可以使用它redirect
向您的客户端发送 302 HTTP 代码。重定向应指向后端服务器之一。然后,您需要找到一种方法,redirect
根据某些标准对不同的后端服务器使用不同的语句。您可以选择随机变化的内容,例如源端口或源 IP。
答案2
您是否考虑过让您的后端服务器在响应中附加一个带有服务器 ID/主机名的标头?
更新于 2012 年 10 月 8 日:HAProxy 1.4.20 添加了一个选项 http-send-name-header,它将后端服务器添加为响应中的主机名。