ZeroMQ
-
orientado a transporte de bytes (mensagens)
-
inspirado no sistema de atores do erlang para trocar mensagens e evitar problemas comuns na programação concorrente
-
resolve o problema de carregar bytes de um lugar para outro
-
não é apenas um modelo de socket crú
-
oferece alguns modelos de programação em cima de uma API baseada em socket
- publish/subscribe
- push/pull
- dealer-router
-
comunicação entre threads
-
suporta IPC
-
suporta TCP
-
suporta multicast UDP
-
pattern match
-
modelo de transporte eficiente
-
escrito em C++ com API no estilo C
-
push é um dos modelos mais rápidos, mas é o que demanda mais controle
-
push usa round-robin para distribuir
-
um publisher pode fazer bind com mais de um protocolo a mesmo tempo, assim um único send envia para dois ou mais protocolos
publisher_socker.bind("tcp://*:60001");
publisher_socker.bind("ipc://pub.ipc");
-
prefira usar um socket só para enviar e outro só para receber
-
defina afinidades para cada socket
-
incluir explicação sobre ZMQ_ROUTER_HANDOVER no tempo 40:27
Socket types
-
Request/Reply pattern: usado para enviar uma requisição e receber posteriormente a resposta para cada mensagem enviada.
-
Publish/Subscribe pattern: usado para distribuir dados de um único processo (publisher) para múltiplos destinatários (subscribers).
-
Pipeline Pattern: Usado para distribuir dados entre nós conectados
-
Exclusive Pair Pattern: Usado para conectar dois nós
-
REQ: request client
-
REP: replay server
-
PUSH: server
-
PULL: client (worker)
-
DEALER: client
-
ROUTER: server
Tipo de transporte
- In-Process (INPROC): Local (in-process) communication transport.
- Inter-Process (IPC): Local (inter-process) communication transport.
- TCP: Unicast communication transport using TCP.
- PGM: Multicast communication transport using PGM.
Veja também
nnd
SBE simple binary encoding
- https://github.com/real-logic/simple-binary-encoding
- muito usado no mercado financeiro (stock exchanges)
- protocolo para mensagens de negócio
- Martin Tompson (especialista em desempenho dem JVM)
MessagePack
- serializador de alto desempenho