Spread vs MPI vs zeromq?


En una de las respuestas a Broadcast como UDP con la Fiabilidad de TCP, un usuario menciona la API de mensajería Spread. También he encontrado uno llamado ØMQ . También tengo cierta familiaridad con MPI.

Entonces, mi pregunta principal es: ¿por qué elegiría uno sobre el otro? Más específicamente, ¿por qué elegiría usar Spread o ØMQ cuando hay implementaciones maduras de MPI que tener?

Author: Community, 2008-08-30

3 answers

MPI fue diseñado clústeres de computación 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 fallas e inestabilidad de la red, use uno de los otros.

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

 48
Author: tgamblin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-15 18:22:19

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

  1. MPI es un protocolo de comunicación, mientras que Spread y ØMQ son una implementación real.
  2. MPI proviene de la programación "paralela", mientras que Spread proviene de la programación "distribuida".

Por lo tanto, realmente depende de si está tratando de construir un sistema paralelo o un sistema distribuido. Están relacionados entre sí, pero las connotaciones/objetivos implícitos son diferentes. Programación paralela se ocupa de aumentar la potencia computacional mediante el uso de múltiples computadoras simultáneamente. La programación distribuida se ocupa de un grupo de ordenadores fiable (consistente, tolerante a fallos y de alta disponibilidad).

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

 13
Author: Eugene Yokota,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-08-31 09:05:23

Usted está abordando API muy diferentes aquí, con diferentes nociones sobre el tipo de servicios prestados y la infraestructura para cada uno de ellos. No se 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 otra cosa que enviar un mensaje a diferentes pares (incluidos los locales) basado en un conjunto restringido de patrones de mensajería comunes (PUSH/PULL, REQUEST/REPLY, PUB/SUB, etc.). Se maneja la conexión del cliente, la recuperación y la congestión básica estrictamente en función de 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 varios entornos, utilizando proxies y pasarelas simples entre nodos. Sin embargo, no esperes que funcione implementación de nodos, detección de redes o monitoreo de servidores; tendrá que hacerlo usted mismo.

Brevemente, use zeromq si tiene una aplicación que desea escalar desde el simple proceso multithread a un entorno distribuido y variable, o que desea experimentar y crear prototipos rápidamente y que ninguna solución parece encajar con su modelo. Sin embargo, espere tener que poner un poco de esfuerzo en la implementación y supervisión de su red si desea escalar a una escala muy grande Cluster.

 4
Author: Fabien Ninoles,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-10-19 23:06:59