Як працює таблиця маршрутизації кондитерських виробів?


23

Я намагаюся реалізувати таблицю розподілених хеш-консистентних виробів, але деякі речі уникають мого розуміння. Я сподівався, що хтось може уточнити.

Відмова : Я не студент інформатики. У житті я взяв саме два курси інформатики, і жоден із них не мав нічого складного. Я працював з програмним забезпеченням протягом багатьох років, тому відчуваю, що я вирішую завдання з реалізації, якби я міг просто обернути голову навколо ідеї. Тому я, можливо, просто пропускаю щось очевидне.

Я прочитав статтю, яку опублікували автори [1], і я досяг непоганого прогресу, але продовжую зависати на цьому конкретному етапі роботи таблиці маршрутизації:

У роботі стверджується, що

Таблиця маршрутизації вузла, , організована у log 2 b N рядків з 2 b - 1 записами кожен. 2 б - 1 записи в рядку п таблиці маршрутизації кожен відносяться до вузла , чиє NodeId акцій NodeId нинішнього вузла в першому п цифри, але чиї п + - - го цифра має один з 2 б - 1 можливих значень, крім п + 1 - го цифра ідентифікатора нинішнього вузла.Rlog2bN2b12b1nn+12b1n+1

виступає за конкретного додатка, як правило , змінної 4 . Для простоти скористаємося b = 4 . Отже, сказане вищеb4b=4

Таблиця маршрутизації вузла, , організована у log 16 N рядків з 15 записами в кожному. Кожен з 15 записів у рядку n таблиці маршрутизації посилається на вузол, чий nodeId поділяє даний nodeId цього вузла на перших n цифрах, але чий n + 1- й розряд має одне з 2 b - 1 можливих значень, крім n + 1- а цифра в ідентифікаторі цього вузлаRlog16N1515nn+12b1n+1

Я так багато розумію. Далі, - кількість серверів кластеру. Я також це розумію.N

Моє запитання полягає в тому, що якщо рядок, в який розміщується запис, залежить від загальної довжини ключа, чому, здавалося б, випадковий ліміт кількості рядків? Кожен nodeId має 32 цифри, коли (128-бітний nodeIds поділений на цифри b біт). Отже, що відбувається, коли N стає досить високим, що log 16 N > 32 ? Я усвідомлюю, що для цього сценарію знадобиться 340,282,366,920,938,463,463,374,607,431,768,211,457 (якщо моя математика правильна), але це здається дивним включенням, і кореляція ніколи не пояснюється.b=4Nlog16N>32

Крім того, що станеться, якщо у вас є невелика кількість серверів? Якщо у мене менше 16 серверів, у мене є лише один рядок у таблиці. Далі, за жодних обставин, кожен запис у рядку не матиме відповідного сервера. Чи слід залишати записи порожніми? Я усвідомлюю, що мені вдасться знайти сервер у наборі листів незалежно від того, враховуючи те, що мало серверів, але однаковий складник піднімається для другого ряду - що робити, якщо у мене немає сервера, який має nodeId такий, що я можу заповнити всі можливі перестановки n-ї цифри? Нарешті, якщо у мене, скажімо, чотири сервери, і у мене є два вузли, які поділяють, скажімо, 20 з їхніх 32 цифр, якимось випадковим флюком ... я повинен заповнити 20 рядків таблиці для цього вузла, хоча це набагато більше рядків, ніж я міг навіть наблизитись до заповнення?

Ось що я придумав, намагаючись пояснити це:

  1. Записи повинні бути встановлені на нульове значення, якщо немає вузла, який точно відповідає цьому префіксу.
  2. Порожні рядки потрібно додати до тих пір, поки не буде достатньо рядків, щоб відповідати загальній довжині nodeIds.
  3. Якщо і лише у тому випадку, якщо для потрібного ідентифікатора повідомлення немає відповідного запису, поверніться до пошуку таблиці маршрутизації для nodeId, загальна довжина якого більше або дорівнює поточному nodeId, і запис якого математично ближче поточного nodeId до потрібного ідентифікатора.
  4. Якщо в №3 не знайдено відповідного вузла, припустимо, що це адресат і доставити повідомлення.

Чи всі ці припущення виконуються? Чи є десь ще я мушу шукати інформацію про це?


  1. Кондитерські вироби: масштабоване, децентралізоване розташування об'єктів та маршрутизація для масштабних однорангових систем А. Роустронга та П. Друшеля (2001) - завантажити тут

Ви кажете, що програмування мало. Стаття насправді не стосується програмування (безпосередньо), але є найкоротшим мережевим шляхом між двома вузлами. Отже, наступне питання: яку кількість мереж ви отримали? Це все про маршрутизацію по мережах.

Я фактично сказав, що вірю, що у мене достатньо досвіду програмування. Я відчуваю, що це досвід з інформатики. Незважаючи на те, у мене поруч немає досвіду роботи в мережі. Я не впевнений, що згоден з вашим твердженням, що це насамперед стосується мереж, але я хотів би почути ваші думки.

Відповіді:


5

Ідея таблиці маршрутизації в Pastry (і всі структуровані мережі P2P) полягає в тому, щоб мінімізувати її розміри, гарантуючи при цьому швидше маршрутизацію.

Алгоритм маршрутизації Pastry полягає в наступному:

Крок А. Вузол u шукає об’єкт A, спочатку шукаючи його у своєму наборі листів. Етап B. Якщо він був недоступний, запит пересилається на відомий вузол, який ділиться "кількістю префіксів з що принаймні більше, ніж той, що вузол u ділиться з A". Крок C. Якщо такий запис не знайдено, то запит направляється в вузол в наборі листа, чисельно ближче до A .АА

у зберігає адреси вузлів, організовує свою таблицю наступним чином:

iуiу .

2.Тепер (i+1)тгод біт записів ряду i унікальна і взята з набору {0,,2б-1}.

Приклад у типовому сценарії: якщо адреса u 1111 та об'єкт А має ідентифікатор 4324: тоді ось що буде: (ми припускаємо, що він є базовим з 4. (тобто адреси походять від [1-4] [1-4] [1-4] [1-4]).

Вузол у ділиться префіксом 0 з об'єктом А. Тому він виглядає в рядку 0. Відповідно до правила 2 вище, вузолузберігає адреси вузлів 1XXX, 2XXX, 3XXX, 4XXX, де X - значення "догляду". Найближчий серед цих вузлів доАстановить 4XXX. - Скажімо, це 4XXX насправді 4013. Тодіу вперед у1 з адресою 4013. Тепер ви повторите те ж саме ще раз у вузлі у1 з адресою 4013.

Щоб зробити це простіше, ось ще раз приклад того, як це піде в 4013 році. у1спочатку шукаємо префікс розміру між 4013 та 4324, який дорівнює 1. Отже, він переходить до рядка 1, який містить такі значення, як 41XX, 42XX, 43XX, 44XX. Замикається серед них доАстановить 43XX. - якщо це було 4331, то він буде спрямований до цього.

Максимальна кількість стрибків тут - 4 хмелю (XXXX)! з точки зору кондитерських виробів, це таклог2б. Так воно зменшується якбзбільшується. Але розмір рядків, які є2бзросте! - так це сказали авториб = 4 - хороший баланс!

Практичні сценарії зазвичай не є типовими для цього. Можуть виникнути ситуації, коли в мережі не так багато вузлів. саме тому ми слідуємо кроку С вище. - Однак те, що вам потрібно гарантувати, щоб зробити цей алгоритм правильним, це те, що кожен вузол буде підключений до найближчих до нього двох вузлів (в терміні ідентифікаторів). Це сформує кільце впорядкованих вузлів [наприклад, 1-> 3-> 4-> 9-> 10-> 11-> 1]


Not entirely what I was asking, but a very good overview of the algorithm gives you an upvote and accepted answer anyways. :)
Paddy
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.