ZeroMQ (también escrito ØMQ , 0MQ o ZMQ ) es una biblioteca de mensajería asíncrona , destinada a su uso en aplicaciones distribuidas o concurrentes. Proporciona una cola de mensajes , pero a diferencia del middleware orientado a mensajes , un sistema ZeroMQ puede funcionar sin un intermediario de mensajes dedicado ; el cero en el nombre es de "intermediario cero". [ 3 ] La API de la biblioteca está diseñada para asemejarse a los sockets de Berkeley .
ZeroMQ es desarrollado por una gran comunidad de colaboradores y fue fundado por iMatix, propietaria del nombre de dominio y las marcas registradas. Existen interfaces de terceros para muchos lenguajes de programación populares.
Tecnología
La API de ZeroMQ proporciona sockets (una especie de generalización de los sockets tradicionales de dominio IP y Unix ), cada uno de los cuales puede representar una conexión de muchos a muchos entre puntos finales . Al operar con una granularidad a nivel de mensaje, requieren el uso de un patrón de mensajería y están especialmente optimizados para ese tipo de patrón.
Los patrones básicos de ZeroMQ son:
- Solicitud-respuesta
- Conecta un conjunto de clientes a un conjunto de servicios. Se trata de un patrón de distribución de tareas y llamadas a procedimientos remotos .
- Publicar-suscribirse
- Conecta un conjunto de editores con un conjunto de suscriptores. Este es un patrón de distribución de datos.
- Sistema de empuje-tracción (tubería)
- Conecta nodos en un patrón de ramificación/conexiones que puede tener múltiples pasos y bucles. Se trata de un patrón de distribución y recopilación de tareas en paralelo .
- Par exclusivo
- Conecta dos enchufes en un par exclusivo. (Este es un patrón avanzado de bajo nivel para casos de uso específicos).
Cada patrón define una topología de red particular. El patrón de solicitud-respuesta define un llamado "bus de servicio", el de publicación-suscripción define un "árbol de distribución de datos" y el de envío-recepción define una "tubería paralela". Todos los patrones están diseñados deliberadamente para ser infinitamente escalables y, por lo tanto, utilizables a escala de Internet. [ 4 ]
Cualquier mensaje que pase por el socket se trata como un bloque de datos opaco. La entrega a un suscriptor se puede filtrar automáticamente mediante la cadena que encabeza el bloque. Los protocolos de transporte de mensajes disponibles incluyen TCP , PGM (multidifusión confiable), comunicación entre procesos ( IPC ) y comunicación entre subprocesos (ITC).
La biblioteca principal de ZeroMQ funciona muy bien gracias a su modelo de subprocesos interno, y puede superar a las aplicaciones TCP convencionales en términos de rendimiento mediante el uso de una técnica de agrupación automática de mensajes. [ 5 ] [ 6 ]
ZeroMQ implementa ZMTP, el Protocolo de Transferencia de Mensajes de ZeroMQ. [ 7 ] ZMTP define reglas para la interoperabilidad con versiones anteriores, mecanismos de seguridad extensibles, enmarcado de comandos y mensajes, metadatos de conexión y otras funcionalidades a nivel de transporte. Un número creciente de proyectos implementa ZMTP directamente como alternativa al uso de las implementaciones completas de ZeroMQ. [ 8 ]
Historia
El director ejecutivo de iMatix, Pieter Hintjens, registró el dominio zeromq.org en mayo de 2007 y puso en marcha el proyecto ZeroMQ junto con Martin Sustrik, quien fue su arquitecto y desarrollador principal hasta diciembre de 2011.
El 30 de marzo de 2010, Hintjens anunció que iMatix (el diseñador original del Protocolo Avanzado de Cola de Mensajes ) abandonaría el grupo de trabajo de AMQP y no planeaba dar soporte a AMQP/1.0 en favor del significativamente más simple y rápido ZeroMQ. [ 9 ] [ 10 ]
En 2011, el CERN estaba investigando formas de unificar las soluciones de middleware utilizadas para operar los aceleradores del CERN. El estudio del CERN comparó dos implementaciones de código abierto de CORBA , Ice , Thrift , ZeroMQ, YAMI4, [ 11 ] RTI y Qpid (AMQP) y calificó a ZeroMQ como la mejor, en parte por su versatilidad, incluida su fácil adaptabilidad a LynxOS . [ 6 ]
A principios de 2012, dos de los desarrolladores originales bifurcaron ZeroMQ como Crossroads I/O. [ 12 ] [ 13 ] Martin Sustrik ha iniciado nanomsg, [ 14 ] una reescritura de la biblioteca principal de ZeroMQ. [ 15 ]
En agosto de 2012, Dongmin Yu anunció su conversión pura de ZeroMQ a Java, JeroMQ. [ 16 ] Esto ha inspirado otras adaptaciones nativas completas de ZeroMQ, como NetMQ para C# [ 17 ] y zmq.rs para Rust. [ 18 ]
En marzo de 2013, Pieter Hintjens anunció un nuevo borrador del protocolo ZMTP a nivel de cable que incorpora mecanismos de seguridad extensibles a ZeroMQ. [ 19 ] Poco después, Martin Hurton implementó el mecanismo de autenticación y cifrado CurveZMQ [ 20 ] en la biblioteca principal.
En 2016, Garrett D'Amore, desarrollador veterano de ZeroMQ, bifurcó Nanomsg para crear el proyecto NNG (Nanomsg Next Generation). [ 21 ]
Proceso de desarrollo
La comunidad ZeroMQ utiliza principalmente el Contrato de Construcción de Código Colectivo (C4) [ 22 ] como contrato de desarrollo. C4 se inspira en los procesos de Wikipedia y en el modelo de bifurcación y solicitud de extracción de GitHub . Su objetivo es simplificar la participación de los nuevos colaboradores y reducir la dependencia de los colaboradores más antiguos.
Véase también
Referencias
- ↑ "Versión 4.3.5" . 9 de octubre de 2023. Consultado el 20 de octubre de 2023 .
- ↑ "Licencias ØMQ" . Consultado el 8 de junio de 2023 .
- ↑ "Comenzar" .
- ↑ "La capa de escalabilidad llega a la pila de Internet" . Archivado del original el 28 de mayo de 2019. Consultado el 4 de septiembre de 2013 .
- ↑ "¿Cómo es posible que ØMQ tenga un rendimiento superior al de TCP si está basado en TCP?" . Preguntas frecuentes de ZeroMQ . Consultado el 8 de junio de 2013 .
- 1 2 "Tendencias y líderes del mercado de middleware 2011" . Consultado el 8 de junio de 2013 .
- ↑ "Protocolo de transferencia de mensajes ZeroMQ" . Consultado el 8 de junio de 2013 .
- ↑ "Búsqueda en GitHub: ZMTP" . GitHub . Consultado el 8 de junio de 2013 .
- ↑ "iMatix dejará de dar soporte a OpenAMQ en 2011" . Lista de correo openamq-dev. Archivado del original el 5 de marzo de 2016. Consultado el 5 de septiembre de 2018 .
- ↑ "¿Qué falla en AMQP (y cómo solucionarlo)?" . iMatix Corporation . Consultado el 14 de julio de 2012 .
- ↑ "Inspirel YAMI4" . Consultado el 14 de julio de 2012 .
- ↑ "ZeroMQ y Crossroads I/O: Cesión de marcas registradas" . LWN.net . Consultado el 14 de julio de 2012 .
- ↑ "Encrucijada I/O" . Consultado el 14 de julio de 2012 .
- ↑ "nanomsg" . Consultado el 8 de junio de 2013 .
- ↑ "¿Por qué debería haber escrito ZeroMQ en C, no en C++?" . Archivado del original el 4 de febrero de 2016. Consultado el 20 de junio de 2015 .
- ↑ "jeromq - java pojo zeromq" . Lista de correo zeromq-dev. Archivado del original el 31 de julio de 2013. Consultado el 23 de mayo de 2013 .
- ↑ "NetMQ" . GitHub . Consultado el 23 de mayo de 2013 .
- ↑ "zmq.rs" . GitHub . Consultado el 24 de octubre de 2020 .
- ↑ "Protección de ZeroMQ: borrador del protocolo ZMTP v3.0" . Hintjens.com . Consultado el 23 de mayo de 2013 .
- ↑ curvezmq.org
- ↑ «NNG: Nanomsg-NG» . nanomsg.org . Consultado el 4 de agosto de 2023 .
- ↑ "Contrato de construcción de código colectivo (C4.1)" . RFC de ZeroMQ . Consultado el 23 de mayo de 2013 .
Enlaces externos
- Sitio web oficial
- Bibliotecas de programación concurrente
- Software libre programado en C++
- Software de sistema gratuito
- Comunicación entre procesos
- Middleware orientado a mensajes
- Software que utiliza la Licencia Pública de Mozilla.
- Software de 2007