Вибираємо найближчі вузли у мережі

Вибираємо найближчі вузли у мережі

Мережеві затримки мають значний вплив на продуктивність додатків або сервісів, які взаємодіють із мережею. Чим менше затримки, тим вища продуктивність. Це справедливо для будь-якого мережевого сервісу, починаючи від звичайного сайту та закінчуючи базою даних або мережевим сховищем.

Хорошим прикладом є система доменних імен (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
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]

Свого часу, коли я вибирав для себе резолвер, то обмежувався лише перевіркою основних адрес (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

Додати коментар або відгук