59 votes

Service de verrouillage distribué

Distribué serrure service utilisez-vous?

Les exigences sont les suivantes:

  1. Une exclusion mutuelle (lock) qui peut être vu à partir de différents processus/machines
  2. serrure...la libération de la sémantique
  3. Verrouillage automatique de presse après un certain délai d'attente - si le verrouillage décès du détenteur, il sera automatiquement libéré au bout de X secondes
  4. L'implémentation Java
  5. Sympa d'avoir: .Net de la mise en œuvre
  6. Si c'est gratuit: détection de Blocage / atténuation
  7. Facilité de déploiement, voir la note ci-dessous.

Je ne suis pas intéressé par des réponses comme "il peut être fait sur une base de données", ou "il peut être fait sur JavaSpaces" - je sais. Je suis intéressé par un prêt, out-of-the-box, éprouvée de mise en œuvre.

23voto

Gareth Davis Points 16190

Une nouvelle gosse sur le bloc est hazelcast. J'ai joué avec lui et il est incroyablement simple à utiliser et à configurer.

Aussi loin que je peux voir, il ne devrait pas y avoir de conflit entre Gigaspaces et hazelcast comme hazelcast n'a pas de dépendances c'est à dire aucune jgroups.jar etc

Hazelcast:

  1. Une exclusion mutuelle (lock), yep mise en œuvre de l' java.util.concurrency.locks.Lock
  2. Verrouillage automatique de presse après un certain délai d'attente, et oui tous les verrous sont relâchés si un membre quitte le cluster
  3. L'implémentation Java, yep
  4. Sympa d'avoir: .Net mise en œuvre, nan est un pur java solution, peut-être possible, du port, j#
  5. Si c'est gratuit: détection de Blocage / atténuation, non, aucun effort n'est fait mon Hazelcast pour gérer ce
  6. Déploiement facile, c'est un seul pot avec un seul fichier de configuration, déployé dans le cadre de votre application, aucun processus supplémentaires sont nécessaires

12voto

Robert Munteanu Points 31558

Teracotta, y compris l'Open Source edition, a distribué la sémantique de verrouillage en utilisant synchronized ou java.util.concurrent.ReentrantReadWriteLock - le dernier apparemment adapté à vos exigences.


Mise à jour

Puisque la question est maintenant ajouté à l'exigence de "mélange" avec GigaSpaces, je vais dire ne pas les mélanger. Il va juste pour ajouter de la complexité à votre technologique de la pile, et l'effort de:

  • l'intégration, en termes de qualité du code et de l'infrastructure;
  • la gestion de la synchronisation entre eux;
  • apprentissage/réglage/débogage Teracotta.

sera mieux dépensé lors de la création ou de la mise en œuvre d'une solution de verrouillage basé sur GigaSpaces.

8voto

Nikita Koksharov Points 1552

Je recommande d'utiliser Redisson basé sur le serveur Redis . Il implémente des structures de données Java bien connues, notamment java.util.Lock avec des capacités distribuées et évolutives. Y compris la possibilité de configurer bailTime. Exemple d'utilisation:

 Config config = new Config();
// for single server
config.useSingleServer()
      .setAddress("127.0.0.1:6379");
// or 
// for master/slave servers
config.useSentinelConnection()
      .setMasterName("mymaster")
      .addSentinelAddress("127.0.0.1:26389", "127.0.0.1:26379");

Redisson redisson = Redisson.create(config);

Lock lock = redisson.getLock("anyLock");
try {
   // unlock automatically after 10 seconds of hold
   lock.lock(10, TimeUnit.SECONDS);

} finally {
   lock.unlock();
}

...

redisson.shutdown();
 

2voto

frail Points 3196

zookeper est devenu un standard de facto en matière de verrouillage distribué à l’aide du cadre de conservation . Découvrez les serrures dans les recettes pour plus d'informations.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X