3 puntos por GN⁺ 2024-10-27 | 1 comentarios | Compartir por WhatsApp

Entender el DNS round robin

  • ¿Qué es el DNS round robin?

    • En general, cuando un sitio web se sirve desde un VPS, se agrega un solo registro A en el panel de control del proveedor de DNS.
    • En el DNS round robin, se asignan varios servidores al mismo subdominio para distribuir la carga entre varios servidores y detectar automáticamente los servidores fuera de línea para elegir los que están en línea.
    • Ofrece una solución simple y elegante sin usar un balanceador de carga, y no tiene costo.
  • ¿Cómo funciona en teoría?

    • Según el RFC 8305 "Happy Eyeballs", el cliente debe ordenar las direcciones antes de conectarse.
    • Verifica si los servidores están en línea o fuera de línea y ordena los servidores en línea según el tiempo de ping.
  • ¿Cómo funciona en la práctica?

    • Se crean 3 VPS en Estados Unidos, Europa y Singapur, y se configuran en Cloudflare 3 registros A con proxy y sin proxy.
    • Cada servidor entrega una imagen de color y el nombre del host.

Comportamiento del cliente al elegir servidor

  • Chrome

    • Elige de forma aleatoria en todas las ubicaciones, pero una vez que elige, se queda fijo.
    • Vuelve a evaluar después de unas horas.
  • Firefox

    • Similar a Chrome: elige aleatoriamente y luego se queda fijo.
  • Safari

    • Siempre elige correctamente el servidor más cercano.
  • curl

    • Al principio puede no acertar, pero en la segunda ejecución corrige y usa el servidor más cercano.
  • Cloudflare

    • Elige una ubicación aleatoria según la IP del cliente y luego se queda fija.

Comportamiento del cliente cuando hay servidores parcialmente fuera de línea

  • Todos los clientes detectan los servidores fuera de línea y eligen un servidor alternativo.
  • Cloudflare no logra detectar los servidores fuera de línea, y si el servidor elegido está fuera de línea, lo sirve como fuera de línea.

Mejoras para Cloudflare

  1. Debería detectar los servidores fuera de línea.
  2. Necesita una función para elegir el servidor con la menor latencia.

Resumen de GN⁺

  • El DNS round robin es una forma de distribuir la carga entre varios servidores y puede implementarse de manera simple sin usar un balanceador de carga.
  • Los navegadores y clientes varían en la forma en que eligen servidores; en particular, Safari suele elegir bien el servidor más cercano.
  • En el caso de Cloudflare, existe el problema de que no detecta los servidores fuera de línea, y esto necesita mejorarse.
  • Este artículo es útil para entender cómo funciona el DNS round robin y puede resultar interesante para explorar las diferencias entre algoritmos de selección de servidores.

1 comentarios

 
GN⁺ 2024-10-27
Comentarios de Hacker News
  • Se le pidió al equipo de DNS una explicación de la situación actual y la compartirán cuando respondan. El código cambia con frecuencia, así que es difícil saber con precisión cuál es el estado actual. El mantenimiento de la conexión entre la IP del cliente y los servidores backend podría ser la causa del problema.

  • El balanceo de carga por DNS puede causar problemas complejos. El cliente HTTP2 de golang puede presentar problemas al usar RR DNS. En algunos casos, el cliente no descubre nuevos servidores.

    • Si todos los servidores backend se caen, el cliente queda fijado al primer servidor al que se conectó y no migra a otro servidor.
    • En grpc-go ocurre un problema similar, y en el lado del servidor se puede configurar MAX_CONNECTION_AGE para desconectar periódicamente a los clientes.
  • Falta una solución estándar para el descubrimiento de servicios. La mejor opción podría ser implementar un balanceador de carga basado en solicitudes y usar una IP virtual para que el balanceador realice verificaciones de estado.

  • Los registros DNS SRV fueron una solución inicial que permitía asignar prioridad a todos los servicios, pero por razones políticas no se usan en clientes HTTP. Los nuevos registros DNS HTTPS y SVCB se proponen como una nueva solución para balanceo de carga.

  • Cuando un servidor está fuera de línea, el cliente pasa a la siguiente IP si la conexión es rechazada. Pero en la práctica, el servidor puede no responder o quedarse en silencio después de conectarse. Entonces se termina dependiendo del timeout del cliente.

  • La confiabilidad se decide del lado del cliente. Algunos sistemas pueden devolver siempre la dirección IP más baja, lo que puede causar problemas. DNS-RR no es un balanceador de carga; un balanceador de carga es una mejor solución.

  • Escribieron un decodificador en Perl y sostienen que todo debería estar hecho en Perl.

  • RR-DNS solo es útil para balanceo de carga y no detecta automáticamente la disponibilidad de los servidores. Hay que agregar funciones inteligentes del lado del cliente.

  • Si un servidor se cae, al tener direcciones IP distribuidas globalmente la gente puede seguir conectándose.

  • En Amazon, en la década de 2000, usaban DNS round robin para hosts on-site. En ese momento era la forma más rápida de hacer balanceo de carga. Sin embargo, el mayor cuello de botella era el Wi‑Fi.

  • Se menciona Cloudflare Load Balancing, aunque no se hicieron pruebas reales. Cloudflare puede detectar automáticamente servidores fuera de línea y redirigir a otros servidores.