3 pontos por GN⁺ 2024-10-27 | 1 comentários | Compartilhar no WhatsApp

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

  1. Deve detectar servidores offline.
  2. É 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

 
GN⁺ 2024-10-27
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.

    • Se todos os servidores de backend caírem, o cliente fica preso ao primeiro servidor ao qual se conectou e não migra para outro.
    • Um problema semelhante também ocorre no grpc-go, e no lado do servidor é possível definir MAX_CONNECTION_AGE para 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.