2008-08-30 14 views
40

Dans l'une des réponses à Broadcast like UDP with the Reliability of TCP, un utilisateur mentionne l'API de messagerie Spread. J'ai également couru à travers un appelé ØMQ. J'ai également une certaine familiarité avec MPI. Donc, ma question principale est: pourquoi devrais-je choisir l'un par rapport à l'autre? Plus précisément, pourquoi choisirais-je d'utiliser Spread ou ØMQ quand il y aura des implémentations matures de MPI?Diffuser vs MPI vs zeromq?

Répondre

46

MPI a été dégroupé des clusters de calcul étroitement couplés avec des réseaux rapides et fiables. Spread et ØMQ sont conçus pour les grands systèmes distribués. Si vous concevez une application scientifique parallèle, utilisez MPI, mais si vous concevez un système réparti persistant qui doit résister aux failles 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. En outre, la sémantique de MPI nécessite que tous les messages envoyés soient consommés. Cela a beaucoup de sens pour les simulations sur un cluster, mais pas pour une application distribuée.

13

Je n'ai utilisé aucune de ces bibliothèques, mais je pourrais peut-être donner quelques conseils. MPI est un protocole de communication alors que Spread et ØMQ sont des implémentations réelles.

  • MPI provient de la programmation "parallèle" tandis que Spread provient de la programmation "distribuée". Donc, cela dépend vraiment de savoir si vous essayez de construire un système parallèle ou un système réparti. C'est ce que vous voulez. Ils sont liés les uns aux autres, mais les connotations/objectifs implicites sont différents. La programmation parallèle traite de l'augmentation de la puissance de calcul en utilisant plusieurs ordinateurs simultanément. La programmation distribuée traite des groupes d'ordinateurs fiables (cohérents, tolérants aux pannes et hautement disponibles).

    Le concept de "fiabilité" est légèrement différent de celui de TCP. La fiabilité de TCP est de "donner ce paquet au programme final, peu importe quoi". La fiabilité de la programmation distribuée est «même si certaines machines meurent, le système dans son ensemble continue de fonctionner de manière cohérente». Pour vraiment garantir que tous les participants ont reçu le message, il faudrait quelque chose comme 2 phase commit ou l'une des alternatives plus rapides.

  • 5

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

    ZeroMQ est une bibliothèque de communication de messagerie simple. Il ne fait rien d'autre que d'envoyer un message à différents homologues (y compris ceux locaux) en fonction d'un ensemble restreint de modèles de messagerie communs (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 strictement sur ces modèles et vous devez faire le reste vous-même.

    Bien qu'apparaissant très restreint, ce comportement simple est principalement ce dont vous auriez besoin pour la couche de communication de votre application. Il vous permet de passer rapidement d'un simple prototype, tout en mémoire, à des applications distribuées plus complexes dans divers environnements, en utilisant des proxys simples et des passerelles entre les nœuds. Toutefois, ne vous attendez pas à ce qu'il effectue le déploiement de nœud, la découverte de réseau ou la surveillance de serveur; Vous devrez le faire vous-même.En bref, utilisez zeromq si vous souhaitez faire évoluer une application du processus multithread simple vers un environnement distribué et variable, ou si vous voulez expérimenter et prototyper rapidement et qu'aucune solution ne semble correspondre à votre modèle. Attendez-vous toutefois à devoir déployer des efforts sur le déploiement et la surveillance de votre réseau si vous voulez évoluer vers un très grand cluster.