Чи може хтось дати пояснення, як працює DHT?
Нічого занадто важкого, лише основи.
Чи може хтось дати пояснення, як працює DHT?
Нічого занадто важкого, лише основи.
Відповіді:
Гаразд, вони принципово досить проста ідея. DHT надає інтерфейс, подібний до словника, але вузли розподіляються по мережі. Хитрість DHT полягає в тому, що вузол, який потрапляє для зберігання певного ключа, знайдеться шляхом хешування цього ключа, тому фактично ваші відрізки хеш-таблиць тепер є незалежними вузлами в мережі.
Це дає багато відмовостійкості та надійності та, можливо, певну користь від продуктивності, але також призводить до багатьох головних болів. Наприклад, що відбувається, коли вузол залишає мережу, виходячи з ладу чи іншим чином? І як ви перерозподіляєте клавіші, коли вузол приєднується, щоб навантаження приблизно збалансоване. Подумайте про це, як ви рівномірно розподіляєте ключі? А коли вузол приєднується, як уникнути повторної повторної переробки? (Пам'ятайте, що вам доведеться зробити це в звичайній хеш-таблиці, якщо збільшите кількість відра).
Одним із прикладів DHT, який вирішує деякі з цих проблем, є логічне кільце з n вузлів, кожен з яких несе відповідальність за 1 / n простору клавіш. Після того, як ви додасте вузол до мережі, він знайде місце на кільці, щоб сидіти між двома іншими вузлами, і бере на себе відповідальність за деякі клавіші у своїх братів. Краса такого підходу полягає в тому, що жоден з інших вузлів в кільці не зачіпається; лише два вузли братів мають перерозподілити ключі.
Наприклад, скажімо, що в кільці з трьох вузлів перший вузол має ключі 0-10, другий 11-20 і третій 21-30. Якщо з'являється четвертий вузол і вставляється між вузлами 3 і 0 (пам’ятайте, вони знаходяться в кільці), він може взяти на себе відповідальність за скажімо половину клавіш 3, тому тепер він займається 26-30, а вузол 3 - угодами з 21 -25.
Існує багато інших структур накладання, таких як ця, що використовують маршрутизацію на основі вмісту, щоб знайти потрібний вузол, на якому зберігати ключ. Для знаходження ключа в кільці потрібен пошук навколо кільця по одному вузлу (якщо ви не зберігаєте локальну таблицю огляду, проблематичну в DHT тисячах вузлів), що є маршрутизацією O (n) -hop. Інші конструкції - включаючи доповнені кільця - гарантують маршрутизацію O (log n) -hop, а деякі претензії до O (1) -hop маршрутизації ціною більшого обслуговування.
Прочитайте сторінку вікіпедії, і якщо ви дійсно хочете дізнатися трохи глибше, перегляньте цю сторінку курсу в Гарварді, яка має досить вичерпний список для читання.
DHT надають користувачеві такий же тип інтерфейсу, що і звичайний хешбел (шукайте значення за ключем), але дані розподіляються по довільній кількості підключених вузлів. У Вікіпедії є гарне основне вступ, що я, по суті, буду регургітувати, якщо напишу більше -
Я хотів би додати корисну відповідь Генріра, оскільки я просто зрозумів послідовне хеширование. Нормальний / наївний пошук хешу - це функція двох змінних, одна з яких - кількість відро. Краса послідовного хешування полягає в тому, що ми виключаємо кількість відра "n" з рівняння.
При наївному хешировании перша змінна - це ключ об'єкта, який потрібно зберігати в таблиці. Ми будемо називати клавішу "x". Друга змінна - це кількість відра, "n". Отже, щоб визначити, у якому відрі / машині зберігається об’єкт, потрібно обчислити: hash (x) mod (n). Тому, змінюючи кількість відра, ви також змінюєте адресу, за якою зберігається майже кожен об’єкт.
Порівняйте це з послідовним хешированием. Давайте визначимо "R" як діапазон хеш-функції. R - лише якась константа. У послідовному хешировании адреса об'єкта розташована на хеш (х) / R. Оскільки наш пошук більше не є функцією кількості відра, ми закінчуємо меншим перезаписом, коли змінюємо кількість відра.
hash(x)/R
дає 34500. Ще потрібно зробити 34500% 3 .