Выбіраемы бліжэйшыя вузлы ў сетцы

Выбіраемы бліжэйшыя вузлы ў сетцы

Сеткавыя затрымкі аказваюць значны ўплыў на прадукцыйнасць прыкладанняў або сэрвісаў, якія ўзаемадзейнічаюць з сеткай. Чым менш затрымкі, тым вышэйшая прадукцыйнасць. Гэта справядліва для любога сеткавага сэрвісу, пачынальна ад звычайнага сайта і сканчаючы базай дадзеных ці сеткавым сховішчам.

Добрым прыкладам служыць сістэма даменных імёнаў (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

Дадаць каментар