зоопарк - блокировка один из многих - PullRequest
1 голос
/ 23 февраля 2010

У меня есть набор ресурсов, каждый из которых имеет уникальный идентификатор, и каждый элемент ресурса должен быть заблокирован перед его использованием, а затем разблокирован. Логика приложения:

lock any one element;
if (none locked) then 
   exit with error;
else
   get resource-id from lock
   use resource
   unlock resource
end

Zookeeper выглядит хорошим кандидатом для управления этими блокировками, он быстр и надежен, а восстановление после сбоя клиента кажется довольно простым.

Кто-нибудь может подумать, как я мог бы использовать Zookeeper для достижения этой цели?

1 Ответ

2 голосов
/ 23 февраля 2010

Как насчет этого -

у вас есть ресурсы в каталоге (скажем, / locks)

каждый процесс, который необходимо заблокировать, перечисляет все дочерние элементы этого каталога а затем создает эфемерный узел с именем / locks / resource1 / lock в зависимости от какой ресурс он хочет заблокировать. Это может быть рандомизировано на множестве ресурсов.

Этот эфемерный узел будет удален процессом, как только он будет завершен с использованием ресурс. Процесс должен использовать только для resource_ {i}, если он был в состоянии Создайте /locks/resource_ndomi‹/locks.

Будет ли это работать?

Спасибо Махадев

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