Как vbucket решает проблему потери данных сервера при переключении
vbucket используется memcached для динамического добавления / удаления серверов. Мой вопрос, как это лучше, чем последовательное хеширование? Также, когда сервер добавлен и состояние изменяется с Ожидание на Активное. Сначала это делается, а затем vbucket указывает на вновь добавленный сервер. Так что запросы, которые шли к старым, должны будут приходить и к новым, и переключение должно происходить атомарно. Как?
1 ответ
Прежде всего, я не верю, что VBuckets действительно были реализованы в memcached. Единственное место, где я знаю, что они используются, находится в Couchbase, в котором есть кэширующий слой, похожий на memcached, в его Couchbase Bucket.
Мой вопрос, как это лучше, чем последовательное хеширование?
VBuckets лучше, чем согласованное хеширование, потому что их легче перемещать между серверами, чем отдельными ключами. Если вы полагаетесь на согласованное хеширование, то если вы хотите перейти с двух серверов на три, то единственный способ сделать это - перефразировать каждый ключ в системе на новый набор серверов. Если у вас есть VBuckets, вам нужно переместить только несколько VBuckets на новый сервер. По сути, это дает простой способ определить, какие ключи необходимо переместить, и вы можете избежать посещения каждого ключа в кластере.
Как клиенты выясняют, куда отправлять запросы, когда VBucket перемещается на другой сервер?
В Couchbase каждый клиент содержит карту, которая отображает VBuckets на IP-адреса. Клиент также имеет соединение с потоковым портом, который отправляет изменения карты VBucket. Когда клиент получает новую карту, он может обновить, куда направляются запросы.