我只是想弄清楚 HaProxy 中前端、后端和服务器之间的排队/超时。我仍在学习 TCP、套接字、连接等,所以如果这些问题没有意义,请原谅我。我只是想确认/澄清以下几点:
客户端连接和前端负载平衡
Haproxy 本身有一个全球的 maxconn
限制(我称之为gmc
)。据我所知,这gmc
是传入来自客户端的连接(路由到前端)。
每个前端都有自己的maxconn
设置(我称之为femc
)。
如果我gmc
的40,我有两个前端,每个前端femc
都有10我得到了50一次发送请求。
问题:
- 是否确实会接受 20 个(每个前端 10 个),积压 20 个(每个前端 10 个),而剩下的 10 个会在代理级别全局积压?
- 是否存在全局待办事项和前端待办事项?或者该
backlog
参数仅与前端相关。 - 如果存在全局积压,这是否仅仅是基于可用文件描述符数量的特定操作系统?
- 如果我们将最大积压设置为 1,剩余的请求会怎样?它们会被立即拒绝吗?(我想这取决于之前的答案)
- 全局 maxconn 是否也适用于后端连接?它是整个系统所有连接的上限吗?
服务器连接和请求排队
继续上面的例子,我们将为每个前端添加一个后端,每个后端都有两个服务器,每个服务器maxconn
的2each ( smc
) 和 maxqueue 为1(smq
)。
因此,每个后端可以同时处理 4 个请求(每个服务器 2 个),并将排队 2 个请求(每个服务器 1 个),每个后端总共 6 个请求
问题:
- 前端收到的额外 4 个请求会怎样?它们会在那里“排队”吗?前端是否有控制此排队的参数?
- 后端是否有自己的不可配置的队列?(maxqueue 似乎仅处于服务器级别)
我之所以问这些问题,是因为我们有一个旧服务器,其请求属性非常复杂。有些可能发生在10ms
,有些则10s
发生在 。我们目前对服务器连接没有任何限制,我们发现我们的一些 Web 服务器的积压被非常慢的请求填满,而其他服务器几乎处于空闲状态。最终,我试图让这种情况稍微平息一些。
对上述问题的任何答案都将非常有帮助!