Как реализовать секвенсоры блокировки в стиле Chubby с помощью ZooKeeper? - PullRequest
5 голосов
/ 10 января 2012

Менеджер распределенных блокировок Google Chubby имеет функцию под названием «секвенсоры», которую я хотел бы эмулировать с помощью ZooKeeper. Есть ли известный хороший способ сделать это?

Секвенсор работает следующим образом:

  1. Клиент получает блокировку на ресурсе
  2. Клиент запрашивает секвенсор для его блокировки, который представляет собой строку с некоторыми метаданными
  3. Клиент вызывает сервис и передает секвенсор в качестве параметра
  4. Служба использует секвенсор для проверки того, что клиент все еще удерживает блокировку перед обработкой запроса

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

Основной документ о Chubby доступен по адресу http://research.google.com/archive/chubby.html. Секвенсоры обсуждаются в разделе 2.4.

Спасибо!

1 Ответ

6 голосов
/ 10 января 2012

рецепты блокировки zookeeper все включают процесс блокировки, создающий последовательный эфемерный znode . Имя последовательного эфемерного znode будет уникальным, и znode перестанет существовать, если истечет время сеанса локеров из-за того, что локер не отправил действительное сердцебиение в течение тайм-аута.

Таким образом, процесс блокировки просто должен передать имя последовательного эфемерного znode, созданного им во время блокировки, удаленной службе, и удаленная служба может проверить существование znode перед обработкой.

Вы даже можете сделать так, чтобы удаленная служба добавила часы в znode и была уведомлена об удалении znode.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...