2013-07-31 5 views
5

Я использую spymemcached & HashAlgorithm.KETAMA_HASH для подключения к пулу memcached из 5 узлов.Как справиться с восстанавливаемыми memcached узлами при использовании spymemcached и HashAlgorithm.KETAMA_HASH

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

Что делать, если при сокращенный узел собирается присоединиться к пулу. Что мне нужно сделать?

Должен ли я быть уверенным, что устаревшие данные необходимо удалить? Или должна ли моя программа нуждаться в специальной обработке для этого случая?

ответ

4

Учитывая, что этот документ является точным: http://info.couchbase.com/rs/northscale/images/Couchbase_WP_Dealing_with_Memcached_Challenges.pdf

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

Предполагая, что это все еще до даты: http://lists.danga.com/pipermail/memcached/2007-April/003852.html Было бы безопасно обновить/очистить узел, прежде чем добавить его обратно. Принуждение узла вниз для очистки любой устаревшей записи.

+0

Я понимаю, что мне нужно очистить все устаревшие данные во всех узлах. Зачем? Потому что некоторые клиенты могут видеть, что вниз-вверх узел вверх, но некоторые клиенты могут все еще предположить, что узел опущен. Поэтому, учитывая, что клиенты могут использовать хэш-ключ в другом узле, может возникнуть несогласованность данных. Но эта проблема сложна, если у нас нет возможности заблокировать все узлы memcached и выполнить флеш - чтобы избежать состояния гонки. – Howard

+0

Основываясь на моем мнении, я думаю, что безопасно только очистить узел вниз. Это чисто, если есть какой-либо запрос к узлу, это приведет к промаху, добавив новую и свежую информацию. Если клиент считает, что он не работает, он будет хешировать на другом узле, что также приведет к промаху. Если это произойдет, у обоих узлов есть ключ «foo», например. Когда нисходящий узел возвращается к этому клиенту, вам нужно снова его очистить. Вот еще об этом: http://www.caiapps.com/duplicate-key-problem-in-memcache-php/ –

+1

да, но то, что вы сказали, было действительным только тогда, когда у вас есть один клиент, но несколько серверов. нет способа координировать различные клиенты для использования одного и того же набора серверов memcached в определенный момент времени (предположим, что используется последовательное хеширование). – Howard

 Смежные вопросы

  • Нет связанных вопросов^_^