# Métodos de balanceamento

Um balanceador que tem vários servidores com o mesmo conteúdo escolhe um deles para cada requisição. O método de balanceamento é a regra que ele usa para escolher. O peso e a função de cada servidor alteram o resultado, e um servidor que você desativa não participa. Com [Load Balancer](/pt-br/documentacao/plataforma/connectors/#load-balancer) ativado, um connector do tipo `http` faz essa escolha entre os seus endereços, na etapa descrita em [Como Connectors funciona](/pt-br/documentacao/plataforma/connectors/como-funciona/#load-balancer).

As seções tratam do método de balanceamento, do peso, da função do servidor, das novas tentativas e timeouts e dos endereços ativos, nessa ordem.

---

## Método de balanceamento

O método de balanceamento decide qual endereço do connector recebe cada requisição. Load Balancer escolhe entre os endereços de acordo com o método e com o peso de cada endereço. Um connector com Load Balancer ativado tem até 15 endereços. Cada um recebe os mesmos campos do endereço único de um connector sem Load Balancer. Para esse limite, consulte [Limites de Connectors](/pt-br/documentacao/plataforma/connectors/limites/#load-balancer).

Você escolhe um de três métodos: *Round Robin*, *Least Connections* ou *IP Hash* no campo **Method** do Azion Console, e `round_robin`, `least_conn` ou `ip_hash` na API. O padrão é `round_robin`. Esses três formam a lista completa, e nenhum deles direciona uma requisição pela localização do visitante ou por uma latência medida. As regras ainda decidem quais requisições chegam ao connector, então um critério de regra, como o caminho, decide quais requisições são balanceadas.

A configuração de Load Balancer não tem ajuste de health check. Ela não tem sonda, protocolo de sonda nem intervalo a definir. Os campos dela são o método, **Max Retries**, **Connection Timeout** e **Read/Write Timeout**, e cada endereço acrescenta os próprios **Server Role**, **Weight** e **Active**.

### Round Robin

*Round Robin* entrega as requisições aos endereços em rodízio, então cada endereço recebe a sua vez. Ele conta requisições e ignora a rapidez com que cada endereço responde. Cada endereço recebe uma parte do rodízio proporcional ao seu peso, e com pesos iguais as partes são iguais.

O custo é que um endereço lento continua recebendo a sua vez. As requisições dele demoram mais para terminar, então ele pode manter mais conexões em paralelo do que um endereço rápido, enquanto o número de requisições continua igual. Use *Round Robin* quando os endereços têm capacidade semelhante e as requisições levam um tempo semelhante.

### Least Connections

*Least Connections* acompanha as conexões ativas com cada endereço. Ele envia a próxima requisição ao endereço que tem menos conexões. Um endereço lento mantém as conexões abertas por mais tempo, então recebe menos requisições novas, e um endereço rápido atende mais requisições em sequência.

Use *Least Connections* quando os endereços diferem em velocidade, ou quando algumas requisições mantêm uma conexão aberta por muito mais tempo do que outras. Por exemplo, quando um endereço de um par é um servidor menor, esse endereço termina as requisições mais devagar e recebe menos delas.

### IP Hash

*IP Hash* associa cada endereço IP de cliente a um endereço do connector. Toda requisição do mesmo IP de cliente chega ao mesmo endereço, então um visitante continua alcançando o mesmo servidor de origem entre requisições. Use-o quando a origem guarda estado para cada visitante, como uma sessão mantida na memória de um servidor.

A associação segue o endereço IP do cliente, não o visitante. Um visitante cujo endereço IP muda, como um celular que passa de uma rede para outra, pode chegar a um endereço diferente. *IP Hash* também recusa endereços de backup. Um connector com `ip_hash` e um endereço cujo `server_role` é `backup` é recusado com `28005`: `Backup addresses are not allowed when using 'ip_hash' as load balance method.` Azion Console mostra `Backup role is not available when the load balancing method is IP Hash.`

---

## Peso

O peso define a parte das requisições que um endereço recebe, em relação aos outros endereços do connector. Um peso maior destina mais tráfego ao endereço. O peso é um número inteiro de 1 a 100, e o padrão é `1`. Endereços deixados no padrão dividem o tráfego igualmente.

Por exemplo, com dois endereços primários de pesos 3 e 1, o primeiro deve receber três requisições para cada uma que o segundo recebe. Use isso quando um servidor suporta mais carga do que outro, como um servidor maior ao lado de um menor.

O peso define uma proporção, não uma divisão exata. Cada data center balanceia por conta própria, então o tráfego que um endereço recebe no conjunto dos data centers varia em torno da parte que o peso dele pede. Para saber como o balanceamento por data center molda a divisão, consulte [Como Connectors funciona](/pt-br/documentacao/plataforma/connectors/como-funciona/#load-balancer).

---

## Função do servidor

A função do servidor de um endereço é *Primary* ou *Backup* no Azion Console, e `primary` ou `backup` na API. Todo endereço é `primary`, a menos que você defina outra função.

Load Balancer envia requisições primeiro aos endereços primários, que sempre têm preferência sobre os endereços de backup. Um endereço de backup fica em espera e só recebe requisições quando todos os endereços primários falham. Use um endereço de backup para um servidor que deve ficar fora do tráfego diário, como uma cópia de reserva da origem em outro local.

O custo é capacidade ociosa: um endereço de backup não recebe tráfego enquanto os endereços primários respondem. A função do servidor funciona com *Round Robin* e *Least Connections*. Com *IP Hash*, todo endereço deve ser `primary`, e um endereço `backup` é recusado com `28005`.

---

## Novas tentativas e timeouts

As novas tentativas e os timeouts existem em um connector apenas enquanto Load Balancer está ativado. **Max Retries** define o número de novas tentativas quando uma conexão com a origem falha, de 0 a 20. **Connection Timeout** limita a espera por uma conexão com a origem, em segundos. **Read/Write Timeout** limita a espera por dados em uma conexão já aberta, em segundos.

Os padrões dependem da interface que os define. Na API, uma chave que você deixa de fora da configuração recebe o padrão: `max_retries` `0`, `connection_timeout` `60` e `read_write_timeout` `120`. Quando você ativa **Load Balancer** no Azion Console, o formulário preenche `3`, `30` e `60` em vez disso. Por isso, um connector criado pela API não tenta de novo uma conexão que falhou até que você aumente `max_retries`.

As novas tentativas se aplicam a uma falha de conexão. Cada nova tentativa dá outra chance a uma conexão que falhou, e o cliente espera por todas as tentativas antes de receber uma resposta. Um timeout curto desiste rápido de uma origem lenta, e um timeout longo espera por uma origem que responde devagar por design.

Um connector sem Load Balancer não tem timeout configurável nem ajuste de novas tentativas. Para os padrões da plataforma que se aplicam nesse caso, consulte [Como Connectors funciona](/pt-br/documentacao/plataforma/connectors/como-funciona/#reutilizacao-de-conexoes-e-timeouts). Para cada campo e o seu intervalo, consulte [Configurações de connector](/pt-br/documentacao/plataforma/connectors/configuracoes/#load-balancer).

---

## Endereços ativos

Cada endereço tem um switch **Active**, `active` na API, ativado por padrão. Desative-o para tirar um endereço do rodízio sem excluí-lo, para manutenção ou durante uma interrupção desse servidor. O endereço mantém as suas portas, a sua função e o seu peso, então ativá-lo de novo o restaura como estava.

Um endereço com `active` definido como `false` deixa de receber requisições quando a alteração chega ao data center que atende a requisição. A alteração leva vários minutos para se propagar, e os data centers a aplicam em momentos diferentes. Até que todos os data centers tenham a alteração, algumas requisições ainda podem chegar ao endereço inativo. Mantenha o servidor respondendo até que nenhuma requisição chegue a ele.

Para saber como uma alteração se propaga pela infraestrutura distribuída da Azion, consulte [Como Connectors funciona](/pt-br/documentacao/plataforma/connectors/como-funciona/#propagacao). Para os campos de endereço, consulte [Configurações de connector](/pt-br/documentacao/plataforma/connectors/configuracoes/#enderecos).

---

## Recursos relacionados

- [Configurações de connector](/pt-br/documentacao/plataforma/connectors/configuracoes.md#load-balancer): Cada campo de Load Balancer, com os seus valores, os padrões em cada interface e os campos de endereço com que ele funciona.
- [Limites de Connectors](/pt-br/documentacao/plataforma/connectors/limites.md#load-balancer): Os limites de endereços, peso, novas tentativas e timeouts, com o erro que cada um retorna.
- [Primeiros passos com Load Balancer](/pt-br/documentacao/plataforma/connectors/load-balancer/primeiros-passos.md): Ative Load Balancer em um connector com dois endereços e envie requisições por ele.
- [Balanceie o tráfego entre múltiplas origens](/pt-br/documentacao/guias/performance-e-confiabilidade/disponibilidade/configure-multiplas-origens.md): O procedimento que adiciona endereços a um connector e define o método, o peso e a função do servidor de cada um.
