Selectarea nodurilor cele mai apropiate în rețea

Selectarea nodurilor cele mai apropiate în rețea

Întârzierile de rețea au un impact semnificativ asupra performanței aplicațiilor sau serviciilor care interacționează cu rețeaua. Cu cât întârzierile sunt mai mici, cu atât performanța este mai bună. Acest lucru este valabil pentru orice serviciu de rețea, de la un site obișnuit până la o bază de date sau un sistem de stocare în rețea.

Un exemplu bun este sistemul de nume de domenii (DNS). DNS este, prin natura sa, un sistem distribuit, iar nodurile de bază sunt dispersate pe tot globul. Pentru a accesa un site, trebuie mai întâi să obținem adresa sa IP.

Nu voi descrie întregul proces de trecere recursivă prin "copacul" zonelor de domeniu, ci mă voi limita la faptul că pentru a transforma un domeniu în adresă IP avem nevoie de un resolver DNS care să facă toată această treabă pentru noi.

Deci, de unde putem obține adresa resolver-ului DNS?

  1. Furnizorul de internet oferă adresa propriului său resolver DNS.
  2. Cautați online adresa unui resolver public.
  3. Ridicați unul propriu sau folosiți-l pe cel încorporat în routerul dumneavoastră de acasă.

Oricare dintre aceste opțiuni vă va permite să navigați pe internet fără griji, dar dacă aveți nevoie să transformați un număr mare de domenii în IP-uri, ar trebui să abordați alegerea resolver-ului cu mai multă atenție.

Așa cum am menționat anterior, pe lângă resolver-ul furnizat de internet, există multe adrese publice, de exemplu, puteți consulta această listă. Unele dintre ele pot fi mult mai preferabile, având o conectivitate mai bună decât resolver-ul „implicit”.

Când lista este mică, este ușor să o „pinguiuți” manual și să comparați timpul întârzierilor, dar dacă luăm în considerare lista menționată mai sus, această activitate devine deja neplăcută.

De aceea, pentru a facilita această sarcină, am conceput, cu sentimentul de impostor, un prototip în Go al ideii mele numite get-closer.

Ca exemplu, nu voi verifica întreaga listă de resolvers, ci mă voi limita la cele mai populare.

$ get-closer ping -f dnsresolver.txt -b=0 --count=10
Hosturi cele mai apropiate:
	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]

La vremea respectivă, când îmi alegeam un resolver, mă limitam doar la verificarea adreselor principale (1.1.1.1, 8.8.8.8, 9.9.9.9) - pentru că sunt atât de frumoase, și ce să aștept de la adresele rezervate, care nu sunt frumoase.

Dar dacă a apărut o metodă automatizată de a compara întârzierile, de ce să nu extindem lista...

Așa cum a arătat testul, mi se potrivește mai bine adresa „de rezervă” de la Cloudflare, deoarece este conectată la spb-ix, care este mult mai aproape pentru mine decât msk-ix, la care este conectat frumosul 1.1.1.1.

Diferența, așa cum vedeți, este semnificativă, deoarece chiar și celei mai rapide raze de lumină nu îi reușește să parcurgă distanța dintre Saint Petersburg și Moscova în mai puțin de 10 ms.

Pe lângă ping-ul simplu, în PoC există și posibilitatea de a compara întârzierile și pentru alte protocoale, precum http și tcp, precum și timpul de conversie a domeniilor în IP printr-un rezolvator specific.

Intenționăm să comparăm numărul de noduri între gazde folosind traceroute, pentru a facilita găsirea gazdelor către care există un drum mai scurt.

Codul este brut, lipsesc multe verificări, dar funcționează destul de bine pe datele curate. Aș aprecia orice feedback, stele la GitHub, iar dacă cineva i-a plăcut ideea proiectului, este binevenit să devină contributor.

Sursa: habr.com

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster