Seleccionando os nodos máis próximos da rede

Seleccionando os nodos máis próximos da rede

A latencia da rede ten un impacto significativo no rendemento das aplicacións ou servizos que interactúan coa rede. Canto menor sexa a latencia, maior será o rendemento. Isto é certo para calquera servizo de rede, desde un sitio web normal ata unha base de datos ou almacenamento en rede.

Un bo exemplo é o DNS (Domain Name System). O DNS é por natureza un sistema distribuído, con nodos raíz espallados por todo o planeta. Para acceder simplemente a calquera sitio web, primeiro cómpre obter o seu enderezo IP.

Non vou describir todo o proceso de percorrer recursivamente a "árbore" das zonas de dominio, senón que me limitarei a que para converter un dominio nun enderezo IP, necesitamos un resolvedor de DNS que faga todo este traballo para nós.

Entón, onde obtén o enderezo de resolución de DNS?

  1. O ISP proporciona o enderezo do seu resolver DNS.
  2. Busca o enderezo dun resolvedor público en Internet.
  3. Colle o teu propio ou usa o integrado no teu enrutador doméstico.

Calquera destas opcións permitirache gozar dunha navegación sen preocupacións na World Wide Web, pero se tes que converter un gran número de dominios a IP, deberías abordar a elección dun resolvedor con máis coidado.

Como xa escribín, ademais da resolución de ISP, hai moitos enderezos públicos, por exemplo, podes consultar esta lista. Algúns deles poden ser moito máis preferibles porque teñen unha mellor conectividade de rede que o resolvedor predeterminado.

Cando a lista é pequena, pode facilmente "ping" manualmente e comparar os tempos de atraso, pero se mesmo toma a lista mencionada anteriormente, esta tarefa vólvese desagradable.

Polo tanto, para facilitar esta tarefa, eu, cheo de síndrome do impostor, esbocei unha proba de concepto da miña idea en Go chamada achegarse.

Como exemplo, non vou comprobar a lista completa de resolutores, senón que me limitarei só aos máis populares.

$ get-closer ping -f dnsresolver.txt -b=0 --count=10
Closest hosts:
	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]

Nunha época, cando escollín un resolutor para min, limiteime a comprobar só os enderezos principais (1.1.1.1, 8.8.8.8, 9.9.9.9); despois de todo, son tan fermosos, e que podes esperar de enderezos de copia de seguridade feos.

Pero xa que hai unha forma automatizada de comparar atrasos, por que non ampliar a lista...

Como mostrou a proba, o enderezo de Cloudflare de "copia de seguranza" é máis axeitado para min, xa que está conectado a spb-ix, que está moito máis preto de min que a msk-ix, que ten o fermoso 1.1.1.1 conectado.

A diferenza, como podes ver, é significativa, porque nin o máis rápido raio de luz non pode chegar de San Petersburgo a Moscova en menos de 10 ms.

Ademais do simple ping, PoC tamén ten a oportunidade de comparar os atrasos doutros protocolos, como http e tcp, así como o tempo de conversión de dominios a IP a través dun resolver específico.

Existen plans para comparar o número de nodos entre hosts usando traceroute para que sexa máis doado atopar hosts que teñan un camiño máis curto ata eles.

O código é groseiro, carece dunha morea de comprobacións, pero funciona bastante ben en datos limpos. Agradecería calquera comentario, estrelas github, e se a alguén lle gustou a idea do proxecto, benvido a facerse colaborador.

Fonte: www.habr.com

Engadir un comentario