Cada navegador tiene su propio método de manejo de DNS round-robin, hoy he pasado algún tiempo investigando este problema y continuaré actualizando mi respuesta a medida que encuentre pruebas de implementación que limitarán mis respuestas a los navegadores que exponen su comportamiento.
Google Chrome
Google Chrome (v58 utilizado) solicitará todas las entradas de host para una dirección (A, AAAA, CNAME) y las colocará en una matriz ( dirección_lista ). Chrome intentará abrir un socket en cada dirección IP en orden de principio a fin, Chrome no intentará la IP más rápida o más cercana, se supone que la primera IP (dada por sus solucionadores de dns ascendentes) es la mejor IP. En mis pruebas, los servidores bind y windows dns dan un orden diferente de IP por búsqueda, dando lo que parece una división 50/50 en ancho de banda para cada IP. Esta funcionalidad está expuesta enchrome://net-internals/#events&q=type:SOCKET%20is:active
Rizo (libcurl / 7.54.0)
Curl también tiene esta función de conmutación por error, pero --connect-timeout
es mucho más larga que la predeterminada en Chrome, Chrome falla inmediatamente, Curl no. Si usa libcurl y desea sobrevivir a una instancia dns round-robin donde falla una IP (funciona en Chrome pero no en código) asegúrese de especificar este valor más bajo.
DEFAULT_CONNECT_TIMEOUT: 0 me hizo pensar que esto no era posible con curl.
* After 149990ms connect time, move on!
En ambos navegadores , la IP no era pegajosa , siguieron el TTL dado en DNS y una vez que ttl expiró (Chrome mantiene esto internamente, curl pregunta en cada solicitud), la selección de ip se realiza cada vez como se describe anteriormente.
¿Qué significa esto? DNS-RR está bien para algunos sistemas, pero no está diseñado para la conmutación por error. Debe esperar que todos los resultados de la búsqueda de DNS sean (una fuente de verdad) válidos y disponibles para atender el tráfico. Hay muchas formas de garantizar la disponibilidad de IP, como IP flotantes virtuales, trucos BGP / enrutamiento, etc. Úselos .
Todas las pruebas realizadas en un entorno solo de IPv4, regresarán con resultados de doble pila una vez que haya suficiente infraestructura disponible para probar.
Especulo que estos cambios son un efecto secundario de los globos oculares felices IPv6-Fallback RFC
Actualización
Una consideración útil, RR DNS solo puede ayudar con el equilibrio de carga, no con fallas de la aplicación, si uno de sus nodos tiene un 503, servirá 40-60% si su tráfico es 503. Se supone que todas las IP enumeradas son puntos finales de trabajo válidos si se puede alcanzar