ZooKeeper est un service de coordination hautement disponible pour les centres de données. Il est né du projet Hadoop. On peut implémenter le verrouillage, le basculement, l'élection d'un leader, l'appartenance à un groupe et d'autres problèmes de coordination. Existe-t-il des alternatives à ZooKeeper? (logiciel gratuit bien sûr)
J'ai beaucoup regardé Zookeeper/ Curator , Eureka , etcd , et consul. Zookeeper/Curator et Eureka sont à bien des égards les plus raffinés et les plus faciles à intégrer si vous êtes dans le monde Java. Etcd est assez cool et très flexible, mais il est vraiment juste un magasin de clés HA, vous devrez donc écrire beaucoup de code pour le transformer en un système de découverte de services avisé.
Consul est (pour moi) le meilleur des deux mondes. Il s'agit d'un système de découverte de services avisé écrit au-dessus de serf , utilisant radeau pour le consensus de cluster et potins pour la communication. Il expose les points de terminaison de découverte/enregistrement avec une API bien documentée REST, et vous permet également de découvrir des services avec des enregistrements DNS SRV et d'enregistrer des services avec une configuration (c'est-à-dire afin que vous puissiez enregistrer une base de données ou une application vous ne pouvez pas intégrer un client avec, ou si vous voulez simplement que votre découverte de service soit découplée de votre application)
J'ai écrit un article de blog sur le consul où vous pouvez en savoir plus et parcourir ma démo "essayez-le"
J'ai également discuté découverte de service avec etcd & docker si vous voulez en savoir plus sur ce à quoi pourrait ressembler ce code personnalisé.
Une dernière chose! etcd & consul sont écrits en go, donc les maintenir est beaucoup plus facile que Java solutions comme zookeeper. Tout ce dont vous avez besoin est le binaire consul/etcd. pas de dépendances, pas de bibliothèques liées, pas de jvm.
Il existe une alternative très prometteuse à ZooKeeper appelée etcd (github.com/coreos/etcd) , écrite par l'équipe CoreOS. Contrairement à Doozerd, etcd est activement développé.
Je viens de découvrir Accord (C) et OpenReplica/ConCoord (Python) qui peuvent être des solutions intéressantes
[EDIT] L'équipe de Hashicorp, de renommée Vagrant et Packer, prépare "une solution décentralisée pour la découverte et l'orchestration de services" appelée Serf .
[EDIT2] Hashicorp frappe à nouveau! Ils viennent de sortir Consul , construit sur Serf. Le pitch: "une solution de découverte et de configuration de services, entièrement distribuée, hautement disponible, évolutive à des milliers de nœuds et de services sur plusieurs centres de données".
Oui, il y a aussi Doozerd (https://github.com/ha/doozerd) . Regardez-le bien, c'est un service de coordination distribué binaire unique et développé par Heroku. Avec des liaisons/bibliothèques pour Java/python/Ruby/node. Très facile à démarrer et à jouer.
OpenReplica de mon groupe de recherche est un service de coordination FOSS hautement disponible pour les centres de données. Il peut être utilisé pour mettre en œuvre le verrouillage, le basculement, l'élection de leaders, l'appartenance à un groupe et d'autres services de coordination. Il diffère de ZooKeeper de deux manières essentielles:
Il utilise une API orientée objet. Cela facilite beaucoup la rédaction des services de coordination. Le code de synchronisation pour OpenReplica ressemble exactement à son homologue de manuel; il n'est pas nécessaire de maîtriser un fichier et une API basée sur upcall comme dans ZooKeeper et Chubby.
Il permet des mises à jour d'appartenance dynamiques au jeu de réplicas. Aucun fichier de configuration statique n'est nécessaire. Le système est intégré dans DNS (faisant autorité, esclave pour OpenReplica ou Amazon Route 53).
Nous soutenons activement le système, n'hésitez pas à nous faire part de vos questions.
J'avais trouvé cette comparaison de Zookeeper, etcd et Doozer: http://devo.ps/blog/zookeeper-vs-doozer-vs-etcd/
Serf (serfdom.io) est aussi une belle solution car c'est simple! Mais vous devez considérer, SERF est juste un gestionnaire de cluster qui vous permet d'envoyer des événements personnalisés à tous les nœuds de cluster. C'est bien, mais vous devez écrire vos propres scripts Shell (aussi appelés événements). Voir cet exemple: " https://www.digitalocean.com/community/articles/how-to-set-up-a-serf-cluster-on-several-ubuntu-vps "
L'avantage est que vous obtenez un gestionnaire de cluster très simple et que vous pouvez le combiner avec votre outil de configuration, de déploiement ou d'intégration continue préféré.
Il y a un projet appelé Noah sur github qui semble intéressant, il dit qu'il est "vaguement basé sur Apache ZooKeeper" https://github.com/lusis/Noah avec REST = le support étant une fonctionnalité clé (ZK a ceci comme une contrib/option plutôt que intégrée).
Il existe différents outils qui optimisent pour différents compromis d'ingénierie.
Les autres sont quelque peu intéressants mais généralement non prouvés. Ne vous méprenez pas s'il est destiné à une utilisation en production.
Je sais que ce message est assez ancien, mais quelqu'un qui cherche toutes les alternatives possibles, je voudrais également suggérer la bibliothèque JGroups qui est suffisamment mature pour être utilisée dans un environnement de production. Je l'ai utilisé avec succès dans l'un de mes projets principalement pour la coordination distribuée et pour partager des messages entre clusters. Il prend également en charge le support AWS en plus de son architecture flexible où vous pouvez personnaliser sa pile pour obtenir ce dont vous avez besoin. Je vous suggère de regardez-le
Il semble Corosync est également comme ZooKeeper.