Избираме най-близките възли в мрежата

Избираме най-близките възли в мрежата

Мрежовите закъснения оказват значително влияние върху производителността на приложенията или услугите, които взаимодействат с мрежата. Колкото по-малки са закъсненията, толкова по-висока е производителността. Това е валидно за всяка мрежова услуга, от обикновен уебсайт до база данни или мрежово хранилище.

Добър пример е системата за домейна имена (DNS). DNS по природа е разпределена система, чийто коренни възли са разпръснати по цялата планета. За да посетите какъвто и да е сайт, първо трябва да получите неговия IP-адрес.

Няма да описвам целия процес на рекурсивно преминаване по “дървото” на домейн зоните, а ще се огранича до това, че за преобразуването на домейн в IP-адрес ни е нужен DNS резолвер, който да свърши цялата работа вместо нас.

И така, откъде да вземем адрес на DNS резолвер?

  1. Интернет доставчикът предоставя адреса на своя DNS резолвер.
  2. Намерите в интернет адрес на публичен резолвер.
  3. Създайте собствен или използвайте вградения в вашия домашен рутер.

Всеки от тези варианти ще ви позволи да се наслаждавате на безгрижно сърфиране в световната мрежа, но ако имате нужда да преобразувате голямо количество домейни в IP адреси, е добре да подберете резолвера по-внимателно.

Както вече споменах, освен резолвера на интернет доставчика, съществуват множество публични адреси, например, можете да се запознаете с този списък. Някои от тях могат да се окажат много по-предпочитани, тъй като имат по-добра мрежова свързаност в сравнение с резолвера “по подразбиране”.

Когато списъкът е малък, лесно може да бъде “пингнат” ръчно и да се сравнят времето на закъснение, но ако вземете дори и списъка, споменат по-горе, това занимание вече става неприятно.

Затова, за да улесня тази задача, аз, изпълнен със синдром на самозванеца, набросах на Go proof-of-concept на моята идея, наречена get-closer.

Като пример няма да проверя целия списък от резолвери, а ще се огранича единствено до най-популярните.

$ get-closer ping -f dnsresolver.txt -b=0 --count=10
Най-близки хостове:
	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]

В свое време, когато избирах резолвер за себе си, се ограничавах просто до проверка на основните адреси (1.1.1.1, 8.8.8.8, 9.9.9.9), - те са толкова красиви, а какво да очаквам от резервните некрасиви адреси.

Но ако е наличен автоматизиран начин за сравнение на забавяния, защо да не разширим списъка...

Както показа тестът, предпочитам 'резервния' адрес на Cloudflare, тъй като той е свързан с spb-ix, който е много по-близо до мен, отколкото msk-ix, в който е свързан приятният 1.1.1.1.

Разликата, както виждате, е значителна, защото дори на най-бързия лъч светлина не му успява да достигне от Санкт Петербург до Москва за по-малко от 10 мс.

Освен обикновен пинг, в PoC има и възможност за сравняване на забавяния по други протоколи, като http и tcp, както и времето за преобразуване на домейни в IP чрез определен резолвер.

Планираме задача за сравняване на броя на възлите между хостовете с помощта на traceroute, за да е по-лесно да се откриват хостове с по-кратък път.

Кодът е суров, липсват много проверки, но работи приемливо с чисти данни. Ще бъда благодарен за всякаква обратна връзка, звезди на гитхъб, а ако на някой му хареса идеята на проекта, то е добре дошъл в контрибуторите.

Източник: habr.com

Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster