ZeroMQ (auch ØMQ , 0MQ oder ZMQ geschrieben ) ist eine asynchrone Messaging- Bibliothek, die für den Einsatz in verteilten oder nebenläufigen Anwendungen konzipiert ist. Sie stellt eine Nachrichtenwarteschlange bereit , aber im Gegensatz zu nachrichtenorientierter Middleware kann ein ZeroMQ-System ohne dedizierten Message Broker betrieben werden ; die „Zero“ im Namen steht für „Zero Broker“. [ 3 ] Die API der Bibliothek ist an Berkeley Sockets angelehnt .
ZeroMQ wird von einer großen Entwicklergemeinschaft unter der Leitung von iMatix entwickelt, dem Inhaber der Domain und der Markenrechte. Es gibt Drittanbieter-Schnittstellen für viele gängige Programmiersprachen.
Technologie
Die ZeroMQ-API stellt Sockets bereit (eine Art Verallgemeinerung der traditionellen IP- und Unix-Domain-Sockets ), die jeweils eine Viele-zu-Viele- Verbindung zwischen Endpunkten darstellen können . Da sie auf Nachrichtenebene arbeiten, erfordern sie die Verwendung eines Messaging-Musters und sind speziell für dieses Muster optimiert.
Die grundlegenden ZeroMQ-Muster sind:
- Anfrage – Antwort
- Verbindet eine Gruppe von Clients mit einer Gruppe von Diensten. Dies ist ein Muster für Remote Procedure Calls und Aufgabenverteilung.
- Veröffentlichen – abonnieren
- Verbindet eine Gruppe von Herausgebern mit einer Gruppe von Abonnenten. Dies ist ein Datenverteilungsmuster.
- Push-Pull (Pipeline)
- Verbindet Knoten in einem Fächermuster, das mehrere Schritte und Schleifen enthalten kann. Dies ist ein Muster zur parallelen Aufgabenverteilung und -sammlung.
- Exklusives Paar
- Verbindet zwei Steckdosen zu einem exklusiven Paar. (Dies ist ein fortgeschrittenes Low-Level-Muster für spezielle Anwendungsfälle.)
Jedes Muster definiert eine bestimmte Netzwerktopologie. Request-Reply definiert einen sogenannten „Servicebus“, Publish-Subscribe einen „Datenverteilungsbaum“ und Push-Pull eine „parallelisierte Pipeline“. Alle Muster sind bewusst so konzipiert, dass sie unbegrenzt skalierbar und somit im Internetmaßstab einsetzbar sind. [ 4 ]
Jede Nachricht, die über den Socket übertragen wird, wird als undurchsichtiger Datenblock behandelt . Die Zustellung an einen Abonnenten kann automatisch anhand der vorangestellten Zeichenkette des Datenblocks gefiltert werden. Zu den verfügbaren Übertragungsprotokollen gehören TCP , PGM (Reliable Multicast), Interprozesskommunikation ( IPC ) und Interthread-Kommunikation (ITC).
Die ZeroMQ-Kernbibliothek erzielt dank ihres internen Threading-Modells eine sehr gute Leistung und kann herkömmliche TCP-Anwendungen hinsichtlich des Durchsatzes durch den Einsatz einer automatischen Nachrichtenbündelungstechnik übertreffen. [ 5 ] [ 6 ]
ZeroMQ implementiert ZMTP, das ZeroMQ Message Transfer Protocol. [ 7 ] ZMTP definiert Regeln für die Abwärtskompatibilität, erweiterbare Sicherheitsmechanismen, die Strukturierung von Befehlen und Nachrichten, Verbindungsmetadaten und weitere Funktionen auf Transportebene. Immer mehr Projekte implementieren ZMTP direkt als Alternative zur Verwendung der vollständigen ZeroMQ-Implementierungen. [ 8 ]
Geschichte
iMatix-CEO Pieter Hintjens registrierte die Domain zeromq.org im Mai 2007 und startete zusammen mit Martin Sustrik das ZeroMQ-Projekt, der bis Dezember 2011 dessen Architekt und Hauptentwickler war.
Am 30. März 2010 gab Hintjens bekannt, dass iMatix (der ursprüngliche Entwickler des Advanced Message Queuing Protocol ) die AMQP-Arbeitsgruppe verlassen und AMQP/1.0 nicht mehr unterstützen werde, sondern stattdessen auf das deutlich einfachere und schnellere ZeroMQ setzen werde. [ 9 ] [ 10 ]
Im Jahr 2011 untersuchte das CERN Möglichkeiten zur Vereinheitlichung der Middleware-Lösungen für den Betrieb der CERN-Beschleuniger. Die CERN-Studie verglich zwei Open-Source-Implementierungen von CORBA , Ice , Thrift , ZeroMQ, YAMI4, [ 11 ] RTI und Qpid (AMQP) und bewertete ZeroMQ am besten, unter anderem aufgrund seiner Vielseitigkeit, einschließlich seiner einfachen Anpassbarkeit an LynxOS . [ 6 ]
Anfang 2012 gründeten zwei der ursprünglichen Entwickler Crossroads I/O als Fork von ZeroMQ. [ 12 ] [ 13 ] Martin Sustrik begann mit nanomsg, [ 14 ] einer Neuentwicklung der ZeroMQ-Kernbibliothek. [ 15 ]
Im August 2012 kündigte Dongmin Yu seine reine Java-Umsetzung von ZeroMQ, JeroMQ, an. [ 16 ] Dies inspirierte weitere vollständig native Portierungen von ZeroMQ, wie beispielsweise NetMQ für C# [ 17 ] und zmq.rs für Rust. [ 18 ]
Im März 2013 kündigte Pieter Hintjens einen neuen Entwurf des ZMTP-Protokolls auf Netzwerkebene an, der ZeroMQ um erweiterbare Sicherheitsmechanismen erweiterte. [ 19 ] Kurz darauf implementierte Martin Hurton den CurveZMQ-Authentifizierungs- und Verschlüsselungsmechanismus [ 20 ] in der Kernbibliothek.
Im Jahr 2016 spaltete der langjährige ZeroMQ-Entwickler Garrett D'Amore Nanomsg ab und gründete das Projekt NNG (Nanomsg Next Generation). [ 21 ]
Entwicklungsprozess
Die ZeroMQ-Community nutzt größtenteils den Collective Code Construction Contract (C4) [ 22 ] als Entwicklungsvertrag. C4 ist von den Prozessen der Wikipedia und dem Fork- Pull-Request- Modell von GitHub inspiriert . Ziel ist es, neuen Mitwirkenden die Teilnahme zu erleichtern und die Abhängigkeit von etablierten Mitwirkenden zu verringern.
Siehe auch
Referenzen
- ^ „Version 4.3.5“ . 9. Oktober 2023. Abgerufen am 20. Oktober 2023 .
- ^ „ØMQ-Lizenzierung“ . Abgerufen am 8. Juni 2023 .
- ^ "Los geht's" .
- ^ „Skalierungsschicht erreicht den Internet-Stack“ . Archiviert vom Original am 28.05.2019 . Abgerufen am 04.09.2013 .
- ^ „Wie kommt es, dass ØMQ einen höheren Durchsatz als TCP hat, obwohl es auf TCP aufbaut?“ . ZeroMQ FAQ . Abgerufen am 8. Juni 2013 .
- ^ a b „Middleware Trends And Market Leaders 2011“ . Abgerufen am 8. Juni 2013 .
- ^ „ZeroMQ Message Transfer Protocol“ . Abgerufen am 8. Juni 2013 .
- ^ „GitHub-Suche: ZMTP“ . GitHub . Abgerufen am 8. Juni 2013 .
- ^ „iMatix wird die Unterstützung für OpenAMQ bis 2011 einstellen .“ Mailingliste openamq-dev. Archiviert vom Original am 5. März 2016. Abgerufen am 5. September 2018 .
- ^ „Was ist das Problem mit AMQP (und wie man es behebt)“ . iMatix Corporation . Abgerufen am 14. Juli 2012 .
- ^ „Inspirel YAMI4“ . Abgerufen am 14. Juli 2012 .
- ^ „ZeroMQ und Crossroads I/O: Streit um Markenrechte“ . LWN.net . Abgerufen am 14. Juli 2012 .
- ^ „Crossroads I/O“ . Abgerufen am 14. Juli 2012 .
- ^ "nanomsg" . Abgerufen am 8. Juni 2013 .
- ^ „Warum sollte ich ZeroMQ in C und nicht in C++ geschrieben haben?“ Archiviert vom Original am 4. Februar 2016. Abgerufen am 20. Juni 2015 .
- ^ „jeromq - java pojo zeromq“ . Mailingliste zeromq-dev. Archiviert vom Original am 31. Juli 2013. Abgerufen am 23. Mai 2013 .
- ^ "NetMQ" . GitHub . Abgerufen am 23. Mai 2013 .
- ^ "zmq.rs" . GitHub . Abgerufen am 24. Oktober 2020 .
- ^ „Securing ZeroMQ: draft ZMTP v3.0 Protocol“ . Hintjens.com . Abgerufen am 23. Mai 2013 .
- ^ curvezmq.org
- ^ „NNG: Nanomsg-NG“ . nanomsg.org . Abgerufen am 4. August 2023 .
- ^ „Kollektiver Bauvertrag (C4.1)“ . ZeroMQ RFCs . Abgerufen am 23. Mai 2013 .