
Las latencias de red tienen un impacto significativo en el rendimiento de aplicaciones o servicios que interactúan con la red. Cuanto menores sean las latencias, mayor será el rendimiento. Esto es válido para cualquier servicio de red, desde un simple sitio web hasta una base de datos o un almacenamiento en red.
Un buen ejemplo es el sistema de nombres de dominio (DNS). El DNS es, por naturaleza, un sistema distribuido, cuyos nodos raíz están esparcidos por todo el planeta. Para acceder a cualquier sitio web, primero es necesario obtener su dirección IP.
No voy a describir todo el proceso de recorrido recursivo por el "árbol" de zonas de dominio, me limitaré a mencionar que para convertir un dominio en una dirección IP, necesitamos un resolvedor DNS que realice todo este trabajo por nosotros.
Entonces, ¿dónde conseguir la dirección del resolvedor DNS?
- El proveedor de Internet proporciona la dirección de su resolvedor DNS.
- Buscar en Internet la dirección de un resolvedor público.
- Levantar tu propio resolvedor o utilizar el que está integrado en tu router doméstico.
Cualquiera de estas opciones permitirá disfrutar de una navegación sin preocupaciones por la web, pero si necesitas convertir una gran cantidad de dominios a IP, debes elegir el resolvedor con más cuidado.
Como ya mencioné, además del resolvedor del proveedor de Internet, existen numerosas direcciones públicas; por ejemplo, se puede consultar esta lista. Algunas de ellas pueden resultar mucho más preferibles, ya que tienen mejor conectividad de red que el "resolvedor predeterminado".
Cuando la lista es pequeña, es fácil "pinguearla" manualmente y comparar los tiempos de latencia, pero si tomas al menos la lista mencionada anteriormente, esta tarea se vuelve bastante desagradable.
Por eso, para facilitar esta tarea, con el síndrome del impostor, he esbozado en Go un proof-of-concept de mi idea llamada .
Como ejemplo, no revisaré toda la lista de resolvedores, sino que me limitaré a los más populares.
$ get-closer ping -f dnsresolver.txt -b=0 --count=10
Hosts más cercanos:
1.0.0.1 [3.4582ms]
8.8.8.8 [6.7545ms]
1.1.1.1 [12.6773ms]
8.8.4.4 [16.6361ms]
9.9.9.9 [40.0525ms]
En su momento, cuando elegí un resolvedor, solo me limité a comprobar las direcciones principales (1.1.1.1, 8.8.8.8, 9.9.9.9); son tan atractivas, y qué esperar de las direcciones de reserva que no son tan estéticas.
Pero dado que hay una forma automatizada de comparar las latencias, ¿por qué no ampliar la lista…
Como mostró la prueba, me conviene más la dirección 'de respaldo' de Cloudflare, ya que está conectada a spb-ix, que está mucho más cerca de mí que msk-ix, en el que está insertado el bonito 1.1.1.1.
La diferencia, como pueden ver, es significativa, porque ni siquiera el rayo de luz más rápido puede llegar de San Petersburgo a Moscú en menos de 10 ms.
Además del simple ping, en el PoC también hay una opción para comparar latencias a través de otros protocolos, como http y tcp, así como el tiempo que tarda en convertir dominios en IP a través de un resolutor específico.
El plan incluye la tarea de comparar el número de nodos entre hosts mediante traceroute, para facilitar la búsqueda de hosts a los que se puede llegar de manera más corta.
El código es rudimentario, le faltan muchas validaciones, pero funciona bastante bien con datos limpios. Agradecería cualquier comentario, estrellas en , y si a alguien le gustó la idea del proyecto, será bienvenido como colaborador.
Fuente: habr.com
