Próbuję wdrożyć tabelę rozproszonego mieszania ciasta, ale niektóre rzeczy wymykają mi się z zrozumienia. Miałem nadzieję, że ktoś to wyjaśni.
Oświadczenie : Nie jestem studentem informatyki. W życiu wziąłem dokładnie dwa kursy informatyki i żadne z nich nie dotyczyło niczego skomplikowanego. Pracuję z oprogramowaniem od lat, więc czuję, że jestem gotowa do wykonania zadania, gdybym mógł po prostu ominąć pomysły. Więc może po prostu brakuje mi czegoś oczywistego.
Przeczytałem artykuł opublikowany przez autorów [1] i poczyniłem pewne postępy, ale wciąż jestem zawieszony na tym jednym punkcie, w którym działa tabela routingu:
Artykuł twierdzi, że
Tabela routingu węzła, , jest zorganizowana w z których zawiera wpisy. Do wpisy w wierszu tabeli trasowania każdego odniesieniu do węzła, który nodeid akcje obecnego węzła nodeid w fi RST N cyfr, ale których p cyfra jest jednym z możliwych wartościach inna niż cyfra w identyfikatorze bieżącego węzła.⌈ log 2 b N ⌉ 2 b - 1 2 b - 1 n n + 1 2 b - 1 n + 1
oznacza zmienną specyficznych dla aplikacji, zazwyczaj . Dla uproszczenia zastosujmy . Więc powyższe jest4 b = 4
Tabela routingu węzła, , jest zorganizowana w każdy z pozycjami. Do wpisów w wierszu tabeli trasowania każdego odniesieniu do węzła, który nodeid akcje obecnego węzła nodeid w fi RST N cyfr, ale których p cyfra jest jednym z możliwych wartości inny niż cyfra w identyfikatorze obecnego węzła.⌈ log 16 N ⌉ 15 15 n n + 1 2 b - 1 n + 1
Tyle rozumiem Ponadto oznacza liczbę serwerów w klastrze. Też to rozumiem.
Moje pytanie brzmi: jeśli wiersz, w którym znajduje się wpis, zależy od wspólnej długości klucza, dlaczego pozornie losowy limit liczby wierszy? Każdy identyfikator węzła ma 32 cyfry, gdy (128-bitowy identyfikator węzła podzielony na cyfry bitów). Co się stanie, gdy wystarczająco wysoką wartość, aby ? Zdaję sobie sprawę, że zajęłoby to 340 282 366,920,938,463,463,374,607,431,768,211,457 (jeśli moja matematyka ma rację) serwerów, aby przejść do tego scenariusza, ale wydaje się to dziwnym włączeniem, a korelacja nigdy nie jest wyjaśniona.N ⌈ log 16 N ⌉ > 32
Co się stanie, jeśli masz niewielką liczbę serwerów? Jeśli mam mniej niż 16 serwerów, mam tylko jeden wiersz w tabeli. Ponadto pod żadnym pozorem nie każdy wpis w wierszu miałby odpowiedni serwer. Czy wpisy powinny być puste? Zdaję sobie sprawę, że będę w stanie znaleźć serwer w zestawie liści bez względu na wszystko, biorąc pod uwagę, że niewiele serwerów, ale ten sam problem jest generowany w drugim rzędzie - co jeśli nie mam serwera, który ma nodeId tak, że mogę wypełnić każdą możliwą permutację n-tej cyfry? Wreszcie, jeśli mam, powiedzmy, cztery serwery i mam dwa węzły, które dzielą, powiedzmy, 20 z ich 32 cyfr, przez jakiś losowy przypadek ... czy powinienem wypełnić 20 wierszy tabeli dla tego węzła, nawet jeśli jest to znacznie więcej rzędów, niż mogłem nawet zbliżyć się do wypełnienia?
Oto, co wymyśliłem, próbując uzasadnić moją drogę przez to:
- Wpisy należy ustawić na wartość zerową, jeśli nie ma węzła dokładnie pasującego do tego prefiksu.
- Puste wiersze należy dodawać, dopóki nie będzie wystarczającej liczby wierszy, aby dopasować długość współdzieloną nodeIds.
- Jeśli i tylko wtedy, gdy nie ma pasującego wpisu dla żądanego identyfikatora wiadomości, wróć do wyszukiwania w tablicy routingu dla identyfikatora nodeId, którego wspólna długość jest większa lub równa bieżącemu identyfikatorowi nodeID i którego wpis jest matematycznie bliższy niż bieżący nodeId's do żądanego identyfikatora.
- Jeśli w punkcie 3 nie można znaleźć odpowiedniego węzła, załóż, że jest to miejsce docelowe i dostarcz wiadomość.
Czy wszystkie cztery z tych założeń się utrzymują? Czy jest gdzieś indziej powinienem szukać informacji na ten temat?
- Ciasto: Skalowalna, zdecentralizowana lokalizacja i routing obiektów dla dużych systemów peer-to-peer autorstwa A. Rowstronga i P. Druschela (2001) - pobierz tutaj