Comprender los tipos avanzados de zócalos ZeroMQ
(1)
Arquetipos Triviales
Los " zócalos " ZeroMQ suenan como un dispositivo orientado a zócalos, sin embargo, en una mirada más cercana, esta biblioteca inteligente agrega un patrón de comunicación formal (que por cierto utiliza un zócalo verdadero) que tiene un diseño en capas para abordar internamente detalles como el búfer interno , interno 1: N Fair-Queue-Sending / Polling, equilibrio de carga interno ioThread, por nombrar solo algunos.
Encima de estos subsistemas inteligentes internos, también conocidos como los patrones de comunicación formal elementales, nombrados lo más cerca posible para parecerse a un comportamiento similar al humano -como- (uno) -
PUB
-lish + (otros) -
SUB
-scribe - ZeroMQ
construye
un "planta baja" de esquemas de mensajería mucho más potentes.
Como un buen ayudante, en lugar de decir un
socket
PUB
, uno puede optar por imaginar un
SUB
,
XPUB
o
DEALER
para ser más bien una
entidad con "
comportamiento
"
,
sentado en un extremo de la línea telefónica
, que tiene un poco de con cable, que puede usar durante una llamada telefónica.
Por lo tanto, algunas entidades pueden hablar entre sí, al igual que
PUB
puede hablar con uno o varios
SUB
(s), sin saber cuántos / si alguno está conectado a él, bueno, a
cualquiera
de sus líneas telefónicas (sí ,
PUB
puede tener muchas líneas telefónicas salientes; además, para obtener más información, consulte las Clases de transporte ZeroMQ disponibles, que
PUB
puede "exponer para las llamadas entrantes" o desplegar de otra manera (Oh, sí, incluso
PUB
puede "tomar uno de sus teléfonos- líneas "y marque (.connect () hacia) una contraparte
SUB
o
XSUB
seleccionada. Genial ... (Sí, como muchas funciones ZeroMQ
XSUB
)) - todo eso en paralelo.
SUB
puede, a su discreción, decidir y suscribirse para filtrar, qué escuchar y qué no escuchar de la línea telefónica entrante.
Naturalmente, algunos otros simplemente no están equipados dentro de su comportamiento precableado para poder comunicarse universalmente entre sí y entrar de manera significativa en una conversación viable, pero pueden hablar con su contraparte "amigable" (compatible con el comportamiento) (un
PAIR
, como un ejemplo, tiene una y la única oportunidad de ir y llamar + hablar con otro
PAIR
-buddy).
Para una comprensión más profunda de estos bloques de construcción, incluida la motivación
XPUB
/
XSUB
, por qué tuvieron que extender la primitiva simple
PUB
/
SUB
, la mejor manera que uno puede recomendar es leer
el
libro de
Pieter Hintjens
"Código conectado, volumen 1"
(descargable como pdf)
.
(En mi humilde opinión, un libro de lectura obligada, no solo sobre las propiedades inteligentes de ZeroMQ per-se, sino sobre el cambio de mentalidad y otros pensamientos inspiradores).
ROUTER
/
DEALER
Y
DEALER
/
ROUTER
Estos patrones de comunicación formal se ilustran bien en la figura 37 y se discuten en torno a dicho libro. Vale la pena leerlo, que solo obtener algunas palabras aquí.
Un ejemplo de
ROUTER
a
DEALER
(un caso de uso de
1 a N
) en el que un servidor habla de forma asíncrona con varios trabajadores puede ponerse "al revés" para obtener una arquitectura
N-a-1
muy útil en la que varios clientes hablan con un solo servidor, y hacer esto asincrónicamente
Entonces, el caso de uso exacto viene dado por su necesidad de diseño.
XPUB
uso de
XPUB
/
XSUB
Una vez que se
XPUB
modo "
intermedio
" de conexiones entre los elementos primitivos ZeroMQ, el "dispositivo" proxy
XPUB
/
XSUB
sirve un servicio adicional más que simplemente ser un proxy para
.bind()
y
.connect()
.
También "interpreta" el contenido del mensaje (verificando
zmq.SUBSCRIBE
-s y las transfiere hacia el lado real-
PUB
-lisher a través del proxy propio
XSUB
) leyendo el lado del zócalo
XPUB
. Este es el caso de uso principal para
XSUB
y
XPUB
Dominar el arsenal de ZMQ elemento por elemento como tal no es el objetivo en sí. Es más bien un kit de bloques de construcción de estilo LEGO para diseñar patrones de mensajería distribuida específicos del proyecto, que cooperan de acuerdo con una necesidad más compleja: autocuración después de una falla de un solo nodo, escalabilidad de rendimiento, reconfiguración adaptativa y muchos otros.
Solo una foto, Fig.60:
Sistemas complejos
La aplicación típica del mundo real tiene que ir mucho más allá de simplemente reutilizar las primitivas
PAIR
/
PAIR
,
XREQ
/
XREP
, ...
XREP
, donde estas se ajustan adecuadamente a sus necesidades de diseño de nivel superior, y encima de las cuales agrega un estrategia de comportamiento, que utiliza estos arquetipos de nivel inferior bajo su control de diseño global.
Para organizar el código, vale la pena pasar un tiempo con el libro primero, no al revés.
¡Esto te ahorrará mucho Aha! Momentos después.
He leído la guía 0MQ y entiendo los tipos de socket básicos:
PUSH
/
PULL
,
REQ
/
REP
y
PUB
/
SUB
.
Sin embargo, estoy muy confundido sobre
ROUTER
/
DEALER
y los enchufes
X
(por ejemplo,
XSUB
/
XPUB
,
XREQ
/
XREP
).
¿Cuáles son los casos de uso para estos tipos de socket?