Spread vs MPI vs Zeromq?

Dans l’une des réponses à Broadcast comme UDP avec la fiabilité de TCP , un utilisateur mentionne l’API de messagerie Spread . J’ai aussi rencontré un certain ØMQ . J’ai aussi une certaine connaissance de MPI .

Alors, ma principale question est la suivante: pourquoi choisirais-je l’un sur l’autre? Plus précisément, pourquoi choisirais-je d’utiliser Spread ou ØMQ lorsqu’il existe des implémentations matures de MPI?

MPI a été conçu pour des grappes de calcul étroitement couplées avec des réseaux rapides et fiables. Spread et ØMQ sont conçus pour les grands systèmes dissortingbués. Si vous concevez une application scientifique parallèle, optez pour MPI, mais si vous concevez un système dissortingbué persistant devant résister aux défaillances et à l’instabilité du réseau, utilisez l’un des autres.

MPI dispose d’installations très limitées pour la tolérance aux pannes; le comportement de gestion des erreurs par défaut dans la plupart des implémentations est un échec à l’échelle du système. De plus, la sémantique de MPI exige que tous les messages envoyés finissent par être consommés. Cela a beaucoup de sens pour les simulations sur un cluster, mais pas pour une application dissortingbuée.

Je n’ai utilisé aucune de ces bibliothèques, mais je pourrais peut-être donner quelques conseils.

  1. MPI est un protocole de communication tandis que Spread et ØMQ sont une implémentation réelle.
  2. MPI provient de la programmation “parallèle” tandis que Spread provient de la programmation “dissortingbuée”.

Donc, cela dépend vraiment si vous essayez de construire un système parallèle ou un système dissortingbué. Ils sont liés les uns aux autres, mais les connotations / objectives implicites sont différents. La programmation parallèle concerne l’augmentation de la puissance de calcul en utilisant plusieurs ordinateurs simultanément. La programmation dissortingbuée concerne un groupe d’ordinateurs fiable (cohérent, tolérant aux pannes et hautement disponible).

Le concept de “fiabilité” est légèrement différent de celui de TCP. La fiabilité de TCP est “donner ce paquet au programme final, peu importe quoi.” La fiabilité de la programmation dissortingbuée est “même si certaines machines meurent, le système dans son ensemble continue à fonctionner de manière cohérente.” Pour vraiment garantir que tous les participants ont reçu le message, il faudrait quelque chose comme un engagement en deux phases ou une alternative plus rapide.

Vous abordez ici des API très différentes, avec des notions différentes sur le type de services fournis et l’infrastructure pour chacun d’eux. Je ne connais pas assez le MPI et le Spread pour y répondre, mais je peux aider un peu plus avec ZeroMQ.

ZeroMQ est une simple bibliothèque de communication par messagerie. Il ne fait rien d’autre que d’envoyer un message à différents pairs (y compris locaux) en fonction d’un ensemble restreint de modèles de messagerie courants (PUSH / PULL, REQUEST / REPLY, PUB / SUB, etc.). Il gère la connexion client, la récupération et la congestion de base en se basant ssortingctement sur ces modèles et vous devez faire le rest vous-même.

Bien que cela semble très restreint, ce comportement simple est principalement ce dont vous avez besoin pour la couche de communication de votre application. Il vous permet de passer très rapidement d’un simple prototype, tout en mémoire, à des applications dissortingbuées plus complexes dans divers environnements, en utilisant des proxys et des passerelles simples entre les nœuds. Cependant, ne vous attendez pas à ce qu’il effectue un déploiement de noeud, une découverte de réseau ou une surveillance de serveur; Vous devrez le faire vous-même.

En bref, utilisez zeromq si vous souhaitez faire évoluer une application du simple processus multithread vers un environnement dissortingbué et variable ou si vous souhaitez expérimenter et prototyper rapidement et qu’aucune solution ne semble correspondre à votre modèle. Attendez-vous cependant à devoir faire des efforts sur le déploiement et la surveillance de votre réseau si vous souhaitez évoluer vers un très grand cluster.