2010-02-23 13 views
1

J'ai un ensemble de ressources dont chacune a un identifiant unique, et chaque élément de ressource doit être verrouillé avant d'être utilisé et déverrouillé par la suite. La logique de l'application est:zookeeper - verrouillage un-de-plusieurs

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

Zookeeper ressemble à un bon candidat pour la gestion de ces verrous, étant rapide et résistant, et il semble assez simple de se remettre de l'échec du client.

Quelqu'un peut-il penser comment je pourrais utiliser Zookeeper pour y parvenir?

Répondre

2

Que diriez-vous this-

vous avez des ressources dans le répertoire (disons/serrures)

chaque processus qui doit verrouiller, énumère tous les enfants de ce répertoire et crée alors un nœud éphémère appelé/locks/resource1/lock en fonction de quelle ressource il veut verrouiller. Il pourrait être randomisé sur l'ensemble des ressources.

Ce noeud éphémère sera supprimé par le processus dès qu'il sera terminé en utilisant la ressource . Un processus doit seulement utiliser resource_ {i} s'il a pu créer /locks/resource_ {i}/locks.

Est-ce que cela fonctionnerait?

Merci Mahadev

+0

Merci Mahadev, je pense que cela pourrait bien faire l'affaire. – Martin