Para sua primeira pergunta: Sim, na configuração HAProxy normal, todo o tráfego flui pelo balanceador de carga quando chega aos seus servidores e quando sai novamente dos servidores para os clientes . Isso é mais ou menos sempre assim com todos os balanceadores de carga, já que eles geralmente são implementados como proxies HTTP ou caixas de roteamento de NAT / nível de IP. A exceção é quando "retorno direto do servidor" (DSR) é usado, veja esta explicação do inlab.com sobre qual DSR é .
My load balancers and backends are located in different parts of the US
Ehh, por quê? Se você estiver usando o roteamento de carga geográfica ou multicast, não esperaria que você fizesse essas perguntas. No caso de uso normal, você deve ter seus servidores no mesmo rack e em uma LAN de baixa latência, livre de colisões. Isso tornaria a vida mais fácil para o seu software de servidor e proporcionaria mais desempenho de seus servidores, além de características de desempenho mais consistentes e confiáveis ...
A configuração canônica do software que você está usando seria algo assim:
nginx (para compactação HTTP) - > Cache de verniz (para armazenamento em cache) - > Balanceador de carga de nível HTTP (HAProxy ou nginx ou o built-in do Varnish) - > servidores da Web.
Opcionalmente, se sua carga for alta, você poderá ter vários servidores nginx ou verniz na frente; mas isso é para sites com milhares de solicitações por segundo.
Para sua segunda pergunta Quando você pergunta "mais eficiente", estou em dúvida sobre o que você quer dizer. Mais eficiente como em menor tráfego entre os servidores? Marginalmente, como o cache de verniz impede que o tráfego avance mais. Mais eficiente em relação ao uso da CPU - você pode simplesmente embaralhar os serviços para servidores físicos menos carregados, contanto que você mantenha a estrutura lógica da mesma forma.