Design for the Real World

Whether we’re connecting a roomful of mobile devices over WiFi or a cluster of virtual boxes over simulated Ethernet, we will hit the same kinds of problems. These are:

Discovery

How do we learn about other nodes on the network? Do we use a discovery service, centralized mediation, or some kind of broadcast beacon?

Presence

How do we track when other nodes come and go? Do we use some kind of central registration service, or heartbeating or beacons?

Connectivity

How do we actually connect one node to another? Do we use local networking, wide-area networking, or do we use a central message broker to do the forwarding?

Point-to-point messaging

How do we send a message from one node to another? Do we send this to the node’s network address, or do we use some indirect addressing via a centralized message broker?

Group messaging

How do we send a message from one node to a group of others? Do we work via a centralized message broker, or do we use a publish-subscribe model like ØMQ?

Testing and simulation

How do we simulate large numbers of nodes so we can test performance properly? Do we have to buy two dozen Android tablets, or can we use pure software simulation?

Distributed logging

How do we track what this cloud of nodes is doing so we can detect performance problems and failures? Do we create a main logging service, or do we allow every device to log the world around it?

Content distribution

How do we send content from one node to another? Do we use server-centric protocols ...

Get ZeroMQ now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.