Entendendo o DNS round-robin
(blog.hyperknot.com)Entendendo o DNS round-robin
-
O que é DNS round-robin?
- Em geral, ao disponibilizar um site em uma VPS, adiciona-se um único registro A no painel de controle do provedor de DNS.
- No DNS round-robin, vários servidores são atribuídos ao mesmo subdomínio para distribuir a carga entre eles e detectar automaticamente servidores offline, selecionando os que estão online.
- Oferece uma solução simples e elegante sem usar um load balancer, e sem custo.
-
Como isso funciona em teoria?
- De acordo com a RFC 8305 "Happy Eyeballs", o cliente deve ordenar os endereços antes de se conectar.
- Ele verifica se os servidores estão online ou offline e ordena os servidores online de acordo com o tempo de ping.
-
Como isso funciona na prática?
- Foram criadas 3 VPS nos Estados Unidos, Europa e Singapura, e no Cloudflare foram criados 3 registros A com proxy e sem proxy.
- Cada servidor fornece uma imagem colorida e o nome do host.
Comportamento do cliente na escolha do servidor
-
Chrome
- Escolhe aleatoriamente em todos os locais, mas depois da escolha fica fixo.
- Reavalia após algumas horas.
-
Firefox
- Assim como o Chrome, escolhe aleatoriamente e depois fica fixo.
-
Safari
- Sempre escolhe corretamente o servidor mais próximo.
-
curl
- No início pode escolher incorretamente, mas na segunda execução corrige para o servidor mais próximo.
-
Cloudflare
- Escolhe uma localização aleatória com base no IP do cliente e depois fica fixo.
Comportamento do cliente quando há servidores parcialmente offline
- Todos os clientes detectam servidores offline e escolhem um servidor alternativo.
- O Cloudflare não consegue detectar servidores offline, e se o servidor selecionado estiver offline, o serviço é entregue como offline.
Melhorias no Cloudflare
- Deve detectar servidores offline.
- É necessário um recurso para selecionar o servidor com a menor latência.
Resumo do GN⁺
- O DNS round-robin é uma forma de distribuir a carga entre vários servidores e pode ser implementado de maneira simples sem usar um load balancer.
- Os navegadores e clientes variam na forma como escolhem o servidor, e o Safari em especial escolhe bem o servidor mais próximo.
- No caso do Cloudflare, há o problema de não conseguir detectar servidores offline, e isso precisa ser melhorado.
- Este texto é útil para entender como o DNS round-robin funciona e pode ser interessante para explorar as diferenças nos algoritmos de seleção de servidores.
1 comentários
Comentários do Hacker News
Foi solicitado à equipe de DNS uma explicação sobre a situação atual, e a resposta será compartilhada quando chegar. O código muda com frequência, então é difícil saber exatamente o estado atual. A causa do problema pode ser a persistência da conexão entre o IP do cliente e o servidor de backend.
O balanceamento de carga via DNS pode causar problemas complexos. Clientes HTTP2 em golang podem apresentar problemas ao usar RR DNS. Em alguns casos, o cliente não consegue descobrir novos servidores.
MAX_CONNECTION_AGEpara desconectar os clientes periodicamente.Falta uma solução padrão para descoberta de serviços. A melhor abordagem pode ser implementar um balanceador de carga baseado em requisições e usar um IP virtual para que o balanceador faça verificações de integridade.
Os registros DNS SRV foram uma solução inicial que permitia definir prioridade para cada serviço, mas não são usados por clientes HTTP por razões políticas. Os novos registros DNS HTTPS e SVCB são propostos como uma nova solução para balanceamento de carga.
Quando um servidor fica offline, o cliente passa para o próximo IP se a conexão for recusada. Porém, na prática, o servidor pode simplesmente não responder ou ficar em silêncio após a conexão. Nesse caso, tudo depende do timeout do cliente.
A confiabilidade é determinada no lado do cliente. Alguns sistemas podem sempre retornar o menor endereço IP, o que pode causar problemas. DNS-RR não é um balanceador de carga; um balanceador de carga é uma solução melhor.
Alguém escreveu um decodificador em Perl e insiste que tudo deveria ser feito em Perl.
RR-DNS só é útil para balanceamento de carga e não detecta automaticamente a disponibilidade dos servidores. É preciso adicionar inteligência no lado do cliente.
Quando um servidor cai, como há endereços IP distribuídos globalmente, as pessoas ainda conseguem se conectar.
Na Amazon dos anos 2000, round-robin DNS era usado para hosts on-site. Na época, era a forma mais rápida de balanceamento de carga. Porém, o Wi-Fi era o maior gargalo.
Há uma menção ao Cloudflare Load Balancing, mas sem testes reais. O Cloudflare consegue detectar automaticamente servidores offline e alternar para outros servidores.