Cada navegador tem seu próprio método de lidar com o DNS round-robin. Hoje, passei algum tempo pesquisando esse problema e continuarei a atualizar minha resposta à medida que encontro provas de implementação que limitarão minhas respostas a navegadores que expõem seu comportamento .
Google Chrome
O Google Chrome (v58 usado) solicitará todas as entradas de host de um endereço (A, AAAA, CNAME) e as colocará em uma matriz ( address_list ). O Chrome tentará então abrir um soquete em cada endereço IP em ordem do primeiro ao último, o chrome não tentará o IP mais rápido ou mais próximo, ele assume que o primeiro IP (fornecido pelos seus resolvedores de dns upstream) é o melhor IP. Em meus testes, bind e windows dns servers dão uma ordem diferente de IPs por pesquisa, dando o que parece ser 50/50 dividido em largura de banda para cada IP. Essa funcionalidade é exposta em chrome://net-internals/#events&q=type:SOCKET%20is:active
Curl (libcurl / 7.54.0)
O curl também tem essa função de failover, mas o --connect-timeout
é muito maior que o padrão no chrome, o cromo falha imediatamente, o Curl não. Se você usar libcurl e quiser sobreviver a uma instância de dns round-robin em que um IP falha (funciona no chrome, mas não no código), certifique-se de especificar esse valor abaixo.
DEFAULT_CONNECT_TIMEOUT: 0 me fez pensar que isso não era possível com o curl .
* After 149990ms connect time, move on!
Nos dois navegadores , o IP não estava sticky , eles seguiram o TTL dado no DNS e uma vez que ttl expirou (o chrome mantém isso internamente, pergunta o curl em cada solicitação ), a seleção ip é realizada a cada vez, conforme descrito acima.
O que isso significa? O DNS-RR está ok para alguns sistemas, mas não foi projetado para failover. Você deve esperar que todos os resultados da procura de DNS sejam (uma fonte de verdade) válidos e estejam disponíveis para servir o tráfego. Há muitas maneiras de garantir a disponibilidade de IP, como IPs flutuantes virtuais, truques de BGP / Roteamento, etc. Use-os .
Todos os testes realizados no ambiente somente IPv4 retornarão com resultados de pilha dupla, uma vez que haja infraestrutura suficiente disponível para teste.
Eu especulo que essas mudanças são um efeito colateral do IPv6-Fallback RFC Olhos Felizes
Atualizar Uma consideração útil, o DNS RR pode apenas ajudar com o balanceamento de carga, não com falhas no aplicativo, se um de seus nós tiver um 503, você servirá 40-60% se seu tráfego for 503s. A suposição é feita de que todos os IPs listados são terminais de trabalho válidos se alcançável