
Opóźnienia sieciowe mają znaczący wpływ na wydajność aplikacji lub usług, które komunikują się z siecią. Im mniejsze opóźnienia, tym wyższa wydajność. Dotyczy to każdej usługi sieciowej, od zwykłej strony internetowej po bazę danych lub sieciowe przechowywanie danych.
Dobrym przykładem jest system nazw domen (DNS). DNS z natury jest systemem rozproszonym, a węzły główne są rozproszone po całej planecie. Aby po prostu wejść na dowolną stronę internetową, najpierw musisz uzyskać jej adres IP.
Nie będę opisywał całego procesu rekurencyjnego przechodzenia przez "drzewo" stref domenowych, ograniczę się do tego, że do przetłumaczenia domeny na adres IP potrzebujemy rozwiązywacza DNS, który wykona tę pracę za nas.
Więc gdzie można znaleźć adres rozwiązywacza DNS?
- Dostawca internetu udostępnia adres swojego rozwiązywacza DNS.
- Znajdź w internecie adres publicznego rozwiązywacza.
- Uruchom swój własny lub skorzystaj z wbudowanego w router domowy.
Każda z tych opcji pozwoli cieszyć się bezproblemowym surfowaniem po sieci, ale jeśli będziesz potrzebować przetłumaczyć dużą liczbę domen na IP, to warto dokładniej podejść do wyboru rozwiązywacza.
Jak już wspomniałem, oprócz rozwiązywacza dostawcy internetu, istnieje wiele publicznych adresów, na przykład warto zapoznać się z tą listą. Niektóre z nich mogą okazać się znacznie bardziej preferowane, ponieważ mają lepszą łączność w sieci niż "domyślny" rozwiązywacz.
Kiedy lista jest niewielka, można łatwo "pingować" ją ręcznie i porównać czasy opóźnienia, ale jeśli weźmiemy przynajmniej listę wspomnianą powyżej, to ta czynność staje się już mało przyjemna.
Dlatego, aby ułatwić to zadanie, z poczuciem syndromu oszusta zarysowałem w Go dowód koncepcji mojej idei nazwanej .
Jako przykład nie będę sprawdzać całej listy rozwiązywaczy, ograniczę się tylko do najpopularniejszych.
$ get-closer ping -f dnsresolver.txt -b=0 --count=10
Najbliższe hosty:
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]
W swoim czasie, kiedy wybierałem resolver, ograniczałem się jedynie do sprawdzenia podstawowych adresów (1.1.1.1, 8.8.8.8, 9.9.9.9), bo są one takie ładne, a co można oczekiwać od brzydkich adresów rezerwowych.
Ale skoro pojawił się zautomatyzowany sposób porównania opóźnień, to czemu nie rozszerzyć listy…
Jak pokazał test, bardziej odpowiada mi 'rezerwowy' adres Cloudflare, ponieważ jest podłączony do spb-ix, który jest dla mnie znacznie bliżej niż msk-ix, do którego podłączony jest piękny 1.1.1.1.
Różnica, jak widać, jest znacząca, ponieważ nawet najszybszemu promieniowi światła nie udaje się dotrzeć z Petersburga do Moskwy w mniej niż 10 ms.
Oprócz prostego pingu, w PoC jest także możliwość porównania opóźnień dla innych protokołów, takich jak http i tcp, a także czas konwersji domen na IP przez określony resolver.
W planach jest zadanie porównania liczby węzłów między hostami za pomocą traceroute, aby łatwiej było znaleźć hosty, do których jest krótsza droga.
Kod jest surowy, brakuje wielu sprawdzeń, ale całkiem nieźle działa na czystych danych. Będę wdzięczny za wszelkie opinie, gwiazdki na , a jeśli ktoś polubił pomysł projektu, to zapraszam do współpracy.
Źródło: habr.com
