Question

Ce qui a distribué verrouillez utiliseriez-vous?

Les exigences sont:

  1. Une exclusion mutuelle (verrouillage) qui peut être vu à partir de différents processus / machines
  2. sémantique serrure ... PUBLIE
  3. libération de verrouillage automatique après un certain délai - si le titulaire de verrouillage meurt, il sera automatiquement libéré après X secondes
  4. implémentation Java
  5. Très agréable d'avoir: la mise en œuvre .Net
  6. Si c'est gratuit: détection / atténuation Deadlock
  7. Déploiement facile, voir 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, hors-the-box, la mise en œuvre éprouvée.

Était-ce utile?

La solution

Teracotta , y compris l'édition Open Source, a distribué la sémantique de verrouillage à l'aide soit le ou synchronized java.util.concurrent.ReentrantReadWriteLock -. ce dernier montage apparemment vos besoins


Mise à jour

Depuis la question maintenant ajouté l'exigence de « mélange » avec GigaSpaces, je vais dire ne pas les mélanger. Il va tout simplement ajouter plus de complexité à votre pile technologique, et l'effort de:

  • intégrer, en termes de code et l'infrastructure;
  • gestion de la synchronisation entre eux;
  • apprentissage / réglage / mise au point Teracotta.

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

Autres conseils

Un enfant plus récent sur le bloc est Hazelcast . Je joue avec lui et il est incroyablement simple à utiliser et à configurer.

Pour autant que je peux voir qu'il ne devrait pas y avoir de conflit entre GigaSpaces et Hazelcast comme Hazelcast n'a pas de dépendances dire pas jgroups.jar etc

Hazelcast :

  1. Une exclusion mutuelle (verrouillage), yep mise en œuvre de java.util.concurrency.locks.Lock
  2. libération de verrouillage automatique après un certain délai d'attente, eh oui tous les verrous sont libérés si un membre quitte le cluster
  3. implémentation Java, yep
  4. Très agréable d'avoir: la mise en œuvre .Net, est une solution Nope pure java, peut-être possible de port j #
  5. Si c'est gratuit: détection / atténuation Deadlock, Nope aucun effort est fait mon Hazelcast pour gérer cette
  6. Déploiement facile, il est un pot avec un seul fichier de configuration, déployé dans le cadre de votre application, aucun processus supplémentaires sont nécessaires

Consultez Apache Zookeeper (Un sous-projet Hadoop) - il offre la synchronisation distribuée. La documentation est pas grande, mais ce qu'il y a fait paraître un produit intéressant -. Passer la commande recettes pour des idées sur la façon d'utiliser Zookeeper

Il est inférieur au niveau que vous ne voulez probablement et il ne nécessite le déploiement supplémentaire car il recommande des serveurs dédiés.

Vous pouvez modéliser différentes stratégies de verrouillage et apporte une solution pour un support de verrouillage en train de mourir (nœuds éphémères).

Je recommande d'utiliser Redisson il est un Redis , fondée sur une mémoire de grille de données. Il met en œuvre des structures de données Java connues, y compris distribués et java.util.Lock objets java.util.concurrent.ReentrantReadWriteLock. Y compris la capacité de leaseTime de configuration. Exemple d'utilisation Lock:

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();

Prend en charge les fournisseurs de cloud comme Azure et AWS.

ZooKeeper est devenu une norme de facto dans le verrouillage distribué avec l'aide de cadre du conservateur Apache. Consultez les verrous dans recettes pour plus d'informations.

Oracle Coherence, qui est très stable et mature, inclut le support d'exclusion mutuelle:

  cache.lock(key, -1);
    try {
      // .. add your critical code here
    } finally {
      cache.unlock(key);
    }

Serrures survivent aux pannes de serveur, le matériel redémarre, etc.

Par souci de divulgation complète, je travaille chez Oracle. Les avis et opinions exprimées dans cet article sont mes propres, et ne reflètent pas nécessairement les opinions ou les opinions de mon employeur.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top