2013-09-20 2 views
0

vbucket используется memcached для динамического добавления/удаления серверов. Мой вопрос в том, как это лучше, чем последовательное хеширование. Также при добавлении сервера и изменении состояния от ожидания до активного. Это делается сначала, а затем vbucket указывает на вновь добавленный сервер. Поэтому запросы, которые собирались старшим, должны будут появиться и на новых, и переключение должно произойти атомарно. Как ?Как vbucket решает проблему потери данных сервера во время переключения

ответ

2

Во-первых, я не считаю, что VBuckets действительно реализованы в memcached. Единственное место, где я знаю, что они используются, - это Couchbase, в котором есть кэширующий слой, подобный memcached, в Couchbase Bucket.

Мой вопрос: насколько это лучше, чем последовательное хеширование?

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

Как клиенты выяснить, куда посылать запросы, когда VBucket перемещается на другой сервер?

В Couchbase каждый клиент содержит карту, которая отображает VBuckets в IP-адреса. Клиент также имеет соединение с потоковым портом, который отправляет изменения карты VBucket. Когда клиент получает новую карту, он может обновляться там, куда направляются запросы.

+0

Вы правы, что vbucket реализован в couchbase, а внутренняя couchbase состоит только из memcached, которая сначала разработана Zynga (как Membase), и я там работаю. Я не понял, что вам нужно. В последовательном хешировании при добавлении сервера вы не переустанавливаете ключи. Вы просто добавляете сервер, и он начинает брать ключи, которые падают перед ним сейчас на ринге. – siddhusingh

+1

Прямо нет повторного хэширования, но в результате вы страдаете от проблемы с холодным кешем. Вместо того, чтобы объяснять это здесь, взгляните на эту статью http://dustin.sallings.org/2010/06/29/memcached-vbuckets.html, и если у вас все еще есть вопросы, дайте мне знать. – mikewied

+0

Да, вы снова правы :), но см. Компромисс. Когда сервер должен быть добавлен без работы на дому, то есть в срочном порядке, то ваше последовательное хеширование имеет преимущество, и вы делаете это: код может легко определить, куда идти, когда есть промашка, потому что добавлен новый сервер. У вас есть макс/мин связанная логика, чтобы выяснить, а затем вы можете перемещать данные лениво или от потребителей. – siddhusingh