Wybór najbliższych węzłów w sieci

Wybór najbliższych węzłów w sieci

Opóźnienie sieci ma znaczący wpływ na wydajność aplikacji lub usług wchodzących w interakcję z siecią. Im mniejsze opóźnienie, tym wyższa wydajność. Dotyczy to każdej usługi sieciowej, od zwykłej strony internetowej po bazę danych lub pamięć sieciową.

Dobrym przykładem jest system nazw domen (DNS). DNS jest z natury systemem rozproszonym, z węzłami głównymi rozproszonymi po całej planecie. Aby uzyskać dostęp do dowolnej witryny internetowej, musisz najpierw uzyskać jej adres IP.

Nie będę opisywał całego procesu rekurencyjnego przeglądania „drzewa” stref domen, ale ograniczę się do tego, że aby zamienić domenę na adres IP potrzebny jest nam resolwer DNS, który całą tę pracę wykona za nas.

Skąd więc wziąć adres modułu rozpoznawania nazw DNS?

  1. Dostawca usług internetowych podaje adres swojego modułu rozpoznawania nazw DNS.
  2. Znajdź adres publicznego mechanizmu rozpoznawania nazw w Internecie.
  3. Wybierz swój własny lub skorzystaj z tego wbudowanego w router domowy.

Każda z tych opcji pozwoli Ci cieszyć się beztroskim surfowaniem po sieci WWW, jednak jeśli masz potrzebę konwersji dużej liczby domen na IP, powinieneś ostrożniej podejść do wyboru usługi rozpoznawania nazw.

Jak już pisałem, oprócz resolwera ISP istnieje wiele adresów publicznych, możesz na przykład sprawdzić tę listę. Niektóre z nich mogą być znacznie bardziej preferowane, ponieważ mają lepszą łączność sieciową niż domyślny program tłumaczący.

Gdy lista jest mała, możesz łatwo „pingować” ją ręcznie i porównywać czasy opóźnień, ale jeśli w ogóle weźmiesz powyższą listę, to zadanie stanie się nieprzyjemne.

Dlatego też, aby ułatwić sobie to zadanie, pełen syndromu oszusta, naszkicowałem dowód słuszności mojego pomysłu na Go o nazwie podejdź bliżej.

Dla przykładu nie będę sprawdzał całej listy resolwerów, ale ograniczę się tylko do tych najpopularniejszych.

$ 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]

Kiedyś wybierając dla siebie resolwer ograniczałem się tylko do sprawdzania adresów głównych (1.1.1.1, 8.8.8.8, 9.9.9.9) - przecież są takie piękne, a czego można się po nich spodziewać brzydkie adresy zapasowe.

Skoro jednak istnieje automatyczny sposób porównywania opóźnień, dlaczego nie rozszerzyć tej listy...

Jak pokazał test, „zapasowy” adres Cloudflare jest dla mnie bardziej odpowiedni, ponieważ jest podłączony do spb-ix, który jest mi znacznie bliższy niż msk-ix, który ma podpięty piękny 1.1.1.1

Różnica, jak widać, jest znacząca, bo nawet najszybszy promień światła nie jest w stanie dotrzeć z Petersburga do Moskwy w czasie krótszym niż 10 ms.

Oprócz prostego pingowania, PoC ma także możliwość porównania opóźnień dla innych protokołów, takich jak http i tcp, a także czasu konwersji domen na IP poprzez konkretny resolwer.

Istnieją plany porównywania liczby węzłów między hostami za pomocą polecenia Traceroute, aby ułatwić znalezienie hostów, które mają do nich krótszą ścieżkę.

Kod jest prymitywny, brakuje mu wielu kontroli, ale działa całkiem dobrze na czystych danych. Byłbym wdzięczny za wszelkie opinie, gwiazdki dalej github, a jeśli komuś spodobał się pomysł projektu, zapraszamy do zostania współtwórcą.

Źródło: www.habr.com

Dodaj komentarz