HA Proxy - roundrobin vs lowconn

6

Existe alguma sugestão sobre quando devo usar roundrobin & quando devo usar leastconn ?

Estou usando roundrobin atualmente e observei que o carregamento do meu servidor de back-end não é de distribuição uniforme. É claro que pode haver outro problema, mas queremos dar uma chance ao leastconn , mas como é um servidor de missão crítica, quero consultar outra experiência antes de fazer as alterações.

Alguma ideia para partilhar?

    
por Ryan 12.12.2012 / 17:59

2 respostas

10

Eu não experimentei o lessconn, mas o meu entendimento é que o caso de uso típico de leastconn é quando você está balanceando a carga de algo que pode ter conexões de longa duração. A razão para isto é que o foco de fiabilidade na garantia de concorrência equilibrada onde o robin de estrada vai fornecer uma taxa de chegada mais equilibrada . Se essa distinção não estiver clara, veja minha resposta sobre a diferença .

Quando você diz que a carga não é distribuída uniformemente, pode ajudar a definir "load" um pouco melhor. Se você quer dizer recursos do servidor, sugiro identificar exatamente o que está causando o aumento de carga (ou seja, certos tipos de conexões) e trabalhar de trás para frente a partir daí.

    
por 12.12.2012 / 19:03
1

Depende do que é o protocolo e o caso de uso para balancear. Para qualquer coisa em que a quantidade de conexões esteja correlacionada com o carregamento / uso, é melhor usar leastconn . Devido ao modo como redes e aplicativos funcionam, é sempre verdade e você é melhor usar leastconn por padrão.

Áreas de trabalho remotas RDP / X11 / Jump Hosts

Por exemplo, uma empresa possui um pool de desktops remotos aos quais os funcionários se conectam. Você gostaria que os funcionários fossem distribuídos de maneira uniforme nos desktops.

O número de conexões ativas nesse caso de uso é aproximadamente "quantos funcionários estão usando essa área de trabalho agora". O host com menos conexões tem menos funcionários usando e é provavelmente o menos carregado. Use "leastconn" nessas circunstâncias, ele distribui a carga uniformemente com a quantidade de usuários.

Um balanceador de carga ideal deve estar ciente da carga da área de trabalho remota. Quantos usuários? Quantos aplicativos? Quanta memória e CPU consumida? Existem soluções comerciais dedicadas a desktops remotos (Microsoft / Citrix / etc ...), elas normalmente medem essas métricas para espalhar o uso muito bem. O HAProxy é um balanceador de carga de rede simples e não pode ser melhor do que contar as conexões com leastconn .

HTTP / HTTPS

Com HTTP, uma conexão ativa significa que o servidor está ocupado processando uma solicitação. Conexões são diretamente proporcionais à carga. Você deseja selecionar o servidor com a menor quantidade de conexões ativas (solicitações em andamento). Use leastconn para o tráfego HTTP (S).

Imagine um cenário com dois servidores HTTP, em que um servidor é mais lento para processar solicitações (talvez esteja sobrecarregado, talvez tenha hardware mais antigo).

roundrobin distribuirá pedidos pela metade entre os dois servidores. É muito ineficiente, o servidor mais rápido deve levar mais. Pior ainda, o servidor mais lento pode ser sobrecarregado, ele ficará ainda mais lento à medida que mais solicitações forem recebidas e poderá começar a descartar solicitações a qualquer momento. Você não quer isso.

leastconn detectaria que os servidores são desiguais. O servidor mais lento mantém as conexões por mais tempo, ele tem uma contagem de conexões mais alta. leastconn considera isso e prefere o outro servidor.

Na minha experiência, incluindo funções em que eu estava fazendo exclusivamente testes de desempenho para sites moderados a grandes. leastconn pode ser 300% tão eficiente quanto roundrobin para HTTP (S). roundrobin não distribui a conexão de forma justa e causará instabilidade em alta carga.

Solicitação de DNS

(Vamos ignorar que o HAProxy não suporta UDP e o UDP tem menos conexão).

Um último exemplo. DNS é um protocolo simples. Os clientes enviam uma única mensagem UDP para solicitar um domínio e o servidor DNS responde em uma única mensagem.

Nesse caso, não há realmente uma conexão. Mesmo se houvesse, seria instantaneamente fechado (teoricamente).

Não faria sentido contar as conexões nessas circunstâncias, não é ideal para leastconn . Um simples roundrobin pode distribuir mensagens.

Um mal-entendido comum

As pessoas às vezes acreditam que não devem usar leastconn para conexões de curta duração (semelhante ao último exemplo). Até mesmo a documentação do HAProxy é enganosa sobre isso.

leastconn
          Use of this algorithm is recommended where very long sessions are
          expected, such as LDAP, SQL, TSE, etc... but is not very well
          suited for protocols using short sessions such as HTTP.
          [misleading advice, should ignore it]

No mundo real, short connections não é uma coisa.

Os aplicativos são criados sobre o TCP. As mensagens são entregues e geralmente processadas em ordem. Quando um servidor está lento ou sobrecarregado, as conexões "curtas" se tornam mais longas. Se houver (mais) conexões, provavelmente haverá algum trabalho (mais) sendo feito. A contagem de conexões e a duração da conexão variam e têm significado.

Pense em um servidor HTTP básico. Alguns ativos demoram alguns milissegundos, algumas chamadas de API demoram alguns segundos, uma página pode levar algum tempo para ser carregada com qualquer quantidade de solicitações dentro dele, etc. As solicitações não são de curta duração, acompanham o que está sendo processado em qual servidor. leastconn entende a atividade em andamento e ajusta a distribuição, exatamente o que você quer de um balanceador de carga.

    
por 15.08.2018 / 14:35