Jump to content

Согласованное хеширование

(Перенаправлено со стабильного хеширования )

В информатике последовательное хеширование [1] [2] это особый вид метода хеширования , при котором при хеш-таблицы изменяется только изменении размера клавиши необходимо переназначить в среднем там, где количество ключей и это количество слотов. Напротив, в большинстве традиционных хеш-таблиц изменение количества слотов массива приводит к переназначению почти всех ключей, поскольку сопоставление между ключами и слотами определяется модульной операцией .

Согласованное хеширование равномерно распределяет ключи кэша по шардам , даже если некоторые из шардов выходят из строя или становятся недоступными. [3]

Термин «согласованное хеширование» был введен Дэвидом Каргером и др. в Массачусетском технологическом институте для использования в распределенном кэшировании , особенно для Интернета . [4] В этой научной статье 1997 года на Симпозиуме по теории вычислений был введен термин «согласованное хеширование» как способ распределения запросов среди меняющегося набора веб-серверов. [5] Затем каждый слот представляется сервером в распределенной системе или кластере. Для добавления сервера и удаления сервера (во время масштабирования или простоя) требуется только предметы, которые будут перетасованы при изменении количества слотов (т.е. серверов). Авторы упоминают линейное хеширование и его способность обрабатывать последовательное добавление и удаление серверов, в то время как последовательное хеширование позволяет добавлять и удалять серверы в произвольном порядке. [1] Позже документ был перепрофилирован для решения технической проблемы отслеживания файла в одноранговых сетях, таких как распределенная хеш-таблица . [6] [7]

Teradata использовала этот метод в своей распределенной базе данных, выпущенной в 1986 году, хотя и не использовала этот термин. Teradata до сих пор использует концепцию хеш-таблицы именно для этой цели. Akamai Technologies была основана в 1998 году учёными Дэниелом Льюином и Ф. Томсоном Лейтоном (соавторами статьи о «последовательном хешировании»). В сети доставки контента Akamai [8] согласованное хеширование используется для балансировки нагрузки внутри кластера серверов, а алгоритм стабильного брака используется для балансировки нагрузки между кластерами. [2]

Согласованное хеширование также использовалось для уменьшения влияния частичных сбоев системы в крупных веб-приложениях, чтобы обеспечить надежное кэширование без общесистемных последствий сбоя. [9] Согласованное хеширование также является краеугольным камнем распределенных хеш-таблиц (DHT), которые используют хеш-значения для разделения пространства ключей по распределенному набору узлов, а затем создают наложенную сеть связанных узлов, обеспечивающую эффективный поиск узлов по ключу.

Хеширование рандеву , разработанное в 1996 году, представляет собой более простой и общий метод. [ нужна ссылка ] . Он достигает целей последовательного хеширования, используя совершенно другой алгоритм наибольшего случайного веса (HRW).

Основная техника

[ редактировать ]
В этом случае использование последовательного хеширования приведет к тому, что «BLOB» будет сохранен на сервере 139. BLOB сопоставляется со следующим сервером, который появляется в круге по часовой стрелке, пока не достигнет сервера, который

в задаче балансировки нагрузки Например, , когда BLOB-объект должен быть назначен одному из серверов в кластере , можно использовать стандартную хеш-функцию таким образом, чтобы мы вычисляли хэш-значение для этого BLOB, предполагая, что результирующее значение хеш-функции равно , выполняем модульную работу с количеством серверов ( в данном случае), чтобы определить сервер, на котором мы можем разместить BLOB: ; следовательно, BLOB будет помещен на сервер, чей является преемником в этом случае. Однако когда сервер добавляется или удаляется во время простоя или масштабирования (когда изменения), все BLOB-объекты на каждом сервере должны быть переназначены и перемещены из-за перехэширования , но эта операция является дорогостоящей.

Согласованное хеширование было разработано, чтобы избежать проблемы переназначения каждого BLOB-объекта при добавлении или удалении сервера в кластере. Основная идея заключается в использовании хэш-функции, которая отображает как BLOB, так и серверы в единичный круг, обычно радианы. Например, (где — это хэш BLOB-объекта или идентификатора сервера, например IP-адреса или UUID ). Каждый BLOB затем назначается следующему серверу, который появляется в круге по часовой стрелке. Обычно алгоритм двоичного поиска или линейный поиск используются для поиска «пятна» или сервера для размещения этого конкретного BLOB-объекта. или сложности соответственно; и на каждой итерации, которая происходит по часовой стрелке, операция (где — значение сервера в кластере) выполняется для поиска сервера для размещения BLOB. Это обеспечивает равномерное распределение BLOB-объектов по серверам. Но, что еще более важно, если сервер выйдет из строя и будет удален из круга, только те BLOB-объекты, которые были сопоставлены с вышедшим из строя сервером, необходимо будет переназначить следующему серверу по часовой стрелке. Аналогично, если добавляется новый сервер, он добавляется в единичный круг, и переназначать необходимо только BLOB-объекты, сопоставленные с этим сервером.

Важно отметить, что при добавлении или удалении сервера подавляющее большинство BLOB-объектов сохраняют свои предыдущие назначения серверов, а добавление сервер вызывает только часть BLOB-объектов для перемещения. Хотя процесс перемещения BLOB-объектов между кэш-серверами в кластере зависит от контекста, обычно вновь добавленный кэш-сервер идентифицирует своего «преемника» и перемещает все BLOB-объекты, сопоставление которых принадлежит этому серверу (т. е. чье хэш-значение меньше этого значения). нового сервера), с него. Однако в случае кэшей веб-страниц в большинстве реализаций перемещение или копирование не требуется, при условии, что кэшированный BLOB-объект достаточно мал. Когда запрос попадает на вновь добавленный кэш-сервер, происходит промах кэша , и выполняется запрос к фактическому веб-серверу , а BLOB-объект кэшируется локально для будущих запросов. Избыточные BLOB-объекты на ранее использовавшихся серверах кэша будут удалены в соответствии с политикой вытеснения кэша . [10]

Выполнение

[ редактировать ]

Позволять и — хеш-функции, используемые для BLOB-объекта и уникального идентификатора сервера соответственно. На практике двоичное дерево поиска (BST) используется для динамического поддержания внутри кластера или хэширования, а для поиска преемника или минимума в BST обход дерева используется .

Вставка в кластер
Позволять быть хеш-значением BLOB-объекта, таким образом, что где и . Чтобы вставить , найдите преемника в BST с. Если больше, чем все s, BLOB размещается на сервере с наименьшим ценить.
Удаление из кластера
Найдите преемника в BST удалите BLOB из возвращенного . Если не имеет преемника, удалите BLOB из наименьшего из с. [11]
Вставляем сервер в кластер
Позволять быть хеш-значением идентификатора сервера, таким образом, где и . Переместите все BLOB-объекты, хеш-значение которых меньше , с сервера, чей является преемником . Если является крупнейшим из всех s, переместите соответствующие BLOB-объекты из наименьшего из в . [12]
Удалить сервер из кластера
Найдите преемника в BST переместите BLOB-объекты из на его последующий сервер. Если не имеет преемника, переместите BLOB-объекты в самый маленький из с. [13]

Уменьшение дисперсии

[ редактировать ]

Чтобы избежать асимметрии нескольких узлов внутри радиана, которая возникает из-за отсутствия равномерного распределения серверов внутри кластера, используются несколько меток. Эти повторяющиеся метки называются «виртуальными узлами», т.е. несколько меток, которые указывают на одну «настоящую» метку или сервер в кластере. Количество виртуальных узлов или повторяющихся меток, используемых для конкретного сервера в кластере, называется «весом» этого конкретного сервера. [14]

Практические расширения

[ редактировать ]

Для эффективного использования согласованного хеширования для балансировки нагрузки на практике необходим ряд расширений базового метода. В приведенной выше базовой схеме в случае сбоя сервера все его BLOB-объекты переназначаются следующему серверу по часовой стрелке, что потенциально увеличивает нагрузку на этот сервер вдвое. Это может быть нежелательно. Чтобы обеспечить более равномерное перераспределение BLOB-объектов в случае сбоя сервера, каждый сервер можно хешировать в несколько мест на единичном круге. В случае сбоя сервера BLOB-объекты, назначенные каждой из его реплик в единичном круге, будут переназначены другому серверу по часовой стрелке, что перераспределит BLOB-объекты более равномерно. Другое расширение касается ситуации, когда один BLOB становится «горячим», к нему обращаются большое количество раз и его необходимо разместить на нескольких серверах. В этой ситуации BLOB-объект может быть назначен нескольким смежным серверам путем прохождения единичного круга по часовой стрелке. Более сложное практическое рассмотрение возникает, когда два BLOB-объекта хэшируются рядом друг с другом в единичном круге и оба становятся «горячими» одновременно. В этом случае оба BLOB-объекта будут использовать один и тот же набор смежных серверов в единичном круге. Эту ситуацию можно улучшить, если каждый BLOB выберет другую хэш-функцию для сопоставления серверов с единичным кругом. [2]

Сравнение с рандеву-хешированием и другими альтернативами

[ редактировать ]

Хэширование рандеву , разработанное в 1996 году, представляет собой более простой и общий метод, позволяющий полностью распределять соглашения по набору варианты из возможного набора параметры. Фактически можно показать , что согласованное хеширование является частным случаем рандеву-хеширования. Из-за своей простоты и универсальности рандеву-хеширование теперь используется во многих приложениях вместо последовательного хеширования.

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

Сложность

[ редактировать ]
Асимптотические временные сложности для узлы (или слоты) и ключи
Классическая хеш-таблица Согласованное хеширование
добавить узел
удалить узел
найти ключ
добавить ключ
удалить ключ

The — это средние затраты на перераспределение ключей и Сложность последовательного хеширования связана с тем, что двоичный поиск среди углов узлов. для поиска следующего узла на кольце требуется [ нужна ссылка ]

Известные примеры использования последовательного хеширования включают:

  1. ^ Jump up to: Перейти обратно: а б Каргер, Д.; Леман, Э.; Лейтон, Т .; Паниграхи, Р.; Левин, М.; Левин, Д. (1997). Согласованное хеширование и случайные деревья: протоколы распределенного кэширования для устранения «горячих точек» во Всемирной паутине . Труды двадцать девятого ежегодного симпозиума ACM по теории вычислений . ACM Press Нью-Йорк, Нью-Йорк, США. стр. 654–663. дои : 10.1145/258533.258660 .
  2. ^ Jump up to: Перейти обратно: а б с Брюс Мэггс и Рамеш Ситараман (2015). «Алгоритмические самородки в доставке контента» (PDF) . Обзор компьютерных коммуникаций ACM SIGCOMM . 45 (3).
  3. ^ Проектирование шаблонов и парадигм распределенных систем для масштабируемых и надежных сервисов . О'Рейли Медиа. 2018. ISBN  9781491983607 .
  4. ^ Roughgarden & Valiant 2021 , с. 2.
  5. ^ Roughgarden & Valiant 2021 , с. 7.
  6. ^ Roughgarden & Valiant 2021 , с. 8.
  7. ^ И. Стойка и др., «Chord: масштабируемый протокол однорангового поиска для интернет-приложений», в IEEE/ACM Transactions on Networking, vol. 11, нет. 1, стр. 17–32, февраль 2003 г., doi: 10.1109/TNET.2002.808407.
  8. ^ Нигрен., Э.; Ситараман Р.К.; Сан, Дж. (2010). «Сеть Akamai: платформа для высокопроизводительных интернет-приложений» (PDF) . Обзор операционных систем ACM SIGOPS . 44 (3): 2–19. дои : 10.1145/1842733.1842736 . S2CID   207181702 . Архивировано (PDF) из оригинала 30 ноября 2022 г. Проверено 29 августа 2023 г.
  9. ^ Каргер, Д.; Шерман, А.; Беркхаймер, А.; Богстад, Б.; Данидина, Р.; Ивамото, К.; Ким, Б.; Маткинс, Л.; Йерушалми, Ю. (1999). «Веб-кэширование с последовательным хешированием» . Компьютерные сети . 31 (11): 1203–1213. дои : 10.1016/S1389-1286(99)00055-9 . Архивировано из оригинала 21 июля 2008 г. Проверено 5 февраля 2008 г.
  10. ^ Roughgarden & Valiant 2021 , с. 6.
  11. ^ Мойтра 2016 , с. 2.
  12. ^ Мойтра 2016 , с. 2–3.
  13. ^ Мойтра 2016 , с. 3.
  14. ^ Roughgarden & Valiant 2021 , с. 6–7.
  15. ^ «Что такое мембаза?» . 16 декабря 2014 года . Проверено 29 октября 2020 г.
  16. ^ Холт, Грег (февраль 2011 г.). «Создание согласованного кольца хеширования» . сайт openstack.org . Проверено 17 ноября 2019 г.
  17. ^ ДеКандиа, Дж.; Хасторун, Д.; Джампани, М.; Какулапати, Г.; Лакшман, А.; Пильчин А.; Сивасубраманиан, С.; Восшалл, П.; Фогельс, Вернер (2007). «Динамо» (PDF) . Обзор операционных систем ACM Sigops . 41 (6): 205–220. дои : 10.1145/1323293.1294281 . Проверено 7 июня 2018 г.
  18. ^ Лакшман, Авинаш; Малик, Прашант (2010). «Кассандра: децентрализованная структурированная система хранения». Обзор операционных систем ACM SIGOPS . 44 (2): 35–40. дои : 10.1145/1773912.1773922 . S2CID   916681 .
  19. ^ «Сравнение NoSQL: MongoDB и ScyllaDB» . benchant.com . Проверено 21 марта 2024 г.
  20. ^ «Дизайн — Волдеморт» . www.project-voldemort.com/ . Архивировано из оригинала 9 февраля 2015 года . Проверено 9 февраля 2015 г. Согласованное хеширование — это метод, который позволяет избежать этих проблем, и мы используем его для вычисления местоположения каждого ключа в кластере.
  21. ^ «Акка Роутинг» . akka.io. ​Проверено 16 ноября 2019 г.
  22. ^ «Концепции Риак» . Архивировано из оригинала 19 сентября 2015 г. Проверено 6 декабря 2016 г.
  23. ^ «Алгоритмы GlusterFS: Распространение» . gluster.org . 01.03.2012 . Проверено 16 ноября 2019 г.
  24. ^ Рафгарден, Тим; Валиант, Грегори (28 марта 2016 г.). «Современный набор инструментов для алгоритмов» (PDF) . Стэнфорд.edu . Проверено 17 ноября 2019 г.
  25. ^ Вишневский, Станислав (06.07.2017). «Как Discord увеличил число одновременных пользователей Elixir до 5 000 000» . Проверено 16 августа 2022 г.
  26. ^ «Последовательная балансировка хэш-нагрузки для gRPC» . 24 ноября 2021 г. Проверено 4 сентября 2023 г.
  27. ^ Стойка, И .; Моррис, Р.; Либен-Ноуэлл, Д.; Каргер, Д.; Каашук, МФ; Дабек, Ф.; Балакришнан, Х. (25 февраля 2003 г.). «Chord: масштабируемый протокол однорангового поиска для интернет-приложений». Транзакции IEEE/ACM в сети . 11 (1): 17–32. дои : 10.1109/TNET.2002.808407 . S2CID   221276912 .
  28. ^ «Управление версиями MinIO, метаданные и хранилище» . Проверено 24 октября 2023 г.

Цитируемые работы

[ редактировать ]
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 385297915caa1b068ff16541113cf680__1716868800
URL1:https://arc.ask3.ru/arc/aa/38/80/385297915caa1b068ff16541113cf680.html
Заголовок, (Title) документа по адресу, URL1:
Consistent hashing - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)