Round-robin DNS – technika rozdzielania ruchu pomiędzy kilka serwerów, polegająca na przypisaniu jednej nazwie domenowej wielu adresów IP i podawaniu ich w zmiennej kolejności w kolejnych odpowiedziach DNS. Opiera się na założeniu, że klient nawiąże połączenie z pierwszym adresem otrzymanej listy, dzięki czemu kolejni klienci trafiają na różne serwery. Nie wymaga zmian w protokole DNS ani wprowadzania nowych typów rekordów, ponieważ specyfikacja nie gwarantuje określonej kolejności rekordów w odpowiedzi.
Zasada działania Strefa zawiera kilka rekordów A lub AAAA przypisanych tej samej nazwie, wskazujących różne serwery. Serwer nazw zmienia kolejność tych rekordów pomiędzy kolejnymi odpowiedziami, wobec czego różni pytający otrzymują listę zaczynającą się od innego adresu. W opisanej w RFC 1794 implementacji adresy w pliku strefy były przestawiane losową liczbę razy, a operację powtarzano co 300 sekund, przy czym czas życia rekordów ustawiono na tę samą wartość.
Rozwiązanie działa, ponieważ protokół DNS nie narzuca kolejności rekordów w odpowiedzi. Kolejność ta jest natomiast przewidywalna w tym sensie, że dane wczytane dwukrotnie w tej samej kolejności zostaną dwukrotnie w tej samej kolejności przekazane klientom.
Historia Mechanizm wywodzi się z prób odwzorowania w DNS pojęcia klastra, czyli grupy maszyn pełniących tę samą funkcję, przy których nie ma znaczenia, którą z nich obsłuży konkretne żądanie, byle obciążenie rozłożyło się w miarę równo. Około 1986 roku zaczęły powstawać nieoficjalne modyfikacje serwera BIND realizujące ten pomysł. Najszerzej rozpowszechniły się zmiany „Shuffle Address” autorstwa Bryana Beechera oraz kod „Round Robin” Marshalla Rose’a. Pierwsze z nich przestawiały rekordy adresowe cyklicznie, nie biorąc pod uwagę faktycznego obciążenia maszyn docelowych. Równolegle Matt Madison z firmy TGV zaimplementował odmianę, która korzystała z mechanizmów systemu VMS, aby zwracać adresy w kolejności od najmniej do najbardziej obciążonego serwera, jednak rozwiązanie to było ściśle związane z tym systemem operacyjnym.
Historię tych prac oraz próby wypracowania ogólniejszego rozwiązania w ramach grupy roboczej IETF opisuje dokument RFC 1794, opublikowany w kwietniu 1995 roku przez Thomasa Brisco z Uniwersytetu Rutgersa. Ma on charakter informacyjny i nie ustanawia żadnego standardu internetowego.
Ograniczenia Technika rozdziela żądania, ale nie równoważy obciążenia w ścisłym znaczeniu – kolejność adresów zmienia się cyklicznie, niezależnie od tego, jak obciążone są poszczególne serwery.
Odpowiedzi DNS są zapamiętywane przez serwery pośredniczące na czas określony wartością TTL, więc rozdział ruchu jest tym zgrubniejszy, im dłuższy jest ten czas. Utrzymywanie zmiennej kolejności ma sens tylko wtedy, gdy czas życia rekordów i częstotliwość ich przeliczania pozostają ze sobą w ścisłym związku – podawanie godzinnego czasu życia przy kolejności zmienianej co minutę nie daje żadnego efektu.
Sama rotacja nie wykrywa też awarii. Serwer może przestać działać w trakcie okresu ważności rekordu i mimo to nadal będzie wskazywany klientom, co przy projektowaniu ogólniejszego rozwiązania uznano za jedno z podstawowych wymagań do spełnienia.
Wreszcie o rzeczywistej kolejności decyduje klient. Już w RFC 1794 zaznaczono, że klient może przestawić otrzymane rekordy i że z punktu widzenia serwera jest to sprawa lokalna, niemożliwa do przewidzenia. Współcześnie sposób porządkowania adresów docelowych opisuje RFC 6724, które zaleca wybieranie adresu o najdłuższym wspólnym prefiksie z adresem źródłowym, a kolejność otrzymaną z DNS nakazuje zachować dopiero wtedy, gdy wcześniejsze reguły nie rozstrzygną wyboru. Reguła ta potrafi zniweczyć rotację ustawioną po stronie serwera, co skłoniło część implementacji do jej ograniczenia; biblioteka standardowa języka Go stosuje ją wyłącznie do adresów IPv6, ponieważ użycie jej wobec adresów IPv4 powodowało problemy.
Zobacz też Domain Name System Równoważenie obciążenia
Przypisy
Kategoria:Domain Name System