7
votes

Distribution de l'état sur de nombreuses machines

J'essaie d'écrire un outil nécessitant une connaissance de l'état d'autres machines dans un cluster (LAN local). Ceci est pour un système de basculement réseau / haute disponibilité similaire à VRRP et corosync / openais, mais je souhaite Pour contenir plus d'informations (telles que les caractéristiques de vitesse en temps réel / de performance quasi-temps), les dispositifs peuvent donc faire des choix plus intelligents. Cela signifie utiliser un protocole plus compliqué qu'un mécanisme à base de poids prédéterminé: en permettant à toutes les machines en regroupement de voir l'état de l'autre, ils peuvent communiquement d'accord sur lequel est le plus approprié pour être le dispositif maître.

De mes recherches, je n'ai trouvé aucune bibliothèque (C, C ++ ou Javame) qui propose un mécanisme d'état distribué. Idéalement, je cherche quelque chose qui diffuse / multidiffusion chaque ordinateur indique périodiquement des machines de participation afin de créer une table d'État globale et tout peut voir qui devrait être le maître. L'état dans ce cas est des paires de clé / valeur arbitraires.

Je préférerais ne pas réinventer aucune roulette, alors je suis curieux de savoir si quelqu'un ici peut me signaler dans la bonne direction?


5 commentaires

Avez-vous vérifié Boost MPI. Je pense que c'est pour l'informatique distribuée. Mais pas sûr si cela vous aidera ou non.


On dirait un cas classique de la casquette de Brewer (cohérence, disponibilité et partition). La lecture de cela devrait vous fournir une meilleure compréhension des problèmes réels.


@Msalters - Je ne sais pas ce que tu veux dire? Je comprends qu'il est impossible de garantir que chaque nœud a une connaissance de 100% de l'état de tous les autres participants, car les pannes se produiront. Les horizons divisés se produiront, etc. Ce que je suis gunning est un bon cadre générique pour accumuler et partager des États. Si vous regardez les goûts d'OSPF et d'autres protocoles de routage différents, vous verrez que cette technique est bien utilisée dans des zones spécalises.


Si vous parlez de l'état , vous êtes déjà assuimg que le système est cohérent. Vous mentionnez explicitement la disponibilité (haute). Étant donné que j'avais pensé signaler le théorème de la casquette dans un commentaire. Ce n'est pas un cadre bien sûr, c'est pourquoi je ne l'ai pas mis dans une réponse.


Merci, a du sens. La cohérence est la composante du plafond que je n'ai certainement pas besoin: une consistance éventuelle et un état légèrement obsolète est acceptable dans ce cas.


3 Réponses :


2
votes

Si j'étais vous, j'enquête sur Memcached (memcached.org) ou l'une des variantes NOSQL.


1 commentaires

+1 C'est une solution propre et simple que je trouve attrayante. D'autre part, toutes les infrastructures gizmos d'autres systèmes doivent être construites à la main.



1
votes

Je ne sais pas s'il y a une application à votre usage ou non. Mais je sais que vous pouvez écrire un programme simple avec la bibliothèque MPI et diffuser toutes les informations que vous souhaitez.

Tous les clients peuvent envoyer leur état à la noeud racine, puis le nœud racine diffusez le message.

Les fonctions dont vous avez besoin sont les suivantes: xxx

Il y a beaucoup de tutoriel sur C ++ / MPI sur net, juste Google IT!


0 commentaires

2
votes

On dirait que Apache Zookeper pourrait être un bon match. C'est distribué, magasin de clés hiérarchique. Pour citer leur Page de vue d'ensemble :

Zookeper a été conçu pour stocker des données de coordination: informations d'état, configuration, informations de localisation, etc.

Voici un exemple d'un simple Leader élection récipientée , bien qu'il nécessiterait une adaptation pour déterminer un chef de file par un critère pondéré.


0 commentaires