Grundlegendes zu erweiterten ZeroMQ Socket-Typen

Ich habe die 0MQ Anleitung gelesen, und ich verstehe die grundlegenden Sockeltypen: PUSH / PULL , REQ / REP und PUB / SUB .

Ich bin sehr verwirrt über ROUTER / DEALER und die X – Sockets (zB XSUB / XPUB , XREQ / XREP ).

Was sind die Anwendungsfälle für diese Socket-Typen?

    Triviale Archetypen

    ZeroMQ ” Sockets ” klingen ähnlich wie ein Socket-orientiertes Gerät, aber bei näherem Hinsehen fügt diese intelligente Bibliothek eher ein formales Kommunikationsmuster hinzu (das übrigens einen echten Socket verwendet ), das ein Schichten-Design aufweist, um Details wie interne elastische Pufferung intern zu adressieren , internes 1: N Fair-Queue-Senden / Polling, interner ioThread Load-Balancing, um nur einige zu nennen.

    Auf diesen internen intelligenten Subsystemen, aka die elementaren formalen Kommunikationsmuster – die so ähnlich wie möglich sind, um einem menschenähnlichen Verhalten ähnlich zu sein – wie- (eins) – PUB enthält + (andere) – SUB scribe – ZeroMQ baut a “Erdgeschoss” von viel leistungsfähigeren Messaging-Systemen.

    Als guter Helfer, anstatt eine PUB Buchse zu sagen, kann man sich vorstellen, dass ein SUB , XPUB oder DEALER eher eine Entität mit ” Verhalten ” ist , die an einem Ende der Telefonleitung sitzt , die etwas hart ist Gewohnheiten , die es während eines Telefonats nutzen kann.

    So können einige Entitäten miteinander sprechen, so wie PUB mit einem oder mehreren SUB sprechen kann – ohne zu wissen, wie viele / wenn irgendjemand mit seinem, na ja, mit irgendeinem seiner Telefonleitungen verbunden ist (ja , PUB kann viele ausgehende Telefonleitungen haben – und für Details die verfügbaren ZeroMQ-Transportklassen überprüfen, die PUB “für eingehende Anrufe bereitstellen” oder anderweitig bereitstellen kann – (Oh ja, sogar PUB kann “eines seiner Telefone abholen”) Linien “und wählen (.connect () in Richtung) einen ausgewählten XSUB oder XSUB Kontrahenten! Cool … (Ja, so viele ZeroMQ-functionen entworfen)) – all das parallel.

    SUB kann nach eigenem Ermessen entscheiden und abonnieren, um zu filtern, was zu hören ist und was nicht von der eingehenden Telefonleitung zu hören ist. Natürlich sind einige andere einfach nicht in ihrem vorverdrahteten Verhalten ausgestattet, um sich gegenseitig PAIR und PAIR in eine lebensfähige Konversation zu kommen, aber sie können mit ihrer “freundlichen” (behavioral-kompatiblen) Gegenpartei PAIR (ein PAIR , wie Ein Beispiel, hat eine einzige Chance, zu gehen und zu einem anderen PAIR buddy zu sprechen.

    Zum tieferen Verständnis dieser Bausteine, inkl. Der XPUB / XSUB Motivation, warum sie das einfache PUB / SUB Primitiv erweitern mussten, ist das Lesen von Pieter Hintjens Buch “Code Connected, Volume 1” (herunterladbar als pdf) .

    (IMHO ein Muss Buch lesen, nicht nur über die intelligenten Eigenschaften von ZeroMQ per se, sondern über die Veränderung der Denkweise und andere inspirierende Gedanken)

    ROUTER / DEALER & DEALER / ROUTER

    Diese formalen Kommunikationsmuster sind in Fig. 37 gut dargestellt und in dem genannten Buch diskutiert. Es lohnt sich, es zu lesen, als nur ein paar Worte hier zu geben.

    Ein ROUTER to DEALER Beispiel (ein 1-zu-N- Anwendungsfall), bei dem ein Server asynchron zu mehreren Worker spricht, kann “auf den Kopf gestellt” werden, um eine sehr nützliche N-zu-1- Architektur zu erhalten, bei der verschiedene Clients mit einem einzelnen Server kommunizieren. und mache das asynchron. Der genaue Anwendungsfall ergibt sich aus Ihrem Design-Bedarf.

    XPUB / XSUB Anwendungsfall

    Sobald der ” Inter-vermittelte ” Verbindungsmodus zwischen den ZeroMQ-Grundelementen erreicht ist, bedient das XPUB / XSUB Proxy- “Gerät” einen weiteren Add-On-Dienst, .bind() lediglich ein Proxy für .bind() & .connect() zu sein. Es “interpretiert” auch den Nachrichteninhalt (prüft eingehende zmq.SUBSCRIBE -s und überträgt sie über den Proxy-eigenen XSUB die XPUB PUB Seite) durch Lesen der XPUB Socket-Seite. Dies ist der Hauptanwendungsfall für XSUB und XPUB

    Das ZMQ Arsenal Element für Element als solches zu beherrschen, ist nicht per se das Ziel. Es handelt sich vielmehr um ein LEGO-artiges Baukasten-Set zum Entwurf projektspezifischer verteilter Nachrichtenmuster, die nach einem komplexeren Bedarf zusammenarbeiten – Selbstheilung nach Ausfall einzelner Knoten, performancesskalierbarkeit, adaptive Rekonfiguration und vieles mehr Andere.

    Nur ein Bild, Abb.60: Bildbeschreibung hier eingeben

    Komplexe Systeme

    Eine typische Anwendung in der realen Welt muss viel weiter gehen, als nur die elementaren PAIR / PAIR , XREQ / XREP , … XREQ XREP , wenn diese passend in Ihre höheren Designanforderungen passen und auf denen Sie ein hinzufügen Verhaltensstrategie, die diese untergeordneten Archetypen unter Ihrer globalen Designkontrolle verwendet.

    Um Code zu arrangieren, lohnt es sich zuerst eine Zeit mit dem Buch zu verbringen, nicht umgekehrt.

    Das wird dir viel Aha sparen! Augenblicke später.