Rozproszona tablica skrótów

Rozproszona tablica mieszająca ( DHT ) to system rozproszony , który zapewnia usługę wyszukiwania podobną do tablicy mieszającej : pary klucz-wartość są przechowywane w DHT, a każdy uczestniczący węzeł może skutecznie pobrać wartość powiązaną z danym kluczem . Główną zaletą DHT jest to, że węzły można dodawać lub usuwać przy minimalnej pracy związanej z redystrybucją kluczy. Klucze to unikalne identyfikatory, które odwzorowują określone wartości , którymi z kolei mogą być dowolne dane, od adresów, przez dokumenty , po dowolne dane . Odpowiedzialność za utrzymanie odwzorowania kluczy na wartości jest rozdzielana między węzły w taki sposób, że zmiana w zestawie uczestników powoduje minimalne zakłócenia. Pozwala to DHT na skalowanie do bardzo dużej liczby węzłów i obsługę ciągłych przyjazdów, odlotów i awarii węzłów.

DHT tworzą infrastrukturę, którą można wykorzystać do budowy bardziej złożonych usług, takich jak anycast , kooperacyjne buforowanie sieci , rozproszone systemy plików , usługi nazw domen , komunikatory , multiemisja , a także systemy udostępniania plików i dystrybucji treści peer-to-peer . Znane sieci rozproszone korzystające z DHT obejmują rozproszony moduł śledzący BitTorrent , sieć Kad , botnet Storm , komunikator internetowy Tox , Freenet , wyszukiwarkę YaCy i InterPlanetary File System .

Rozproszone tablice skrótów

Historia

Badania DHT były pierwotnie motywowane częściowo przez systemy peer-to-peer (P2P), takie jak Freenet , Gnutella , BitTorrent i Napster , które wykorzystywały zasoby rozproszone w Internecie, aby zapewnić pojedynczą użyteczną aplikację. W szczególności wykorzystali zwiększoną przepustowość i pojemność dysku twardego , aby zapewnić usługę udostępniania plików.

Systemy te różniły się sposobem lokalizowania danych oferowanych przez ich rówieśników. Napster, pierwszy system dostarczania treści P2P na dużą skalę, wymagał centralnego serwera indeksującego: każdy węzeł po dołączeniu wysyłałby listę przechowywanych lokalnie plików do serwera, który przeprowadzałby wyszukiwanie i kierował zapytania do węzłów, które zawierały wyniki. Ten centralny komponent sprawiał, że system był podatny na ataki i procesy sądowe.

Gnutella i podobne sieci przeszły na model zalewania zapytań – w istocie każde wyszukiwanie skutkowałoby rozgłaszeniem wiadomości do każdej innej maszyny w sieci. Unikając pojedynczego punktu awarii , ta metoda była znacznie mniej wydajna niż Napster. Późniejsze wersje klientów Gnutelli przeszły na dynamiczny model zapytań, co znacznie poprawiło wydajność.

Freenet jest w pełni dystrybuowany, ale wykorzystuje heurystyczny routing oparty na kluczach , w którym każdy plik jest powiązany z kluczem, a pliki z podobnymi kluczami mają tendencję do grupowania się w podobnym zestawie węzłów. Zapytania prawdopodobnie będą kierowane przez sieć do takiego klastra bez konieczności odwiedzania wielu węzłów równorzędnych. Jednak Freenet nie gwarantuje, że dane zostaną znalezione.

Rozproszone tablice mieszające wykorzystują bardziej ustrukturyzowany routing oparty na kluczach, aby osiągnąć zarówno decentralizację Freenet i Gnutella, jak i wydajność i gwarantowane wyniki Napstera. Jedną wadą jest to, że podobnie jak Freenet, DHT obsługują bezpośrednio tylko wyszukiwanie z dokładnym dopasowaniem, a nie wyszukiwanie według słów kluczowych, chociaż algorytm routingu Freenet można uogólnić na dowolny typ klucza, w którym można zdefiniować operację bliskości.

W 2001 roku cztery systemy — CAN , Chord , Pastry i Tapestry — zapoczątkowały DHT jako popularny temat badawczy. Projekt o nazwie Infrastructure for Resilient Internet Systems (Iris) został sfinansowany z grantu w wysokości 12 milionów dolarów od National Science Foundation Stanów Zjednoczonych w 2002 roku. Wśród badaczy znaleźli się Sylvia Ratnasamy , Ion Stoica , Hari Balakrishnan i Scott Shenker . Poza środowiskiem akademickim technologia DHT została przyjęta jako składnik sieci BitTorrent i Coral Content Distribution Network.

Nieruchomości

DHT charakterystycznie podkreślają następujące właściwości:

  • Autonomia i decentralizacja : węzły wspólnie tworzą system bez centralnej koordynacji.
  • Tolerancja błędów : system powinien być niezawodny (w pewnym sensie) nawet w przypadku ciągłego dołączania, opuszczania i awarii węzłów.
  • Skalowalność : System powinien działać wydajnie nawet z tysiącami lub milionami węzłów.

Kluczową techniką stosowaną do osiągnięcia tych celów jest to, że każdy węzeł musi koordynować tylko z kilkoma innymi węzłami w systemie – najczęściej O (log n ) z n uczestników (patrz poniżej) – tak, że tylko ograniczona liczba przy każdej zmianie członkostwa należy wykonać pracę.

Niektóre projekty DHT mają na celu zabezpieczenie przed złośliwymi uczestnikami i umożliwienie uczestnikom zachowania anonimowości , chociaż jest to mniej powszechne niż w wielu innych systemach peer-to-peer (zwłaszcza udostępnianie plików ); zobacz anonimowe P2P .

Struktura

Strukturę DHT można rozłożyć na kilka głównych składników. Podstawą jest abstrakcyjna przestrzeń kluczy , taka jak zestaw ciągów 160-bitowych . Schemat partycjonowania przestrzeni kluczy dzieli własność tej przestrzeni kluczy między uczestniczące węzły. Następnie sieć nakładkowa łączy węzły, umożliwiając im znalezienie właściciela dowolnego klucza w przestrzeni kluczy.

Gdy te komponenty są na miejscu, typowe użycie DHT do przechowywania i odzyskiwania może przebiegać w następujący sposób. Załóżmy, że przestrzeń kluczy to zbiór ciągów 160-bitowych. Aby zindeksować plik o podanej nazwie pliku i danych w DHT, generowany jest skrót SHA-1 nazwy pliku , tworząc 160-bitowy klucz k , a wiadomość put ( k, data ) jest wysyłana do dowolnego węzła uczestniczącego w DHT. Wiadomość jest przekazywana od węzła do węzła przez sieć nakładkową, aż dotrze do pojedynczego węzła odpowiedzialnego za klucz k , zgodnie z partycjonowaniem przestrzeni kluczy. Ten węzeł następnie przechowuje klucz i dane. Dowolny inny klient może następnie pobrać zawartość pliku ponownie haszując nazwę pliku w celu uzyskania k i prosząc dowolny węzeł DHT o znalezienie danych związanych z k za pomocą komunikatu get ( k ) . Wiadomość ponownie zostanie skierowana przez nakładkę do węzła odpowiedzialnego za k , który odpowie z zapisanymi danymi .

Partycjonowanie przestrzeni kluczy i nakładanie komponentów sieciowych opisano poniżej w celu uchwycenia głównych idei wspólnych dla większości DHT; wiele projektów różni się szczegółami.

Partycjonowanie przestrzeni kluczy

Większość DHT używa jakiegoś wariantu spójnego mieszania lub mieszania rendez-vous do mapowania kluczy na węzły. Wydaje się, że oba algorytmy zostały opracowane niezależnie i jednocześnie w celu rozwiązania problemu rozproszonej tablicy skrótów.

Zarówno spójne mieszanie, jak i mieszanie rendez-vous mają zasadniczą właściwość polegającą na tym, że usunięcie lub dodanie jednego węzła zmienia tylko zestaw kluczy posiadanych przez węzły o sąsiednich identyfikatorach i pozostawia nienaruszone wszystkie inne węzły. Porównaj to z tradycyjną tablicą skrótów , w której dodanie lub usunięcie jednego segmentu powoduje ponowne mapowanie prawie całej przestrzeni kluczy. Ponieważ jakakolwiek zmiana właściciela zwykle odpowiada przenoszeniu obiektów przechowywanych w DHT z jednego węzła do drugiego z dużą przepustowością, minimalizacja takiej reorganizacji jest wymagana do wydajnego obsługiwania wysokich wskaźników zmian (przybycie węzła i awaria).

Konsekwentne haszowanie

Konsekwentne mieszanie wykorzystuje funkcję która definiuje abstrakcyjne pojęcie i , co nie jest związane z odległością geograficzną ani opóźnieniem sieci . Każdemu węzłowi przypisany jest pojedynczy klucz zwany jego identyfikatorem (ID). Węzeł o identyfikatorze kluczy, których identyfikatorem .

Na przykład Chord DHT używa spójnego jako punkty na okręgu, a to pokonywana zgodnie wokół okręgu od do . W ten sposób cykliczna przestrzeń kluczy jest podzielona na ciągłe segmenty, których punktami końcowymi są identyfikatory węzłów. ja i są dwoma sąsiednimi identyfikatorami, z krótszą odległością zgodnie z ruchem wskazówek zegara od do , to węzeł o identyfikatorze jest właścicielem wszystkich kluczy mieszczących się między i .

Haszowanie spotkania

tej samej funkcji skrótu ( , aby powiązać klucz z jednym z n dostępnych serwerów. Każdy klient ma tę samą listę identyfikatorów { S 1 , S 2 , ..., S n } , po jednym dla każdego serwera. Biorąc pod uwagę klucz k , klient oblicza n wag mieszania w 1 = h ( S 1 , k ), w 2 = h ( S 2 , k ), ..., w n = h ( S n , k ) . Klient kojarzy ten klucz z serwerem odpowiadającym najwyższej wadze skrótu dla tego klucza. Serwer o identyfikatorze wszystkich kluczy dla których waga skrótu jest wyższa niż waga mieszania dowolnego innego węzła dla tego klucza.

Haszowanie zachowujące lokalność

Haszowanie z zachowaniem lokalizacji zapewnia, że ​​podobne klucze są przypisywane do podobnych obiektów. Może to umożliwić bardziej wydajne wykonywanie zapytań o zakres, jednak w przeciwieństwie do używania spójnego mieszania, nie ma już pewności, że klucze (a tym samym obciążenie) są równomiernie losowo rozłożone w przestrzeni klucza i uczestniczących elementach równorzędnych. Protokoły DHT, takie jak Self-Chord i Oscar, rozwiązują takie problemy. Self-Chord oddziela klucze obiektów od identyfikatorów równorzędnych i sortuje klucze wzdłuż pierścienia, stosując podejście statystyczne oparte na inteligencji roju . Sortowanie zapewnia, że ​​podobne klucze są przechowywane przez sąsiednie węzły i że procedury wykrywania, w tym zapytania o zakres , mogą być wykonywane w czasie logarytmicznym. Oscar konstruuje nawigacyjną sieć małych światów opartą na losowym próbkowaniu, zapewniając również logarytmiczny czas wyszukiwania.

Sieć nakładkowa

Każdy węzeł utrzymuje zestaw łączy z innymi węzłami (jego sąsiadami lub tablicą routingu ). Łącza te razem tworzą sieć nakładek. Węzeł wybiera swoich sąsiadów zgodnie z pewną strukturą, zwaną topologią sieci .

Wszystkie topologie DHT mają wspólny wariant najważniejszej właściwości: dla dowolnego klucza k każdy węzeł ma identyfikator węzła, który jest właścicielem k lub ma łącze do węzła, którego identyfikator węzła jest bliższy k , pod względem odległości przestrzeni klucza zdefiniowanej powyżej . Następnie łatwo jest skierować wiadomość do właściciela dowolnego klucza k przy użyciu następującego zachłannego algorytmu (który niekoniecznie jest globalnie optymalny): na każdym kroku prześlij wiadomość do sąsiada, którego ID jest najbliższe k . Gdy nie ma takiego sąsiada, to musimy dotrzeć do najbliższego węzła, którym jest właściciel k , jak zdefiniowano powyżej. Ten styl routingu jest czasami nazywany routingiem opartym na kluczach .

Oprócz podstawowej poprawności routingu, dwa ważne ograniczenia topologii mają zagwarantować, że maksymalna liczba przeskoków w dowolnej trasie (długość trasy) jest niska, dzięki czemu żądania są realizowane szybko; oraz że maksymalna liczba sąsiadów dowolnego węzła (maksymalny stopień węzła ) jest niska, tak aby narzut związany z konserwacją nie był nadmierny. Oczywiście posiadanie krótszych tras wymaga wyższego maksymalnego stopnia . Niektóre typowe wybory dotyczące maksymalnego stopnia i długości trasy są następujące, gdzie n to liczba węzłów w DHT, przy użyciu notacji Big O :

Maks. stopień Maksymalna długość trasy Stosuje się w Notatka
Najgorsze długości wyszukiwania, z prawdopodobnie znacznie wolniejszymi czasami wyszukiwania
Koorde (ze stałym stopniem) Bardziej złożone do wdrożenia, ale akceptowalny czas wyszukiwania można znaleźć przy stałej liczbie połączeń

Gobelin cukierniczy Chord Kademlia

Najczęstsze, ale nieoptymalne (stopień/długość trasy). Chord to najbardziej podstawowa wersja, a Kademlia wydaje się być najpopularniejszym zoptymalizowanym wariantem (powinna poprawić średnie wyszukiwanie)
Koorde (z optymalnym wyszukiwaniem) Bardziej złożone do wdrożenia, ale wyszukiwania mogą być szybsze (mają niższą granicę najgorszego przypadku)
Najgorsze potrzeby w zakresie lokalnej pamięci masowej, z dużą komunikacją po podłączeniu lub rozłączeniu dowolnego węzła

Najczęstszy wybór, względem kompromisu stopień / długość trasy, ale takie topologie zazwyczaj pozwalają na większą elastyczność Wiele DHT wykorzystuje tę elastyczność do wybierania sąsiadów, którzy są blisko pod względem opóźnienia w fizycznej sieci bazowej. Ogólnie rzecz biorąc, wszystkie DHT konstruują żeglowne topologie sieci małego świata, w których długość trasy jest kompromisem a stopień sieci.

Maksymalna długość trasy jest ściśle związana ze średnicą : maksymalną liczbą przeskoków na najkrótszej ścieżce między węzłami. Najwyraźniej długość trasy sieci w najgorszym przypadku jest co najmniej tak duża jak jej średnica, więc DHT są ograniczone przez kompromis stopień/średnica, który jest fundamentalny w teorii grafów . Długość trasy może być większa niż średnica, ponieważ zachłanny algorytm trasowania może nie znajdować najkrótszych ścieżek.

Algorytmy dla sieci nakładkowych

Oprócz routingu istnieje wiele algorytmów, które wykorzystują strukturę sieci nakładkowej do wysyłania wiadomości do wszystkich węzłów lub podzbioru węzłów w DHT. Algorytmy te są używane przez aplikacje do nakładania multiemisji , zapytań o zakres lub do zbierania statystyk. Dwa systemy oparte na tym podejściu to Structella, który implementuje zalewanie i błądzenie losowe na nakładce Pastry, oraz DQ-DHT, który implementuje algorytm dynamicznego wyszukiwania zapytań w sieci Chord.

Bezpieczeństwo

Ze względu na decentralizację, odporność na awarie i skalowalność DHT są one z natury bardziej odporne na wrogiego atakującego niż system scentralizowany. [ niejasne ]

Otwarte systemy do rozproszonego przechowywania danych , które są odporne na masowe wrogie ataki, są wykonalne.

System DHT, który został starannie zaprojektowany, aby był odporny na błędy bizantyjskie , może obronić się przed luką w zabezpieczeniach, znaną jako atak Sybil , który dotyczy większości obecnych projektów DHT. Whanau to DHT zaprojektowany tak, aby był odporny na ataki Sybil.

Petar Maymounkov, jeden z oryginalnych autorów Kademlia , zaproponował sposób na obejście słabości ataku Sybil poprzez włączenie relacji zaufania społecznego do projektu systemu. Nowy system, o nazwie kodowej Tonika lub znany również pod nazwą domeny jako 5ttt, opiera się na projekcie algorytmu znanym jako „routing elektryczny”, którego współautorem jest matematyk Jonathan Kelner. Majmounkow podjął teraz kompleksowe działania wdrożeniowe tego nowego systemu. Jednak badania nad skuteczną obroną przed atakami Sybil są ogólnie uważane za kwestię otwartą, a co roku na czołowych konferencjach poświęconych badaniom nad bezpieczeństwem proponowana jest szeroka gama potencjalnych mechanizmów obronnych. [ potrzebne źródło ]

Implementacje

Najbardziej zauważalne różnice napotkane w praktycznych przypadkach implementacji DHT obejmują co najmniej:

  • Przestrzeń adresowa jest parametrem DHT. Kilka rzeczywistych DHT używa 128-bitowej lub 160-bitowej przestrzeni klucza.
  • Niektóre rzeczywiste DHT używają funkcji skrótu innych niż SHA-1 .
  • W prawdziwym świecie klucz k może być skrótem zawartości pliku, a nie haszem nazwy pliku, aby zapewnić przechowywanie z możliwością adresowania zawartości , tak aby zmiana nazwy pliku nie uniemożliwiała użytkownikom jego znalezienia.
  • Niektóre DHT mogą również publikować obiekty różnych typów. Na przykład klucz k może być identyfikatorem węzła , a powiązane dane mogą opisywać sposób kontaktowania się z tym węzłem. Pozwala to na publikację informacji o obecności i jest często używane w komunikatorach internetowych itp. W najprostszym przypadku ID to po prostu losowa liczba, która jest bezpośrednio używana jako klucz k (więc w 160-bitowym DHT ID będzie 160-bitowym numer, zwykle wybierany losowo). W niektórych DHT publikowanie identyfikatorów węzłów jest również wykorzystywane do optymalizacji operacji DHT.
  • Redundancja może być dodana w celu poprawy niezawodności. Para (k, data) może być przechowywana w więcej niż jednym węźle odpowiadającym kluczowi. Zwykle zamiast wybierać tylko jeden węzeł, rzeczywiste algorytmy DHT wybierają i odpowiednie węzły, przy czym i jest parametrem DHT specyficznym dla implementacji. W niektórych projektach DHT węzły zgadzają się obsługiwać określony zakres przestrzeni kluczy, którego rozmiar może być wybierany dynamicznie, a nie na stałe.
  • Niektóre zaawansowane DHT, takie jak Kademlia , wykonują najpierw iteracyjne wyszukiwania w DHT w celu wybrania zestawu odpowiednich węzłów i wysłania wiadomości put(k, data) tylko do tych węzłów, drastycznie zmniejszając w ten sposób bezużyteczny ruch, ponieważ opublikowane wiadomości są wysyłane tylko do węzłów, które wydają się odpowiednie do przechowywania klucza k ; a iteracyjne wyszukiwania obejmują tylko mały zestaw węzłów, a nie cały DHT, zmniejszając bezużyteczne przekazywanie. W takich DHT przekazywanie put(k, data) może nastąpić tylko jako część algorytmu samonaprawiającego się: jeśli węzeł docelowy otrzyma wiadomość put(k, data) , ale uważa, że ​​k jest poza obsługiwanym zakresem i znany jest bliższy węzeł (pod względem przestrzeni klucza DHT), wiadomość jest przekazywana do tego węzła. W przeciwnym razie dane są indeksowane lokalnie. Prowadzi to do nieco równoważącego się zachowania DHT. Oczywiście taki algorytm wymaga, aby węzły publikowały dane o swojej obecności w DHT, aby można było wykonywać iteracyjne wyszukiwania.
  • Ponieważ na większości maszyn wysyłanie wiadomości jest znacznie droższe niż dostęp do lokalnej tablicy skrótów, sensowne jest łączenie wielu wiadomości dotyczących określonego węzła w jedną partię. Zakładając, że każdy węzeł ma lokalną partię składającą się z co najwyżej b operacji, procedura łączenia jest następująca. Każdy węzeł najpierw sortuje swoją lokalną partię według identyfikatora węzła odpowiedzialnego za operację. Używając sortowania kubełkowego , można to zrobić w O(b + n) , gdzie n to liczba węzłów w DHT. Gdy istnieje wiele operacji adresujących ten sam klucz w ramach jednej partii, partia jest skondensowana przed wysłaniem. Na przykład wiele wyszukiwań tego samego klucza można zredukować do jednego lub wielu przyrostów można zredukować do pojedynczej operacji dodawania. Redukcję tę można wdrożyć za pomocą tymczasowej lokalnej tablicy skrótów. Na koniec operacje są wysyłane do odpowiednich węzłów.

Przykłady

Protokoły i implementacje DHT

Aplikacje korzystające z DHT

Zobacz też

Linki zewnętrzne