2008-08-30 17 views

Respuesta

46

MPI se diseñó clusters de cómputo estrechamente acoplados con redes rápidas y confiables. Spread y ØMQ están diseñados para grandes sistemas distribuidos. Si está diseñando una aplicación científica paralela, vaya con MPI, pero si está diseñando un sistema distribuido persistente que necesita ser resistente a las fallas y la inestabilidad de la red, use uno de los otros.

MPI tiene instalaciones muy limitadas para tolerancia a fallas; el comportamiento de manejo de error predeterminado en la mayoría de las implementaciones es un error en todo el sistema. Además, la semántica de MPI requiere que todos los mensajes enviados finalmente se consuman. Esto tiene mucho sentido para las simulaciones en un clúster, pero no para una aplicación distribuida.

13

No he usado ninguna de estas bibliotecas, pero puedo dar algunas pistas.

  1. MPI es un protocolo de comunicación, mientras que Spread y ØMQ son la implementación real.
  2. MPI viene de la programación "paralelo" mientras que la propagación proviene de la programación "distribuido".

Por lo tanto, lo que realmente depende de si usted está tratando de construir un sistema paralelo o sistema distribuido. Están relacionados entre sí, pero las connotaciones/objetivos implícitos son diferentes. La programación paralela se ocupa del aumento de la potencia computacional mediante el uso de múltiples computadoras simultáneamente. La programación distribuida trata con un grupo de computadoras confiables (consistentes, tolerantes a fallas y altamente disponibles).

El concepto de "fiabilidad" es ligeramente diferente del de TCP. La fiabilidad de TCP es "dar este paquete al programa final sin importar qué". La confiabilidad de la programación distribuida es que "incluso si algunas máquinas mueren, el sistema en su conjunto continúa funcionando de manera consistente". Para garantizar realmente que todos los participantes recibieron el mensaje, uno necesitaría algo como 2 phase commit o una de las alternativas más rápidas.

5

Aquí se abordan API muy diferentes, con nociones diferentes sobre el tipo de servicios proporcionados y la infraestructura para cada uno de ellos. No sé lo suficiente sobre MPI y Spread para responder por ellos, pero puedo ayudar un poco más con ZeroMQ.

ZeroMQ es una biblioteca de comunicación de mensajería simple. No hace más que enviar un mensaje a diferentes pares (incluidos los locales) en función de un conjunto restringido de patrones de mensajes comunes (PUSH/PULL, PETICIÓN/RESPUESTA, PUB/SUB, etc.). Maneja la conexión del cliente, la recuperación y la congestión básica basada estrictamente en esos patrones y usted tiene que hacer el resto usted mismo.

Aunque parece muy restringido, este comportamiento simple es principalmente lo que necesitaría para la capa de comunicación de su aplicación. Le permite escalar muy rápidamente de un prototipo simple, todo en memoria, a aplicaciones distribuidas más complejas en diversos entornos, utilizando proxies simples y pasarelas entre nodos. Sin embargo, no espere que realice la implementación de nodos, el descubrimiento de red o la supervisión del servidor; Tendrás que hacerlo tú mismo.

En pocas palabras, utilice zeromq si tiene una aplicación que desea escalar del simple proceso multiproceso a un entorno distribuido y variable, o si desea experimentar y crear prototipos rápidamente y que ninguna solución parece ajustarse a su modelo. No obstante, tenga que esforzarse un poco en el despliegue y la supervisión de su red si desea escalar a un clúster muy grande.

Cuestiones relacionadas