ZeroMQ (también escrito ØMQ , 0MQ o ZMQ ) es una biblioteca de mensajería asincrónica, 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 ejecutarse sin un agente de mensajes dedicado ; el cero en el nombre es para el agente cero. [3] La API de la biblioteca está diseñada para parecerse a los sockets de Berkeley .
ZeroMQ es desarrollado por una gran comunidad de colaboradores, fundada por iMatix, que posee el nombre de dominio y las marcas comerciales. Existen enlaces de terceros para muchos lenguajes de programación populares.
La API ZeroMQ proporciona sockets (una especie de generalización de los sockets tradicionales de IP y dominio Unix ), cada uno de los cuales puede representar una conexión de varios a varios entre puntos finales . Al funcionar con una granularidad por mensaje, requieren que se utilice un patrón de mensajería y están particularmente optimizados para ese tipo de patrón.
Los patrones básicos de ZeroMQ son:
Cada patrón define una topología de red particular. La petición-respuesta define un denominado "bus de servicio", la publicación-suscripción define un "árbol de distribución de datos" y la inserción-extracción define una "tubería paralela". Todos los patrones están diseñados deliberadamente de manera que sean infinitamente escalables y, por lo tanto, utilizables a escala de Internet. [4]
Cualquier mensaje que pase por el socket se trata como un blob opaco de datos. La entrega a un suscriptor se puede filtrar automáticamente por la cadena principal del blob. Los transportes de mensajes disponibles incluyen TCP , PGM (multidifusión confiable), comunicación entre procesos ( IPC ) y comunicación entre subprocesos (ITC).
La biblioteca central ZeroMQ funciona muy bien debido a su modelo de subprocesamiento interno y puede superar a las aplicaciones TCP convencionales en términos de rendimiento al utilizar una técnica de procesamiento automático 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 funciones a nivel de transporte. Un número cada vez mayor de proyectos implementan ZMTP directamente como una alternativa al uso de las implementaciones completas de ZeroMQ. [8]
El CEO de iMatix, Pieter Hintjens, registró el dominio zeromq.org en mayo de 2007 e inició 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 de Advanced Message Queuing Protocol ) abandonaría el grupo de trabajo AMQP y no planeaba soportar AMQP/1.0 a favor de ZeroMQ, significativamente más simple y rápido. [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 le dio a ZeroMQ la puntuación más alta, en parte por su versatilidad, incluida su fácil adaptabilidad al LynxOS . [6]
A principios de 2012, dos de los desarrolladores originales bifurcaron ZeroMQ como Crossroads I/O. [12] [13] Martin Sustrik inició nanomsg, [14] una reescritura de la biblioteca principal de ZeroMQ. [15]
En agosto de 2012, Dongmin Yu anunció su conversión a Java puro de ZeroMQ, JeroMQ. [16] Esto ha inspirado otros puertos completamente nativos 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 a nivel de cable ZMTP que aporta 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, el desarrollador veterano de ZeroMQ Garrett D'Amore bifurcó Nanomsg para crear el proyecto NNG (Nanomsg Next Generation). [21]
La comunidad ZeroMQ utiliza principalmente el Contrato de construcción de código colectivo (C4) [22] como contrato de desarrollo. C4 está inspirado en los procesos de Wikipedia y en el modelo de bifurcación + solicitud de incorporación de cambios de GitHub . Se centra en simplificar la participación de los nuevos colaboradores y en reducir la dependencia de los colaboradores más antiguos.