Comprensione dei tipi di socket ZeroMQ avanzati

Ho letto la guida di 0MQ e ho compreso i tipi di socket di base: PUSH / PULL , REQ / REP e PUB / SUB .

Sono molto confuso riguardo a ROUTER / DEALER e X – socket (es. XSUB / XPUB , XREQ / XREP ).

Quali sono i casi d’uso per questi tipi di socket?

Archivipi banali

Gli zoccoli “ZeroMQ” suonano allo stesso modo come un dispositivo orientato al socket, ma a un esame più attento questa libreria intelligente aggiunge un modello di comunicazione formale (che usa un vero socket ) che ha un design a strati per indirizzare internamente dettagli come il buffer elastico interno , interno 1: N Fair-Queue-Sending / Polling, bilanciamento del carico interno di ioThread, per citarne solo alcuni.

In cima a questi sottosistemi intelligenti interni, noti anche come modelli di comunicazione formale elementare – nominati il ​​più vicino ansible per assomigliare a un comportamento simile all’uomo – come – (uno) – PUB -lostri + (altri) – SUB -scribe – ZeroMQ costruisce un “piano terra” di schemi di messaggistica molto più potenti.

Come buon aiuto, invece di dire un PUBsocket , si può scegliere di immaginare un SUB , XPUB o DEALER come un’ quadro con un ” comportamento , seduto su un’estremità della linea telefonica , che ha qualche abitudini cablate che possono essere utilizzate durante una telefonata.

Quindi, alcune quadro possono parlare l’una con l’altra, allo stesso modo PUB può parlare con uno o più SUB (s) – senza sapere quanti / se qualcuno è (sono) collegato alla sua, beh, a una qualsiasi delle sue linee telefoniche (sì , PUB può avere molte linee telefoniche in uscita – oltre ai dettagli controlla le classi di trasporto ZeroMQ disponibili, che PUB può “esporre per le chiamate in arrivo” o altrimenti distribuire – (Oh sì, anche PUB può “prendere uno dei suoi telefoni- linee “e componi (.connect () verso) una controparte selezionata SUB o XSUB ! Cool … (Sì, quante funzionalità di ZeroMQ sono state progettate)) – tutto questo in parallelo.

SUB può decidere a sua discrezione e iscriversi al filtro, cosa ascoltare e cosa non sentire dalla linea telefonica in entrata. Naturalmente, alcuni altri semplicemente non sono dotati del loro comportamento precablato per poter telefonarsi universalmente l’un l’altro e ottenere una significativa conversazione, ma possono parlare con la controparte “amichevole” (compatibile comportamentale) (un PAIR , come un esempio, ha uno e l’unica possibilità di andare e suonare + parlare con un altro PAIR -buddy).

Per una comprensione più approfondita di questi elementi costitutivi, inclusa la motivazione XPUB / XSUB , perché hanno dovuto estendere la semplice primitiva PUB / SUB , il modo migliore che si può consigliare è leggere il libro di Pieter Hintjens “Code Connected, Volume 1” (scaricabile come pdf) .

(IMHO è un libro assolutamente da leggere, non solo sulle proprietà intelligenti di ZeroMQ, ma sul cambiamento di mentalità e altri pensieri stimolanti)

ROUTER / DEALER E DEALER / ROUTER

Questi modelli di comunicazione formale sono ben illustrati in Fig.37 e discussi in giro, in detto libro. Vale la pena leggerlo, piuttosto che prendere qualche parola qui.

Un esempio da ROUTER a DEALER (un caso di utilizzo 1-to-N ) in cui un server parla in modo asincrono a più worker può essere “capovolto” per ottenere un’architettura N-to-1 molto utile dove i vari client parlano con un singolo server, e farlo in modo asincrono. Il caso d’uso così preciso è dato dal tuo bisogno di progettazione.

XPUB XSUB uso XPUB / XSUB

Una volta arrivata alla modalità ” inter-mediata ” delle connessioni tra gli elementi primitivi ZeroMQ, il “dispositivo” proxy XPUB / XSUB serve un altro servizio aggiuntivo che non sia semplicemente un proxy per .bind() e .connect() . Inoltre “interpreta” il contenuto del messaggio (controlla zmq.SUBSCRIBE entrata e lo trasferisce verso il lato reale- PUB player tramite il proxy XSUB ) leggendo il lato socket XPUB . Questo è il caso d’uso principale per XSUB e XPUB

Padroneggiare l’arsenale ZMQ elemento per elemento in quanto tale non è l’objective di per sé. È piuttosto un kit in stile LEGO di elementi costitutivi per la progettazione di schemi di messaggistica distribuiti specifici del progetto, che cooperano in base a un bisogno più complesso: autoriparazione dopo un guasto di un nodo, scalabilità delle prestazioni, riconfigurazione adtriggers e molti altri.

Una sola foto, Fig.60: inserisci la descrizione dell'immagine qui

Sistemi complessi

La tipica applicazione del mondo reale deve andare molto oltre il semplice riutilizzo degli elementari PAIR / PAIR , XREQ / XREP , … primitivi, dove questi si adattano in modo adeguato alle esigenze di progettazione di livello superiore e in cima a cui si aggiunge un strategia comportamentale, che utilizza questi archetipi di livello inferiore sotto il controllo del design globale.

Per ottenere il codice sistemato, vale la pena passare un po ‘di tempo prima con il libro, non viceversa.

Questo ti farà risparmiare un sacco di Aha! momentjs dopo.