Cada navegador tem seu próprio método de lidar com DNS round-robin. Hoje passo algum tempo pesquisando esse problema e continuarei atualizando minha resposta à medida que encontrar provas de implementação que limitarão minhas respostas aos navegadores que expõem seu comportamento.
Google Chrome
O Google Chrome (v58 usado) solicitará todas as entradas do host para um endereço (A, AAAA, CNAME) e as colocará em uma matriz ( address_list ). O Chrome tentará abrir um soquete em cada endereço IP, da ordem do primeiro ao último, o Chrome não tentará o IP mais rápido ou o mais próximo; ele assume o primeiro IP (fornecido pelos seus resolvedores de DNS upstream) como o melhor IP. Nos meus testes, os servidores bind e windows dns fornecem 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 nochrome://net-internals/#events&q=type:SOCKET%20is:active
Ondulação (libcurl / 7.54.0)
O Curl também possui essa função de failover, mas --connect-timeout
é muito mais longo que o padrão no chrome, o chrome falha imediatamente, o Curl não. Se você usa libcurl e deseja sobreviver a uma instância de round-robin dns em que um IP falha (funciona no chrome, mas não no código), certifique-se de especificar esse valor mais baixo.
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 era pegajoso , eles seguiram o TTL fornecido no DNS e, uma vez que o ttl expirou (o chrome mantém isso internamente, o curl solicita cada solicitação), a seleção de ip é realizada sempre que descrito acima.
O que isto significa? O DNS-RR é bom para alguns sistemas, mas não foi projetado para failover. Você deve esperar que todos os resultados da procura do DNS sejam (uma fonte de verdade) válidos e 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 assim que houver infraestrutura suficiente disponível para teste.
Especulo que essas mudanças são um efeito colateral dos IPv6-Fallback RFC Happy Eyeballs
Atualização
Uma consideração útil, o RR DNS só pode ajudar no balanceamento de carga, não nas falhas de aplicativos, se um de nossos nós tiver 503, você servirá 40-60% se o tráfego estiver 503s. Supõe-se que todos os IPs listados sejam terminais de trabalho válidos, se alcançáveis