(Abaixo está um cenário hipotético e essa pergunta me veio à mente quando descobri as complexidades do balanceamento de carga do gRPC e como ele não é eficiente devido à conexão TCP de longa duração)
Imagine que há um cliente HTTP que mantém uma única conexão TCP de longa duração para fazer solicitações HTTP 1.1 para um serviço de API localizado atrás do proxy HA. Existem vários servidores redundantes como parte do serviço e desejo equilibrar todas as solicitações na mesma conexão TCP em diferentes servidores upstream. Algo assim é possível?
Entendo que o cliente pode ter várias conexões abertas ao LB o que ajudará a causa.
Mas eu estou querendo saber se é possível fazer isso diretamente usando alguma configuração de proxy HA. Se não, por que esse recurso está faltando? É devido a algum tipo de limitação de protocolo de rede/HTTP? Ou esse recurso nunca foi necessário porque existem outras soluções alternativas?
Vamos supor que o TLS seja encerrado no proxy HA para que ele possa fazer o roteamento L7. Além disso, o HAProxy é apenas um exemplo, qualquer outro LB / Proxies como Envoy, Nginx que seja capaz desse recurso?
Boa pergunta.
Com um balanceador de carga HTTP(S) de camada 7, geralmente você obtém um balanceador de carga estilo "proxy reverso". Nesse caso, você obtém (pelo menos) duas conexões independentes; a conexão TCP com o cliente é encerrada no proxy reverso e o proxy reverso é estabelecido e mantém sua própria conexão (pools) com os servidores back-end.
O cliente troca mensagens do protocolo HTTP(S) com o proxy reverso e, posteriormente, o proxy reverso troca suas próprias mensagens do protocolo HTTP(S) com os servidores back-end.
Em tal configuração, a priori, não há razão para que as solicitações HTTP(S) subsequentes do mesmo cliente na mesma conexão TCP não possam ter balanceamento de carga em vários back-ends.
Esteja avisado de que considerações especiais podem ser aplicadas quando você tiver que lidar com um dos muitos outros protocolos que são encapsulados em HTTP(S). E independentemente disso, muitas vezes a configuração preferida é alguma forma de persistência/fixação de sessão, garantindo que as solicitações subsequentes do mesmo cliente vão para o mesmo servidor de back-end.
Tudo depende claro de como você configura e sintoniza seu loadbalancer...
https://docs.haproxy.org/2.7/configuration.html#4
e muitas opções mais complicadas.