> In any case, one question of mine has remained unanswered so far:
> How does one realize horizontal scaling? So far everyone seems to assume a 
> single machine/node.
> 
> Regardless of the socket type used, I will run into some limit at some point. 
> Then I need to add nodes to the cluster. How is the load balanced between 
> them?

Maybe not … it sounds like you’re sending a small number of small messages 
infrequently, but to a VERY large number of recipients.

With a point-to-point protocol like TCP you’re correct — you’ll hit some limit 
on what a single machine can handle, so will need to scale horizontally, which 
can be quite tricky.

Which is the beauty of multicast — you’re leveraging the network itself to do 
the fan-out.  So multicast may enable you to avoid scalability problems, but 
only if multicast works in your use case.

If you need to go point-to-point, then you will likely need to do some kind of 
“sharding”, and like anything else simpler solutions are, well, simpler.  For 
instance, when you exceed what a single machine can handle (quite a lot 
depending on the machine), then you go to two machines, then four, etc.  At 
each step you need some kind of maintenance window to re-balance traffic across 
servers, and some criteria to decide which recipients belong in which “shard”.

You can also make the sharding dynamic, but that is much more work — the 
advantage in your case is that it sounds like the traffic is not 
“transactional”, so you don’t care if a message gets delivered more than once, 
which makes the dynamic approach more feasible (but still tricky).



_______________________________________________
zeromq-dev mailing list
zeromq-dev@lists.zeromq.org
https://lists.zeromq.org/mailman/listinfo/zeromq-dev

Reply via email to