An implementation of the Speculative Paxos protocol
github.com
github.com
When a router receives a packet destined for a multicast group and that router has multiple destinations for that pocket, it must store that packet in memory until the last interface associated with that group can be written to. On networks which aren't heavily used that's not problem. Once you start utiziling your network however, the routers will be busy storing packets and their sensible-for-simple-cases buffers will become overwhelmed and you've got a multicast storm on your hands.
Great on paper, even works in test setups. Call me when you're running your kit to the limits, and I'll let you know you have a multicast problem.
Instead of thinking how to write all the underlying abstractions yourself and likely drowning in them before you can understand what Paxos is about.
Surely, for production you have to deal with a different set of issues, like how many nodes can you handle at once before you need to send way too many messages, what happens if your socket gets full or unresponsive, what if you get into a distributed deadlock in some rare case (which always happens in production), how to recover from out of order messages, what if ACKs are missing but operation went through etc.