Building Fault-Tolerant Distributed Systems with UDP/IP