У меня есть ряд ресурсов, каждый из которых имеет уникальный идентификатор и каждый элемент ресурса, должен быть заблокирован, прежде чем он будет использоваться и разблокирован впоследствии. Логика приложения:
lock any one element;
if (none locked) then
exit with error;
else
get resource-id from lock
use resource
unlock resource
end
Служитель зоопарка похож на хорошего кандидата на управление этими блокировками, будучи быстрым и эластичным, и кажется довольно простым восстановиться с клиентского отказа.
Кто-либо может думать, как я мог использовать Служителя зоопарка для достижения этого?
Как насчет этого -
у вас есть ресурсы в каталоге (скажем, / locks)
каждый процесс, который необходимо заблокировать , перечисляет все дочерние элементы этого каталога , а затем создает временный узел с именем / locks / resource1 / lock в зависимости от , какой ресурс он хочет заблокировать. Он может быть рандомизирован по набору ресурсов.
Этот эфемерный узел будет удален процессом, как только он будет использовать ресурс. Процесс должен использовать to resource_ {i} только в том случае, если он смог создать / locks / resource_ {i} / locks.
Это сработает?
Спасибо, mahadev