|
|
|
|
|
by haberman
5553 days ago
|
|
Can't watch the video right away, but I'll just say that every time I read the ZeroMQ guide (http://zguide.zeromq.org/page:all) I am frustrated by the lack of any clear technical explanation of ZeroMQ's basic architecture. Today I gave it another shot, and after half an hour of trying to glean technical detail and skipping any parts that read like a like a comic book ("zap-pow-kaboom satori paradigm-shift moment"), I think I've learned the following: * ZMQ works by spawning a background thread that runs a
poll() (or equivalent)-based async I/O loop. This thread
is created when you create a ZMQ "context."
* On top of a context you can create a ZMQ "socket", which
may map to N underlying UNIX sockets (or a comparable
transport), and which will transparently queue data to slow
or unavailable receivers.
* Over a socket you can send or receive "messages", which
are length-delimited strings which are always delivered
in full with the original length. Send/receive can be
either blocking or non-blocking.
* Contexts can be shared across threads, but sockets are
not thread-safe. Communication between application threads
and the ZMQ I/O thread is via a lock-free queue.
The main features seem to be topology-agnostic programming (since you don't have to know what a socket is connected to to send/receive over it) and transparent queuing. In my opinion transparent queues can be problematic because they transparently use up memory that can be hard to account for. Topology-agnostic programming certainly seems interesting, but in my experience of distributed systems programming I never seem to need or want complex messaging topologies. I guess I don't really get what all the hype is about. Maybe I should watch the video. |
|
I also think it's kind of a misfeature, and that in the real world it tends to devolve to "hub and spoke client/server with lots more failure modes".